Verstoß gegen 3.NF - ja oder nein

Hi!

Wir diskutieren gerade eine neue Struktur einer Datentabelle und können uns nicht darauf einigen, ob bei der Struktur ein Verstoß gegen die 3.NF vorliegt oder nicht.

Satzstruktur:

ID
Bezeichnung
Typ
ID_Besitz
Stufe
ID_Ort

Anm.: ID_Besitz und ID_Ort sind Foreign Keys, die auf zwei andere Tabellen zeigen.

Das Problem der Diskussion:
Die Felder „ID_Besitz“, „Stufe“ und „ID_Ort“ sind nur dann gefüllt, wenn „Typ“ einen bestimmten Wert annimmt. Anderenfalls müssen diese drei Felder auf NULL stehen.

Beispiel:
In „Typ“ steht „O“
-> ID_Besitz enthält einen numerischen Wert, den dem Schlüssel eines Eintrages in einer anderen Tabelle entspricht,
-> „Stufe“ enthält einen Wert von 1 bis 5,
-> „ID_Ort“ enthält einen numerischen Wert, den dem Schlüssel eines Eintrages in einer anderen Tabelle entspricht,

In „Typ“ steht „F“
-> „ID_Besitz“ muss NULL sein
-> „Stufe“ muss NULL sein
-> „ID_Ort“ muss NULL sein

Stand der Diskussion:
Einige sagen, die Tabelle darf so aussehen.
Andere sagen, die Datensätze für „Typ“ = „F“ müssen in eine eigene Tabelle ausgelagert werden, da die Attribute „ID_Besitz“, „Stufe“ und „ID_Ort“ für diese Datensätze überflüssig sind.

Was sagen die Datenbank-Fachleute hier dazu? Daten in zwei Tabellen trennen oder die Daten gemischt halten? Wird die 3.NF verletzt?

Grüße
Heinrich

Hi Heinrich,

das ist keine Frage der Normalformen, sondern eine der praktischen Umsetzung einer idealen Modellierung.

Streng modelliert hat die Entität (nicht die Tabelle!) zwei disjunkte Untermengen, eine mit diesen zusätzlichen Attributen und eine ohne. Die Mengen unterscheiden sich durch den Wert der Variablen Typ, Ausprägungen „F“ oder nicht „F“.

Ob nun für jede Entität eine Tabelle angelegt wird, ist reine Geschmackssache.

Einige sagen, die Tabelle darf so aussehen.

Tabellen dürfen grundsätzlich so aussehen, wie es derjenige für richtig hält, der die Datenbank aufbaut. Modellierer arbeiten mit Entitäten.

Wird die 3.NF verletzt?

Nein. Die 3. NF behandelt funktionale Abhängigkeiten, nicht die Frage, ob ein Attribut vorhanden sein muss oder fehlen darf.

Gruß Ralf

Hallo,

Die 3NF bedeutet ja (salopp gesagt) das Verbot der Abhängigkeit von Nicht-Schlüsselattributen.

Die Antwort ist: ja und nein. Kommt darauf an, was alles in Typ stehen kann.
Und zwar ist Typ funktional abhängig von ID_Besitz, Stufe und ID_Ort. (Jedenfalls so wie du es beschreibst.)
ID_Besitz = null --> Typ = ‚F‘
ID_Besitz != null --> TYp = ‚O‘

dasselbe gilt für Stufe und ID_Ort.

Wenn du aber mehr Typen zulässt, verschwindet die 3NF-Verletzung. (Dann hat Typ wieder eine nicht redundante Aussage)

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi!

Was sagen die Datenbank-Fachleute hier dazu? Daten in zwei
Tabellen trennen oder die Daten gemischt halten? Wird die 3.NF
verletzt?

Wie schon meine Vorschreiber schrieben, zu guter Letzt kommt’s auf den Entwickler (DB und/oder Applikation) an.

Die 3.NF wird definitiv nicht verletzt (meine Meinung - wobei ich die Regeln der Normalformen, geschweige denn, was nun die 1., 2., 3. usw. ist, schon längst nimmer im Kopf habe - mit der Zeit geht alles automatisch).

Meine Meinung: Eine Tabelle und die Prüfung wird am besten per Constraint bzw DB-Trigger durchgeführt - eine Prüfung bzw. Einschränkung der Eingabemöglichkeiten durch die Applikation ist sowieso zusätzlich unumgänglich

Grüße,
Tomh