Escolar Documentos
Profissional Documentos
Cultura Documentos
Respostas:
Esta tabela não está bem estruturada, não está normalizada e contém dados redundantes. Utilizando uma
abordagem de baixo para cima, analisamos a tabela dada para detetar anomalias. A primeira observação
é que vemos vários valores numa coluna de consultas, o que, obviamente, viola o 1NF. Ao assumir o
staffNo e o patientNo como chaves candidatas, existem muitas anomalias.
Anomalias de inserção:
Para inserir um novo doente particular que marca uma consulta com o médico designado, é
necessário introduzir os dados correctos da equipa. Por exemplo, para inserir os detalhes de um
novo doente em patientNo, patientName e uma consulta, temos de introduzir os detalhes correctos
do médico (staffNo, dentistName) para que os detalhes do doente sejam consistentes com os valores
do médico designado, por exemplo, S1011.
Para introduzir dados de um novo doente que não tenha um médico para ser atribuído, não podemos
inserir valores NULL para a chave primária.
Anomalias de eliminação:
Se quisermos eliminar um doente chamado Ian MacKay, por exemplo, é necessário eliminar dois
registos, como nas linhas 3 e 4. Esta anomalia também é óbvia quando queremos apagar o
dentistName, sendo necessário apagar vários registos para manter a integridade dos dados.
Quando eliminamos um registo de um Dentista, por exemplo Tony Smith, os detalhes sobre os
seus pacientes também se perdem da base de dados.
Anomalias de modificação:
Com dados redundantes, quando queremos alterar o valor de uma coluna de um determinado
dentista, por exemplo, o dentistName, temos de atualizar todos os registos de dentistas atribuídos ao
doente em causa, caso contrário a base de dados tornar-se-á inconsistente. Também é necessário
alterar os horários das consultas, porque cada dentista tem horários diferentes.
(b) Descreva e ilustre o processo de normalização da tabela apresentada na Figura 1 para 3NF.
Indique quaisquer suposições que tenha feito sobre os dados apresentados nesta tabela.
Os pressupostos assumidos incluem que um doente está registado num único consultório e que pode
ter mais do que uma consulta num determinado dia. Todos os horários foram fixados para todos os
dias e semanas.
No 1NF, removemos todos os grupos repetidos (nomeação), atribuímos uma nova coluna (apptDate
e apptTime) e atribuímos chaves primárias (chaves candidatas). Em seguida, descobrimos as
dependências funcionais (FDs). Utilizando o diagrama de dependências, representamos a tabela da
seguinte forma. (NF - significa Forma Normal)
Nota: A forma de encontrar os FDs é subjectiva!!! No entanto, a regra é que deve refletir a situação
real.
FD1
pessoal doenteNo patientName cirurgiaNã
apptDate hora de dentistaNome
Não o
início
FD2 FD3
FD4
FD5
FD1 já está em 2NF. Neste caso, podemos ver que FD2 (depende apenas de staffNo) e FD4
(depende apenas de staffNo e apptDate) violam o 2NF. Estas duas NFs são parcialmente
dependentes das chaves candidatas e não das chaves completas. A FD2 pode manter-se por si só,
dependendo do staffNo e, entretanto, a FD4 também pode manter-se por si só, dependendo do
staffNo.
O FD3 viola o 3NF mostrando a dependência transitiva em que surgeryNo e patientName
dependem de patientNo enquanto patientNo depende de staffNo, ou seja, a não-chave depende de
outra não-chave.
O 2NF já está no 1NF e não há dependência parcial. Por isso, precisamos de remover a FD2 e a
FD4 dividindo-as em novas tabelas e, ao mesmo tempo, criando chaves estrangeiras. As novas
tabelas que estão em 2NF são mostradas abaixo.
pessoal dentistaNome
Não
FK
pessoal apptDate hora de pacienteN
Não início o
FK
pessoal dentistaNome
Não
doenteNo nome do
paciente
Dentista(staffNo, dentistName)
FK
pessoal apptDate cirurgiaNã
Não o
doenteNo nome do
paciente
Paciente(patientNo, patientName)
FK
pessoal apptDate hora de pacienteN
Não início o
Respostas:
É óbvio que o NIN e o contractNo podem ser chaves candidatas. Existem redundâncias de dados
em termos de grupos de repetição.
Anomalias de inserção:
Para inserir os dados do novo hotel, temos de saber o NIN do pessoal, porque se trata de uma chave
primária e não podemos atribuir um valor NULL à chave primária. Por exemplo, se quisermos
inserir os dados de um novo hotel, temos de inserir também o NIN e o contractNo.
Para recrutar um novo funcionário, é necessário conhecer os pormenores do hotel. Por exemplo, se
quisermos recrutar e atribuir novos funcionários ao H4, temos de introduzir os dados correctos do
H4 para que os dados do hotel sejam coerentes com os valores do hotel H4.
Anomalias de eliminação:
Se eliminarmos um registo da tabela que representa o nome do funcionário, por exemplo, John
Smith, os detalhes sobre o contrato também se perderão da base de dados e afectarão outros registos,
como se pode ver na segunda linha do contratoNo (C1024).
Pelo contrário, quando eliminamos um contratoNo, os dados de outros funcionários também se
perdem. Por exemplo, se apagarmos o C1025, os dados da Sarah White e do John Smith perder-se-
ão.
Anomalias de modificação:
Se alterarmos o valor do contractNo, é necessário alterar vários registos, por exemplo, as linhas 1 e
2, bem como as linhas 3 e 4, se editarmos qualquer um dos contractNo.
Se editarmos os detalhes do pessoal, por exemplo, actualizando John Smith, é necessário atualizar
vários registos. Isto também se aplica à coluna hotelNo.
(2) Descreva e ilustre o processo de normalização da tabela apresentada na Figura 2 para 3NF.
Indique quaisquer suposições que tenha feito sobre os dados apresentados nesta tabela.
No 1NF, removemos todos os grupos repetidos, se existirem, e atribuímos chaves primárias (chaves
candidatas). Em seguida, descobrimos as dependências funcionais (FDs). Utilizando o diagrama de
dependências, representamos a tabela da seguinte forma. (NF -stand para Forma Normal)
FD1 FD4
FD2
FD3
Obviamente, FD2 e FD3 violam a 2NF (dependência parcial) e FD4 viola a 3NF (dependência
transitiva). No 2NF, removemos a dependência parcial do FD2 e do FD3 dividindo-os em novas
tabelas, como se mostra a seguir.
NIN eNome
FK FK
NIN eNome
FK
contratoNão hotelNão
hotelNão hotelLocalizaç
ão
NIN eNome
Pessoal(NIN,
eName)
hotelNão hotelLocalizaç
ão
Hotel(hotelNo, hotelLocation)
FK
contratoNão hotelNão
Contrato(contractNo, hotelNo)
FK FK
NIN contratoNão horas