Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbank:Kann ich Nullable-Attribute in einer dritten Normalform-Datenbank haben?

Die Art und Weise, wie Nullen in SQL definiert sind – als Nichtwerte, die nicht mit Domänenwerten verglichen werden können – bedeutet, dass sie gegen 1NF (und alle höheren Normalformen) verstoßen. Eine Relation (die durch normalisierte Tabellen dargestellte mathematische Struktur) muss für jede Spalte und jede Zeile einen einzigen Wert haben. Nullen bedeuten, dass wir keinen Wert haben, und eine Nullable-Spalte bedeutet, dass wir zwei Relationen in einer Tabelle haben – eine Supertype-Relation, die alle Spalten außer der Nullable-Spalte enthält, und eine Subtype-Relation, die denselben Primärschlüssel und die zuvor nullable-Spalte hat, z die wir nur Zeilen aufzeichnen können, für die das Attribut bekannt ist. Der Zweck der Normalisierung besteht darin, einen Datensatz in elementare Fakten zu zerlegen, ohne Informationen zu verlieren. Zwei Relationen in einer einzigen Tabelle widersprechen dem Ziel und machen Dinge wie relationale Algebra/Relationalrechnung komplizierter.

Die Normalformen sind formal logisch definierte Strukturen, keine industriellen Best Practices, die an die Situation angepasst werden können, daher sehe ich nicht viel Raum für Kontroversen. Ob wir sie verwenden sollten und wie sie gehandhabt werden sollten, ist ein interessanteres Thema.

Obwohl Nullen gegen die normalen Formen verstoßen, heißt das nicht, dass Sie in Ihrer SQL-Datenbank keine Nullen verwenden können. Sie haben sowohl Risiken als auch Vorteile. Ich benutze sie auch, aber mit Bedacht.