На каком этапе нормализации я должен включить новый столбец первичного ключа
У меня есть таблица со следующими данными. Мне нужно нормализовать их в соответствии с правилами нормализации, но я не понимаю, на каком этапе нормализации я должен ввести 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" выглядит как несколько значений, поэтому вы можете начать там. Затем запишите свои функциональные зависимости, прежде чем переходить к более высоким нормальным формам.