Un-à-plusieurs relations devraient être représentés comme deux tableaux distincts reliés par une clé étrangère. Si vous essayez de pousser la logique à plusieurs relations dans un seul tableau, alors vous êtes en violation de normalisation qui conduit à des problèmes.
Disons que vous avez une base de données de vos amis et de leurs chats. Étant donné qu'une personne peut avoir plus d'un chat, nous avons un un-à-plusieurs relations entre les personnes et les chats. Ceci appelle deux tables:
Friends
Id | Name | Address
-------------------------
1 | John | The Road 1
2 | Bob | The Belltower
Cats
Id | Name | OwnerId
---------------------
1 | Kitty | 1
2 | Edgar | 2
3 | Howard | 2
(Cats.OwnerId
est une clé étrangère vers Friends.Id
)
La conception ci-dessus est entièrement normalisée et est conforme à toutes connu la normalisation des niveaux.
Mais dire que j'ai essayé de représenter les informations ci-dessus dans une seule table comme ceci:
Friends and cats
Id | Name | Address | CatName
-----------------------------------
1 | John | The Road 1 | Kitty
2 | Bob | The Belltower | Edgar
3 | Bob | The Belltower | Howard
(C'est le genre de design que j'ai pu faire si j'avais l'habitude d'Excel-feuilles, mais pas de bases de données relationnelles.)
Une table unique approche qui m'oblige à répéter certaines informations si je veux que les données soient cohérentes. Le problème avec ce modèle est que certains faits, comme les informations que Bob l'adresse est "Le clocher" est répété deux fois, ce qui est redondant, et il est difficile d'interroger et de modifier les données et (le pire) possible d'introduire des incohérences logiques.
Par exemple. si Bob se déplace, je dois m'assurer de changer l'adresse dans les deux lignes. Si Bob obtient un autre chat, je dois être sûr de répéter le nom et l'adresse exactement comme tapé dans les deux autres lignes. E. g. si je fais une faute de frappe dans Bob l'adresse dans l'une des lignes, du coup la base de données comporte des informations incohérentes sur l'endroit où Bob vie. L'onu-base de données normalisée ne peut pas empêcher l'introduction de incohérentes et contradictoires de données, et donc de la base de données n'est pas fiable. Ce n'est clairement pas acceptable.
La normalisation ne peut pas vous empêcher de saisir des données erronées. Ce que la normalisation empêche, c'est la possibilité de incohérent de données.
Il est important de noter que la normalisation dépend des décisions d'affaires. Si vous avez une base de données de clients, et que vous décidez d'enregistrer uniquement une seule adresse par le client, la conception de la table (#CustomerID, CustomerName, CustomerAddress)
est fine. Si toutefois, vous décidez de permettre à chaque client de s'inscrire plus d'une adresse, puis la même conception de table n'est pas normalisée, car vous avez maintenant un un-à-plusieurs relation entre le client et l'adresse. Par conséquent, vous ne pouvez pas il suffit de regarder une base de données afin de déterminer si elle est normalisée, vous devez comprendre le modèle d'affaires derrière la base de données.