Ich habe eine interessante Diskussion mit einem anderen Datenbankdesigner über Normalisierung. In diesem Beispiel haben wir eine GameTitles-Tabelle und jeder Datensatz muss das Jahr enthalten, in dem das Spiel veröffentlicht wurde. Er sagt, dass 2NF vorschreibt, dass alles normalisiert werden muss. Um konform zu sein, sollte das Jahresfeld in eine ReleaseYears-Tabelle mit einem eigenen Primärschlüssel aufgeteilt werden, auf den die GameTitles-Tabelle verweist. Ich sage, es sollte als Feld auf dem GameTitles-Tisch selbst bleiben.
Mein Argument dafür ist, dass ein Jahr nur ein nicht-primitiver numerischer Wert ist, der von Natur aus statisch ist (dh 2011 wird immer 2011 sein). Aus diesem Grund dient es als eigene Kennung und muss nicht referenziert werden, da es das ist, was es ist. Dies führt auch zu einer zusätzlichen Wartung, da Sie der Tabelle jetzt ein neues Jahr hinzufügen müssen, um darauf zu verweisen. Wenn Sie die Tabelle mit einem großen Bereich von Jahren vorab ausfüllen, verfügen Sie über zusätzliche Datensätze, auf die möglicherweise überhaupt keine Verweise vorhanden sind. Dies erhöht auch die Datenbankgröße, da Sie jetzt über eine zusätzliche Tabelle, einen zusätzlichen Datensatzaufwand und den zusätzlichen Primärschlüssel für das Jahr selbst verfügen. Wenn Sie das Jahr als Feld in der GameTitles-Tabelle behalten, entfallen all diese zusätzlichen Wartungs- und Verwaltungskosten.
Gedanken dazu?
edit: Soll dies auf StackOverflow posten. Kann jemand abstimmen, um dies zu löschen oder um es zur Aufmerksamkeit zu melden?