middle-1/databases: incorrect information in a link about database normalization
antonkalinin-ml opened this issue · comments
В источнике про нормализацию таблиц указана некорректная информация про 2NF:
A table is in 2nd Normal Form if:
- The table is in 1st normal form, and
- All the non-key columns are dependent on the table’s primary key.
Сравните с определением из вики:
A relation is in the second normal form if it fulfills the following two requirements:
- It is in first normal form.
- It does not have any non-prime attribute that is functionally dependent on any proper subset of any candidate key of the relation. A non-prime attribute of a relation is an attribute that is not a part of any candidate key of the relation.
Что некорректно:
- вместо primary key должно быть candidate key (потенциальный ключ). Потенциальный ключ - минимальное подмножество атрибутов, уникальное у любой строки. Во-первых, в таблице может быть несколько потенциальных ключей, и условие 2NF должно относиться ко всем, а первичный ключ по определению только один. Например, если в таблице есть unique-констрейнт, то атрибуты, к которым он относится, тоже образуют потенциальный ключ, хотя они могут и не входить в первичный ключ. Во-вторых, первичный ключ почти всегда суррогатный, т.е. его содержимое никак не связано с предметной областью, а потенциальный ключ может быть с нею связан.
- потерян тот нюанс, что ключ может быть составным, и если так, то в 2NF не должно быть неключевых атрибутов, зависящих только от части (любого) потенциального ключа. Если он простой, то 2NF перестает иметь смысл.
Статья подробная, с примерами (целиком не читал), но эта неточность все портит. Я собираюсь добавить ссылку на вики, а эту статью вообще бы лучше заменить или вырезать, если других источников хватит. Может, у вас есть на примете другая статья? Хотя лично я бы оставил википедию. Там несколько заумные определения, но ничего запредельного, если походить по ссылкам, а определения потом понадобятся для анализа и проектирования схемы БД.