На каком этапе нормализации я должен включить новый столбец первичного ключа

У меня есть таблица со следующими данными. Мне нужно нормализовать их в соответствии с правилами нормализации, но я не понимаю, на каком этапе нормализации я должен ввести CustomerId в качестве нового столбца PrimaryKey.

 CustomerName Address ObjectRented objectCatetory
-------------------------------------------------- -----
Mr A Street 1 Obj1, Obj2 Cat1, Cat1
Mr B Street 2 Obj3, Obj4 Cat2, Cat2
MR B Street 3 Obj2 Cat1 

2 ответа

Решение

В этом конкретном примере вы можете ввести столбец первичного ключа еще до выполнения нормализации. Ваша таблица может просто выглядеть денормализованной так после добавления первичного ключа (упрощенная структура):

CustomerID CustomerName  Address  ObjectRented
---------- ------------- -------  ------------
1          Mr A          Street 1 Obj1,Obj2
2          Mr B          Street 2 Obj3,Obj4
2          Mr B          Street 3 Obj2

Я пишу это довольно быстро, поэтому, пожалуйста, прочитайте другие ответы и блоги о нормальных формах.

1NF - Удалить повторяющуюся группу

CustomerID CustomerName  Address  ObjectRented
---------- ------------- -------  ------------
1          Mr A          Street 1 Obj1
1          Mr A          Street 1 Obj2
2          Mr B          Street 2 Obj3
2          Mr B          Street 2 Obj4
2          Mr B          Street 3 Obj2

2NF - удалить частичную зависимость

CustomerID на самом деле является клиентом и живет в определенном месте. Держите их в одном столе. Клиент может арендовать все, что ему нравится... хранить все, что он арендовал, в другой таблице, например:

Клиенты

CustomerID CustomerName  Address
---------- ------------- -------
1          Mr A          Street 1
2          Mr B          Street 2
2          Mr B          Street 3

ObjectRental

CustomerID ObjectRented
---------- ------------
1          Obj1
1          Obj2
2          Obj3
2          Obj4
2          Obj2

На этом этапе вы также можете переместить объекты в свою таблицу.

Объекты

ObjectID ObjectName
-------- ----------
1        Obj1
2        Obj2
3        Obj3
4        Obj4

ObjectRental становится

CustomerID ObjectRentedID
---------- ------------
1          1
1          2
2          3
2          4
2          2

На данный момент я считаю, что вы автоматически получили 3NF. В 3NF вы хотите убедиться, что - если говорить в общих чертах - ни один из первичных ключей вашей дочерней таблицы не связан с неосновным ключом в родительской таблице.

Нормализация не требует введения суррогатных ключей. Речь идет не об устранении дублирующих значений. Цель нормализации состоит в том, чтобы избежать записи одного и того же факта более одного раза, поскольку несколько экземпляров одного и того же факта могут обновляться непоследовательно и вызывать аномалии.

1-ая нормальная форма немного отличается от остальных, поскольку ее цель состоит в том, чтобы гарантировать, что ваши данные находятся в правильном расположении скалярных значений, чтобы нормализация могла применяться систематически. Для 1-й нормальной формы вам необходимо убедиться, что каждое поле каждой строки содержит одно значение. "Obj1,Obj2" выглядит как несколько значений, поэтому вы можете начать там. Затем запишите свои функциональные зависимости, прежде чем переходить к более высоким нормальным формам.

Другие вопросы по тегам