fullstack-development / developers-roadmap

How to learn front-end or back-end development

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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:

  1. The table is in 1st normal form, and
  2. 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:

  1. It is in first normal form.
  2. 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 перестает иметь смысл.

Статья подробная, с примерами (целиком не читал), но эта неточность все портит. Я собираюсь добавить ссылку на вики, а эту статью вообще бы лучше заменить или вырезать, если других источников хватит. Может, у вас есть на примете другая статья? Хотя лично я бы оставил википедию. Там несколько заумные определения, но ничего запредельного, если походить по ссылкам, а определения потом понадобятся для анализа и проектирования схемы БД.

+ @evgeny-osipenko