Активная запись / ORM против нормальных форм? - PullRequest
1 голос
/ 10 мая 2010

Я немного поигрался с Active Record и заметил, что A.C./ORM всегда использует следующую модель базы данных при создании отношения один к одному

лицо

id | country_id | имя | ...

Страна

id | Tld | имя | ...

Нет, я задавался вопросом, не является ли это нарушением третьей нормальной формы? Это ясно гласит: «Каждый непростой атрибут не транзитивно зависит от каждого ключа таблицы». Ну, этот country_id не зависит от personid?

Так это неправильно или я просто не понимаю?

Ответы [ 2 ]

3 голосов
/ 10 мая 2010

Функциональная зависимость A => B означает, что каждое отдельное значение A по определению может быть связано только с одним значением B. Другими словами, если вы знаете A, то B является данным. В этом случае данный personid может быть связан только с одним country_id, поэтому personid => country_id.

2 голосов
/ 10 мая 2010

Да, это зависит.

В реляционной алгебре с каждой таблицей связан предикат (т. Е. Утверждение, заполненное значениями из таблицы, дает истинный факт).

Так, например, «Лицо, обозначенное id, родом из страны country, имеет имя name и т. Д ...»

Третья нормальная форма также иногда формулируется как: «Каждый непростой атрибут должен содержать факт о ключе, целом ключе и только ключе».

То есть, вы ищете переходные зависимости. Примером этого будет

Person (id, country_id, tld, name, ...)

В этом примере tld является транзитивно зависимым id, потому что он зависит от country_id, который зависит от id. Таким образом, этот пример будет нарушать 3NF.

...