Projeto de Banco de Dados NOME DO PROJETO Fulano de Tal Beltrano de Tal Professor: Ricardo Rodrigues Barcelar Atenção! Este modelo deve ser alterado de acordo com a estratégia de projeto de banco de dados adotada. Dessa forma, vide apostila que trata de estratégia de projeto de banco de dados antes de começar o trabalho. Cuiabá/MT Novembro – 2009 1 ÍNDICE 1 1. INTRODUÇÃO O presente relatório tem como finalidade apresentar todas as fases de desenvolvimento de um banco de dados realizado durante a disciplina de Banco de Dados. Esse é um banco de dados hipotético criado para verificar os conceitos vistos em sala de aula. O banco de dados final foi resultado da integração de sistemas encontrados em uma empresa de manufatura, sendo eles Sistema de Compras e Pessoal, Sistema de Manutenção e Sistema de Produção (Colocar qual é a situação do seu projeto). Para tanto utilizou-se a estratégia de projeto de banco de dados ... (Top- Down/Bottom-Up) A fases do projeto foram as seguintes: 1. 2. 3. 4. Ver conforme estratégia. Nas seções seguintes, serão descritas com detalhes as etapas citadas acima. 2 2. ETAPAS (Descrever etapa por etapa. Aqui é somente o exemplo. Deve conter todas as etapas que você desenvolveu bem especificada) 2.1. LEVANTAMENTO DE REQUISITOS E MODELAGEM (exemplo) Inicialmente, o projeto foi dividido em três sistemas: Sistema de compras e gerência de pessoal; Sistema de manutenção; Sistema de produção. Desses sistemas, foram observadas as principais funcionalidades e ações realizadas, para então, se determinar quais seriam as entidades e os seus atributos relevantes. Em seguida, foram determinadas as relações entre essas entidades e os atributos dessas relações. De posse desses elementos, foi efetuada uma normalização dos mesmos de forma a evitar redundâncias e problemas semânticos no banco de dados. A partir dessa normalização, foram criados os dicionários de dados para cada um desses sistemas, separadamente. Em seguida, foram determinadas quais seriam as restrições de integridade e as prováveis consultas que poderiam ser feitas a esses sistemas com uma maior freqüência, definido-se, assim, um conjunto de consultas para o banco de dados. Finalizando essa etapa, foi feita a modelagem dos sistemas, separadamente, utilizando-se o software DBDesign. Foi utilizado o método semântico para a modelagem de banco de dados denominado MER – Modelo Entidade-Relacionamento. Nessa fase, foram detectados os problemas ainda existentes relativos à semântica, melhorando-se assim, o dicionário de dados anteriormente descritos. 3 2.2. CRIAÇÃO DO DIAGRAMA LÓGICO COM O DBDESIGN (Exemplo) Inicialmente, foram integrados os sistemas de produção e manutenção propostos, tomando-se o cuidado para eliminar as redundâncias e otimizando-se as entidades e seus atributos. Algumas entidades foram fundidas, outras, eliminadas, a partir de discussões a respeito dos modelos e suas funcionalidades. Posteriormente, foi integrado a esse módulo o sistema de compras e gerência de pessoal, que apresentava algumas características bem diferentes das encontradas nos outros dois sistemas. A partir de discussões e sugestões propostas, definiu-se então, um modelo otimizado para essa integração, considerando-se as funções desejadas para cada sistema e seus respectivos resultados. Com essa integração concluída, foi definido um novo dicionário de dados, no qual foi considerado o sistema como um todo. Foram revistas as restrições de integridade e as consultas mais freqüentes, tornando-as compatíveis para o sistema integrado. Esse dicionário de dados, as restrições de integridade, as consultas, alguns exemplos de consultas e o modelo final obtido são encontrados em anexo no fim desse relatório. 4 2.3. IMPLEMENTAÇÃO DO PROJETO Exemplo Com o modelo do banco de dados integrado e concluído, foi feita a migração deste para o gerenciador de banco de dados xxxx, onde se observou a criação de todas as entidades, atributos, chaves estrangeiras, chaves primárias e relacionamentos. Essa migração ocorreu mediante a geração de um esquema feito pelo DBDesign. Com a intervenção do usuário, através de comandos SQL, foram feitas operações de banco de dados, tais como: Inserção; Alteração; Consultas e Deleção dos dados. 5 3. CONCLUSÕES De acordo com os objetivos propostos para esse projeto, todos os passos foram concluídos com êxito para a modelagem de um banco de dados. Entretanto, alguns problemas comuns a sistemas de banco de dados foram detectados no decorrer das etapas do projeto. Na fase de integração detectamos diversas entidades sinônimas (com nomes diferentes e mesma função) e homônimas (com nomes iguais e funções diferentes). Durante a modelagem, precisamos definir novas entidades que representassem relações visando atender os critérios de normalização. Quanto à utilização da ferramenta, não encontramos manuais explicativos referentes a seu uso, o que dificultou bastante no momento em que precisamos utilizála. Favoravelmente, a partir de discussões e esforços múltiplos conseguimos obter sucesso em sua utilização, bem como a geração de esquemas e integração com diversos bancos de dados, tais como SQLServer 7.0, Oracle 7.0, Access e vários outros. OS ANEXOS ABAIXO SÃO APENAS EXEMPLIFICATIVOS, DEVENDO CADA PROJETO IMPLEMENTAR OS DE ACORDO COM A NECESSIDADE DO PROJETO, CONFORME DESCRITO NAS ORIENTAÇÕES DO TRABALHO 6 Anexo A – Dicionário de Dados Entidade: ESTOQUE Atributo: Tipo_Esto Descrição: Tipo do material presente no estoque. Domínio: Ferramenta, Peça, Insumo, Matéria Prima. Atributo: Qtde_Esto Descrição: Quantidade do material presente no estoque. Domínio: 0 a infinito Atributo: Qtde_Min_Esto Descrição: Quantidade mínima do material presente no estoque. Domínio: 1 a infinito Atributo: Id_Esto Descrição: Número de identificação do estoque. Domínio: Ferramenta, Peça, Insumo, Matéria Prima. Entidade: EXTERNO Atributo: CGC_ClientExt Descrição: Número do CGC do cliente externo. Domínio: 000.000.000-00 a 999.999.99999. Atributo: Nome_ClientExt Descrição: Nome do Cliente Externo. Atributo: Endereco_ClientExt Descrição: Endereço do cliente externo. Atributo: Fone_ClientExt Descrição: Telefone do cliente externo. Entidade: FERRAMENTA Atributo: Id_ferr Descrição: Código da Ferramenta. Domínio: 000.000 a 999.999. Atributo: Nome_Ferr Descrição: Nome da Ferramenta. Atributo: Disponibilidade_Ferr Descrição: Se há disponível ou não Atributo: Aquisicao_Ferr Descrição:Data de aquisição da ferramenta Atributo: VidaUtil_Ferr Descrição: até 10 anos Anexo B – Restrições de Integridade Sistema de Manutenção - Uma peça, insumo ou ferramenta não pode existir sem a existência de um fornecedor e de um estoque específico. - Uma máquina não pode ter mais de quinze anos. - Um plano de manutenção não pode existir sem a existência de um responsável pelo mesmo e de uma máquina na qual o plano será realizado. - Uma máquina não pode existir sem um fabricante relacionado a mesma. - Um fornecedor deve necessariamente ter um CGC. - Um técnico não pode existir sem uma matrícula e sua função definida. Sistema de Produção - O mesmo operador não pode estar em duas máquinas diferentes no mesmo tempo - Não existe pedido sem produto - Uma máquina não deve ficar mais de dois anos sem revisão - Não pode haver apenas um fornecedor de um determinado material - Não pode existir matéria prima sem fornecedor - A quantidade mínima para venda, de um mesmo produto, não pode ser inferior a 100 - Não pode haver máquina sem operador - Um funcionário só muda de função após treinamento ii Anexo C – Consultas mais Freqüentes Sistema de Manutenção - Qual a quantidade em estoque? - Quais os tipos de peças no estoque? - Qual o tempo médio de vida da peça? - Qual máquina a utiliza? - Qual a quantidade em estoque? - Quais os tipos de insumos no estoque? - Qual a quantidade em estoque? - Quais os tipos de ferramentas no estoque? - Qual a disponibilidade da ferramenta? - Qual a sua data de compra? - Quando foi realizada a sua última manutenção? - Quem é o operador da máquina em cada turno? - Qual é o seu plano de manutenção? - Qual é o status da máquina? - Existe outra máquina equivalente? - Qual é o seu horário de trabalho? - Qual é o seu tipo de treinamento? - Qual a sua função? - É responsável por quais planos de manutenção? - Qual é o plano? - É o plano de qual máquina? - Previsão da realização? - Qual o tempo de realização estimado? - Qual a peridiocidade do plano? - Qual o tipo de plano? - Qual o material necessário (peças, ferramentas e/ou insumos)? - Qual o material fornecido (peças, ferramentas e/ou insumos)? - Qual a disponibilidade do material? - Como entrar em contato? - Qual o preço do material? iii Anexo D – Modelo Implementado no (Erwin/DBDesign ou qualquer outra ferramenta que queiram) iv Anexo E – Script SQL CREATE TABLE al_tur ( at_id integer NOT NULL, tur_id integer NOT NULL, al_id bigint NOT NULL ); ALTER TABLE public.al_tur OWNER TO postgres; --- Name: aluno; Type: TABLE; Schema: public; Owner: postgres; Tablespace: -CREATE TABLE aluno ( al_id integer NOT NULL, al_nome character varying(200), al_matr character varying(15), al_sexo character(1), al_nacionalidade character varying(50), al_naturalidade character varying(50), al_dt_nascimento date, al_pai character varying(150), al_mae character varying(150), al_pne_descricao character varying(150), al_sangue character(3), ec_id smallint, esc_id smallint, end_id smallint, ativo_id smallint, al_cpf character(11), al_rg character varying(20), al_funcional character varying(30), al_classe character(25), al_fone character(10), al_celular character(10), del_id integer, car_id smallint, al_pne character(4), al_email character varying(100), al_naturalidade_uf character(2), sa_id integer, al_lot_por_direito integer ); ALTER TABLE public.aluno OWNER TO postgres; --- Name: turma; Type: TABLE; Schema: public; Owner: postgres; Tablespace: -CREATE TABLE turma ( tur_id integer NOT NULL, tur_nome character varying(200), tur_qtd_alunos integer, cur_id smallint, ativo_id smallint, tur_dt_ini date, v ); turno_id smallint, tur_dt_fim date, tur_local character varying(100) ALTER TABLE public.turma OWNER TO postgres; --- Name: alunos_turma; Type: VIEW; Schema: public; Owner: postgres -CREATE VIEW alunos_turma AS SELECT a.al_id, a.al_nome, t.tur_id, a.ativo_id FROM ((turma t JOIN al_tur ta ON ((ta.tur_id = t.tur_id))) JOIN aluno a ON ((ta.al_id = a.al_id))); ALTER TABLE public.alunos_turma OWNER TO postgres; --- Name: area_conhecimento; Type: TABLE; Schema: public; Owner: postgres; Tablespace: -CREATE TABLE area_conhecimento ( ac_id integer NOT NULL, ac_descricao character varying(200) ); ALTER TABLE public.area_conhecimento OWNER TO postgres; --- Name: ativo; Type: TABLE; Schema: public; Owner: postgres; Tablespace: -CREATE TABLE ativo ( ativo_id integer NOT NULL, ativo_status character(4) NOT NULL ); vi