A taberna do Pônei Saltitante
Neste projeto serão apresentadas técnicas e dicas de modelagem de banco de dados.
Neste projeto iremos utilizar como exemplo de negócio um empreendimento famoso conhecido na literatura que é a Taberna do Pônei Saltitante localizada na cidade de Bree presente nas obras de J.R.R. Tolkien.
Neste projeto serão apresentadas técnicas de modelagem de banco de dados e dicas importantes para construir uma base de dados organizada evitando redundâncias.
Identificar e descrever objetos conceituais a partir da regra de negócio;
Construir relacionamentos entre os objetos;
Aplicar regras de normalização;
Diagramar modelos de dados lógico e relacional;
Implementar comandos para construção do banco de dados relacional utilizando PostgreSQL.
Informação: Manipular e construir objetos conceituais facilita a documentação e apresentação de projetos de banco de dados.
Neste projeto vamos implementar os seguintes elementos :
Modelo Lógico das regras negociais da Caverna do Pônei Saltitante;
Modelo Relacional;
Comandos para construção.
A cidade de Bree conseguiu se manter prospera próspera no Norte, apesar das guerras e tumultos que destruíram o Reino dos Dúnedain do Norte. Dizem que quando os homens foram para o Ocidente, Bree já estava lá e quando os antigos reis retornaram, encontraram Bree os esperando. Dizem que foi fundada pors homens que não voltaram para Beleriand na Primeira Era, e após a queda do Reino de Cardolan na guerra conta Angmar se tornou uma cidade independente.
É a única região na Terra-média, onde Homens e Hobbits convivem em harmonia e e um importante centro comercial para elfos e anões, que são bens de comércio ou viagens de um reino para outro. O centro econômico e social é a Taverna do Pônei Saltitante, conhecida por ter as melhores bebidas do Norte.
A Taberna do Ponei Saltitante está ampliando o seu atendimento, buscando atender melhor sua variada clientela, Orc´s, Elfos, Hobbits e Humanos, este último com uma preferência estranha por dispositivos. Também se aliou ao Ferreiro da cidade a fim de diversificar os produtos, acrescentando espadas, escudos, elmos e outros.
Para tal, procura implementar um sistema informatizado para registrar as seguintes informações:
Pedidos dos clientes;
Registro de compras;
Registro de funcionários;
Cargos dos funcionários;
Registro de clientes e suas classificações;
Tabela de preços;
Sob a estrutura do banco de dados está o modelo de dados: um conjunto de ferramentas conceituais usadas para a descrição de dados, relacionamentos entre dados, semântica de dados e regras de consistência.
A seguir para descrever os passos do processo para modelar os dados.
Tem por base a percepção de que o mundo real é formado por um conjunto de objetos chamados entidades e pelo conjunto dos relacionamentos entre esse objetos.
Tem o objetivo de facilmente ser interpretado por todos os usuários, utilizando diagramas e representações gráficas dos objetos do negócio.
Exemplo:
Estende detalhes do modelo de lógico e tem as seguintes características:
Exemplo:
Análise | Design |
---|---|
Modelo Lógico | Modelo Físico |
Entidade | Tabela |
Atributo | Coluna |
Instância | Linha |
UID Primário | Chave Primária |
UID Secundário | Restrição Exclusiva |
Relacionamento | Chave Estrangeira |
Restrição de Negócio | Restrições de Verificação |
Regras:
Exemplo:
CLIENTE ID | CPF | NOME | TIPO | ENDERECO | SEXO_ID | CIDADE_ID | |
---|---|---|---|---|---|---|---|
1 | 001.546.578-04 | Aragorn Passos Largos | P | Gondor | aragorn21@gmail.com, passos.largos@hotmail.com | M | 35 |
2 | 698.474.456-78 | Arwen de Valfenda | P | Valfenda | arwenvalfenda@gmail.com | F | 13 |
Neste capítulo iremos iniciar a analise das necessidades de negócio utilizando o conceito de Regra de Negócio para orientar a análise.
O nosso objetivo é extrair informações da regra de negócio a fim de identificar objetos e regras conceituais. Para tal tarefa seguiremos as seguintes premissas:
A seguir vamos apresentar os objetos extraídos da regra.
NÚMERO | DATA | PRODUTO | CLIENTE |
---|---|---|---|
123 | 11/12/2017 | Escudo de Carvalho | Thorin |
124 | 05/02/2018 | Arco Élfico dourado | Legolas |
125 | 21/04/2018 | Punhal de Troll | Aragorm |
MATRICULA | NOME | SALÁRIO |
---|---|---|
480001 | Bilbo Baggins | 1.000 |
480453 | Samwise Gamgee | 1.000 |
480689 | Peregrin Took | 1.100 |
CARGO ID | NOME |
---|---|
01 | Atendente |
03 | Gerente de Vendas |
02 | Contabilidade |
ID | NOME |
---|---|
01 | Humano |
02 | Elfo |
03 | Hobbit |
04 | Uruk Hai |
lurtzuruk@terramedia.com |
passoscurtos@gmail.com |
mariadoc.brandeduque@terramedia.com |
elendil@hotmail.com |
Nota importante.
Entender os seguintes conceitos ajudam a fazer a análise:
Dado.
Informação.
Conhecimento.
Um Anel para governar todos eles,
Um Anel para encontrá-los,
Um Anel para trazê-los todos e na escuridão prendê-los.
Regras | Restrições |
---|---|
Para cada nota são registrados os produtos vendidos. | Um produto pode estar em mais de uma nota; Uma nota pode ter mais de um produto; O valor do produto pode ter descontos e acrescimentos. |
Os Clientes tem uma determinada raça; O sexo dos clientes são registrados como M = Masculino e F = Feminino; | Um cliente tem uma raça e uma raça pode estar presente em vários clientes;Somente as letras M ou F podem ser registrados para cada cliente; |
Neste capítulo vamos utilizar o SQLDeveloper para implementar o modelo de banco de dados.
O que é o SQLDeveloper?
Descompacte o programa no diretório /opt para padronizar as instalação
sudo unzip ~/Downloads/sqldeveloper-*-no-jre.zip -d /opt/
sudo chmod +x /opt/sqldeveloper/sqldeveloper.sh
sudo ln -s /opt/sqldeveloper/sqldeveloper.sh /usr/local/bin/sqldeveloper
Alterando o arquivo sqldeveloper.sh
#!/bin/bash
unset -v GNOME_DESKTOP_SESSION_ID<
cd /opt/sqldeveloper/sqldeveloper/bin && bash sqldeveloper $*
Testando.
sqldeveloper.sh
Adicionando ao Desktop
Arquivo : /usr/share/applications/sqldeveloper.desktop
[Desktop Entry]
Exec=sqldeveloper
Terminal=false
StartupNotify=true
Categories=GNOME;Oracle;Utility;Development;
Type=Application
Icon=/opt/sqldeveloper/icon.png
Name=Oracle SQL Developer
Comment=SQLDeveloper Oracle
Version=?
GenericName=ORACLE SQL DEVELOPER
c:\desenvolvimento\SQLDeveloper
SQLDeveloper.exe
;Menu
> Exibir
> Data Modeler
> Browser
;Define-se entidade como aquele objeto que existe no mundo real com uma identificação distinta e com um significado próprio.
São coisas que existem no negócio, ou ainda, descrevem o negócio.
Uma entidade tem um conjunto de propriedades e os valores para alguns conjuntos dessas propriedades devem ser únicos.
Exemplo :
CLIENTE ID | CPF | Nome | Tipo | Endereco |
---|---|---|---|---|
1 | 001.546.578-04 | Aragorn N Gondor | ||
2 | 787.354.789-55 | Legolas N Valfenda | ||
3 | 000.000.000-00 | Gandalf E Terra Média |
Toda entidade é representada por um conjunto de atributos.
Exemplo modelo relacional:
Atributos são propriedades descritivas de entidades. Cada instância de CLIENTE será formada por valores nestes atributos, e o conjunto destes valores devemos visualizar como uma linha de uma tabela.
ID | CPF | NOME | TIPO | ENDERECO | SEXO_ID | CIDADE_ID | |
---|---|---|---|---|---|---|---|
1 | 001.546.578-04 | Aragorn Passos Largos | P | Gondor | aragorn21@gmail.com ,passos.largos@hotmail.com | M | 35 |
2 | 698.474.456-78 | Arwen de Valfenda | P | Valfenda | arwenvalfenda@gmail.com | F | 13 |
3 | 000.000.000-00 | Gandalf o Cinzento | E | Terra Média | mago@gmail.com | M | 500 |
Expressam um valor indivisível. Exemplo : SEXO_ID
Expressam mais de um valor, pode ser dividido. Exemplo: NOME e ENDERECO
Exemplo : CIDADE_ID para a entidade cliente
Pode contar vários valores. Exemplo : EMAIL
Podem ser nulos. Exemplo : EMAIL
Este(s) atributo(s) cujos valores nunca se repetem, sempre tem(têm) a função de atuar(em) como identificador(es) único(s) das instâncias da entidade. Chave primária então é o atributo (ou conjunto de atributos concatenados) que identifica uma única ocorrência dentro de uma tabela.
A coluna ID é a chave primária da tabela e apresenta as seguintes características:
ID | CPF | NOME | TIPO | ENDERECO | SEXO_ID | CIDADE_ID | |
---|---|---|---|---|---|---|---|
1 | 001.546.578-04 | Aragorn Passos Largos | P | Gondor | aragorn21@gmail.com ,passos.largos@hotmail.com | M | 35 |
2 | 698.474.456-78 | Arwen de Valfenda | P | Valfenda | arwenvalfenda@gmail.com | F | 13 |
3 | 000.000.000-00 | Gandalf o Cinzento | E | Terra Média | mago@gmail.com | M | 500 |
Considere a entidade CLIENTE, ela pode ser definida em um conjunto de entidades classificados como :
ID | CPF | NOME | TIPO | ENDERECO | SEXO_ID | CIDADE_ID | |
---|---|---|---|---|---|---|---|
1 | 001.546.578-04 | Aragorn Passos Largos | P | Gondor | aragorn21@gmail.com ,passos.largos@hotmail.com | M | 35 |
2 | 698.474.456-78 | Arwen de Valfenda | P | Valfenda | arwenvalfenda@gmail.com | F | 13 |
3 | 000.000.000-00 | Gandalf o Cinzento | E | Terra Média | mago@gmail.com | M | 500 |
O processo de projetar os subgrupos dentro de um conjunto de entidades é chamado de especialização, o qual nos permite distinguir os tipos de clientes.
ID | CPF | NOME | TIPO | ENDERECO | SEXO_ID | CIDADE_ID | |
---|---|---|---|---|---|---|---|
1 | 001.546.578-04 | Aragorn Passos Largos | P | Gondor | aragorn21@gmail.com ,passos.largos@hotmail.com | M | 35 |
2 | 698.474.456-78 | Arwen de Valfenda | P | Valfenda | arwenvalfenda@gmail.com | F | 13 |
Auxilia na segurança dos dados, pois restringe a sua visualização e acesso.
Podemos restringir o acesso as colunas e linhas de uma tabela,como por exemplo :
NOME | TIPO | ENDERECO | |
---|---|---|---|
Gandalf o Cinzento | E | Terra Média | mago@gmail.com |
Praticamente a generalização é o inverso da especialização.
Por exemplo: a entidade PRODUTO é na realidade uma generalização para diversas entidades de dados de PRODUTOS (registrados em várias filias).
PRODUTOS - Todos os produtos ID
e NOME
.
ID | NOME |
---|---|
11 | Espada de Eldor |
12 | Espada Élfica |
21 | Escudo de carvalho |
22 | Escudo de Mitrill |
PRODUTO - Espadas ID
e NOME
ID | NOME |
---|---|
11 | Espada de Eldor |
12 | Espada Élfica |
PRODUTOS - Escudos ID
e NOME
ID | NOME |
---|---|
21 | Escudo de carvalho |
22 | Escudo de Mitrill |
Em Sistemas Distribuídos podemos resumir a visualização de diferentes entidades em somente uma.
Exemplo: Espadas podem estar armazenadas em uma cidade e escudos em outra.
Um relacionamento é uma associação entre uma ou várias entidades. Por exemplo: podemos definir um relacionamento que associa o cliente ARAGORN com a cidade DOR-LÓNIM. Esse relacionamento especifica que cliente ARAGORN é um cliente que mora em DOR-LÓNIM.
Outro exemplo:
No relacionamento entre duas entidades o número de ocorrências de uma entidade que está associado a outra entidade determina a cardinalidade.
Representação
Significa que cada elemento da entidade PEDIDO relaciona-se com somente um elemento de entidade NOTA.
Modelo lógico.
Um PEDIDO tem uma NOTA -> NOTA tem um PEDIDO
Modelo relacional.
Tabelas.
PEDIDO ID | DATA |
---|---|
1 | 12/11/2016 |
3 | 02/04/2017 |
6 | 10/10/2017 |
NOTA ID | DATA | VALOR_TOTAL | SERIE | CHAVE | PEDIDO_ID |
---|---|---|---|---|---|
1 | 12/11/2016 | 2.500,00 | 00012345 | QERE001 | 1 |
3 | 02/04/2017 | 2.500,00 | 00012378 | QERE010 | 3 |
6 | 10/10/2017 | 2.500,00 | 00019874 | QERE022 | 6 |
Um elemento da entidade CIDADE relaciona-se com muitos elementos da entidade CLIENTE, mas cada elemento da entidade CLIENTE somente pode estar relacionado a um elemento da entidade CIDADE. Modelo lógico
Uma CIDADE tem vários CLIENTES-> CLIENTE pertence a uma CIDADE
Modelo Relacional
Tabelas
CIDADE ID | DESCRICAO | UF |
---|---|---|
1 | Valfenda | CO |
2 | Castelo Sul | SR |
3 | Vento Bravo | AR |
CLIENTE ID | CPF | NOME | TIPO | ENDERECO | CIDADE_ID | |
---|---|---|---|---|---|---|
1 | 001.546.578-04 | Aragorn | N | Gondor | … | 1 |
2 | 787.354.789-55 | Legolas | N | Valfenda | … | 1 |
3 | 000.000.000-00 | Gandalf | E | Terra Média | … | 2 |
Chave primária;
Chave estrangeira, referência a chave primária de outra tabela;
Um elemento da entidade PRODUTO relaciona-se com muitos elementos da entidade NOTA e cada elemento da entidade NOTA está relacionado a um elemento da entidade PRODUTO. Modelo lógico.
Um PRODUTO pode estar em várias NOTAS-> NOTA tem vários PRODUTOS
Modelo relacional. Tabelas.
PRODUTO ID | DESCRICAO | VALOR |
---|---|---|
1 | Espada Bronze | 150,00 |
3 | Escudo Prata | 420,00 |
6 | Arco de Madeira | 100,00 |
PRODUTO_NOTA | PRODUTO_ID | NOTA_ID | QUANTIDADE | VALOR_VENDA |
---|---|---|---|---|
1 | 1 | 1 | 1,0 | 150,00 |
2 | 3 | 1 | 1,0 | 420,00 |
3 | 6 | 3 | 2,0 | 100,00 |
NOTA ID | DATA | VALOR_TOTAL | SERIE | CHAVE | PEDIDO_ID |
---|---|---|---|---|---|
1 | 12/11/2016 | 2.500,00 | 00012345 | QERE001 | 1 |
3 | 02/04/2017 | 2.500,00 | 00012378 | QERE010 | 3 |
6 | 10/10/2017 | 2.500,00 | 00019874 | QERE022 | 6 |
Para a organização dos dados é construída uma tabela (tabela de relacionamento) entre as duas entidades;
A nova tabela herda as chaves primárias das duas tabelas que ela relaciona;
Importante verificar que a tabela tem outros atributos que expressam valores únicos do negócio , QUANTIDADE e VALOR_PRODUTO pois para cada venda eles variam;
É um tipo especial de relacionamento onde as entidades se relacionam com elas mesmas. Tipos de auto-relacionamentos.
Considere a entidade CARGOS, observe que alguns cargos são filhos de outros cargos (ordem hierárquica).
Modelo lógico.
Modelo relacional.
Tabela.
CARGO ID | DESCRICAO | VALOR | CARGO_ID |
---|---|---|---|
1 | Gerente Comercial | 1.000,00 | |
2 | Atendente | 500,00 | 1 |
3 | Embalador | 500,00 | 1 |
4 | Gerente de Negócio | 4.000,00 | |
5 | Contador | 2.000,00 | 4 |
Observe que os itens registrados na entidade PRODUTO podem ser compostos de vários outros itens, componentes. Por outro lado, um item componente pode participar da composição de muitos itens
Tabelas.
PRODUTO ID | DESCRICAO | VALOR | CATEGORIA_ID |
---|---|---|---|
1 | Espada de aço da montanha da perdição | 200,00 | 2 |
2 | Poder de gelo | 300,00 | 4 |
3 | Escudo de Carvalho | 180,00 | 6 |
4 | Pedra azul | 20,00 | 5 |
5 | Garrafa de Bafo de Yeti | 10,00 | 5 |
COMPONENTE | PRODUTO_ID | PRODUTO_ID1 |
---|---|---|
1 | 2 | |
32 | 24 | 25 |
É um processo matemático formal, que tem seus fundamentos na teoria dos conjuntos. Através deste processo pode-se, gradativamente, substituir um conjunto de entidades e relacionamentos por um outro, o qual se apresenta “purificado” em relação às anomalias de atualização (inclusão, alteração e exclusão) as quais podem causar certos problemas, tais como: grupos repetitivos (atributos multivalorados) de dados, dependências parciais em relação a uma chave concatenada, redundância de dados desnecessárias, perdas acidentais de informação, dificuldade na representação de fatos da realidade observada e dependências transitivas entre atributos. Anomalias.
Considere o formulário de NOTAS apresentado a seguir. Podemos considerar que uma entidade formada com os dados presentes neste documento, terá a seguinte apresentação:
NOTAS ID | DATA | CLIENTE | ENDERECO | CIDADE | UF | PRODUTO_ID | DESCRICAO | UNID. | QUANTIDADE | VALOR | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 12/11/2016 | Elendur | elendur@hotmail.com, elendur12r@gmail.com | Rua das Flores | LAGO | VL | 1 | Espada de fogo | P | 1 | 200,00 |
1 | 02/04/2017 | Elendur | elendur@hotmail.com, elendur12r@gmail.com | Rua das Flores | LAGO | VL | 2 | Escudo de Carvalho | P | 1 | 180,00 |
3 | 10/10/2017 | Durin II | durinii@yahoo.com.br | Caverna de Orgrimar | Floresta Negra | GO | 8 | Cajado de Gelo | P | 1 | 1.200,00 |
3 | 30/11/2017 | Eldacar | el65@gmail.com, jhon65@gmail.com | Caverna de Orgrimar | Floresta Negra | GO | 12 | Cajado de Fogo do Vulcão | P | 1 | 1.300,00 |
Caso a entidade fosse implementada como uma tabela em um banco de dados, as seguintes anomalias iriam aparecer:
Primeira Forma Normal (1FN);
Dependência Funcional;
Total e parcial;
Transitiva;
Segunda Forma Normal (2FN);
Terceira Forma Normal (3FN);
Forma Normal de BOYCE/CODD (FNBC);
Quarta forma normal (4FN).
Uma tabela está na 1FN se e somente se:
Todos seus atributos forem atômicos, atributos compostos não são permitidos EMAIL;
Cada ocorrência da chave primária (ID) deve corresponder a uma e somente uma informação de cada atributo, ou seja, a entidade não deve conter grupos repetitivos;
NOTAS ID | DATA | CLIENTE | ENDERECO | CIDADE | UF | PRODUTO_ID | DESCRICAO | UNID. | QUANTIDADE | VALOR | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 12/11/2016 | Elendur | elendur@hotmail.com, elendur12r@gmail.com | Rua das Flores | LAGO | VL | 1 | Espada de fogo | P | 1 | 200,00 |
1 | 02/04/2017 | Elendur | elendur@hotmail.com, elendur12r@gmail.com | Rua das Flores | LAGO | VL | 2 | Escudo de Carvalho | P | 1 | 180,00 |
3 | 10/10/2017 | Durin II | durinii@yahoo.com.br | Caverna de Orgrimar | Floresta Negra | GO | 8 | Cajado de Gelo | P | 1 | 1.200,00 |
3 | 30/11/2017 | Eldacar | el65@gmail.com, jhon65@gmail.com | Caverna de Orgrimar | Floresta Negra | GO | 12 | Cajado de Fogo do Vulcão | P | 1 | 1.300,00 |
Dizemos que um atributo ou conjunto de atributos A é dependente funcional de um outro atributo B contido na mesma entidade se, a cada valor B existir nas linhas da entidade em que aparece, um único valor de A . Em outras palavras, A depende funcionalmente de B, Exemplo : Na entidade NOTA, o atributo DATA depende funcionalmente de ID.
O exame das relações existentes entre os atributos de uma entidade deve ser feito a partir do conhecimento (conceitual) que se tem sobre a realidade a ser modelada.
Dependência funcional parcial ou total.
Na ocorrência de uma chave primária concatenada, dizemos que um atributo ou conjunto de atributos depende de forma completa ou total desta chave primária concatenada, se e somente se, a cada valor da chave (e não parte dela) está associado a um valor para cada atributo. Quando um atributo só depende de parte da chave primária concatenada e não dela como um todo é dito “dependente parcial”. A dependência total ou parcial só acontece quando a chave primária é concatenada.
Exemplo:
Dependência total: Na Entidade PRODUTO, o atributo QUANTIDADE depende de forma total da chave primária concatenada PRODUTO_ID + NOTA_ID
Dependência funcional transitiva
Quando um atributo ou conjunto de atributos A depende de outro atributo B que não pertence à chave primária (mas é dependente funcional desta) dizemos que A é Dependente Transitivo de B. Exemplos: Na entidade NOTA, os atributos ENDERECO, CIDADE e UF são dependentes transitivos do atributo
CLIENTE.
NOTAS ID | DATA | CLIENTE | ENDERECO | CIDADE | UF | PRODUTO_ID | DESCRICAO | UNID. | QUANTIDADE | VALOR | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 12/11/2016 | Elendur | elendur@hotmail.com, elendur12r@gmail.com | Rua das Flores | LAGO | VL | 1 | Espada de fogo | P | 1 | 200,00 |
1 | 02/04/2017 | Elendur | elendur@hotmail.com, elendur12r@gmail.com | Rua das Flores | LAGO | VL | 2 | Escudo de Carvalho | P | 1 | 180,00 |
3 | 10/10/2017 | Durin II | durinii@yahoo.com.br | Caverna de Orgrimar | Floresta Negra | GO | 8 | Cajado de Gelo | P | 1 | 1.200,00 |
3 | 30/11/2017 | Eldacar | el65@gmail.com, jhon65@gmail.com | Caverna de Orgrimar | Floresta Negra | GO | 12 | Cajado de Fogo do Vulcão | P | 1 | 1.300,00 |
A segunda forma normal assegura que não exista dependência funcional parcial no modelo de dados. Para aplicarmos a segunda forma normal em um modelo de dados devemos observar se alguma entidade do modelo possui chave primária concatenada e verificar se existe algum atributo ou conjunto de atributos com dependência parcial em relação a algum atributo da chave primária concatenada.
Exemplo:
A entidade PRODUTO_NOTA apresenta uma chave primária concatenada e por observação, notamos que os atributos QUANTIDADE e VALOR_VENDA dependem de forma parcial do atributo PRODUTO_ID, que faz parte da chave primária.
A terceira forma normal assegura que nenhuma entidade do modelo de dados possui atributos com dependência transitiva. Assim, uma entidade está na 3FN se nenhum de seus atributos possui dependência transitiva em relação a outro atributo da entidade que não participe da chave primária, ou seja, não existe nenhum atributo intermediário entre a chave primária e o próprio atributo observado.
Ao retirarmos a dependência funcional transitiva, devemos criar uma nova entidade que contenha os atributos que dependem transitivamente de outro e a sua chave primária é o atributo que causou esta dependência. Também não devem conter atributos derivados, como por exemplo VALOR TOTAL.
A forma normal Boyce/Codd foi desenvolvida com o objetivo de resolver algumas situações que não eram inicialmente cobertas pelas três formas normais, em especial quando haviam várias chaves na entidade, formadas por mais de um atributo (chaves compostas) e que ainda compartilham ao menos um atributo.
Isso nos leva a concluir que, o problema se devia ao fato de até agora as formas normais tratarem de atributos dependentes de chaves primárias. Assim, para estar na FNBC, uma entidade precisa possuir somente atributos que são chaves candidatas. Vamos analisar o caso em que temos uma entidade formada pelos seguintes atributos:
TURMA_CURSO | ALUNO_ID | TURMA | CURSO_ID | PROFESSOR_ID |
---|---|---|---|---|
0012015 | 0101 | SIS | 01 | 0072003 |
0022015 | 8901 | DIR | 01 | 4592005 |
0032015 | 9001 | PSI | 01 | 0072003 |
Um mesmo professor pode ministrar aulas entre cursos e turmas diferentes. Sendo assim podemos identificar três chaves candidatas que são determinantes nessa entidade: CURSO_ID+TURMA, CURSO_ID+PROFESSOR_ID e TURMA+PROFESSOR_ID. O atributo PROFESSOR_ID é parcialmente dependente do CURSO_ID e de TURMA, mas é totalmente dependente da chave candidata composta CURSO_ID+TURMA. Dessa forma a entidade deve ser desmembrada, resultando em duas: uma que contém os atributos que descrevem o aluno em si e outra cujos atributos designam um professor.
TURMA_ALUNO | TURMA | CURSO_ID | ALUNO_ID |
---|---|---|---|
0101 | SIS | 01 | 0012015 |
8901 | DIR | 01 | 0022015 |
9001 | PSI | 01 | 0032015 |
TURMA_PROFESSOR | TURMA | CURSO_ID | PROFESSOR_ID |
---|---|---|---|
0101 | SIS | 01 | 0072003 |
8901 | DIR | 01 | 4592005 |
9001 | PSI | 01 | 0072003 |
Uma tabela está na 4FN, se e somente se, estiver na 3FN e não existirem dependências multivaloradas.
Neste projeto serão apresentadas técnicas e dicas de modelagem de banco de dados.