it-swarm.com.de

Normalisierung - 2NF vs. 3NF

Mühe, die Unterschiede zwischen ihnen zu sehen. Ich weiß, wir sagen, 2NF ist "der ganze Schlüssel" und 3NF "nichts als der Schlüssel".

Verweisen auf diese großartige Antwort von Smashery: Was sind 1NF, 2NF und 3NF beim Datenbankdesign?

Das für 3NF verwendete Beispiel ist genau dasselbe wie 2NF - ein Feld, das nur von einem Schlüsselattribut abhängig ist. Wie unterscheidet sich das Beispiel für 3NF von dem für 2NF?

Vielen Dank

24
Marcus

Angenommen, eine Beziehung erfüllt eine nicht triviale funktionale Abhängigkeit der Form A -> B, wobei B ein Nicht-Attribut-Attribut ist.

2NF wird verletzt, wenn A kein Superschlüssel ist, sondern eine geeignete Teilmenge eines Kandidatenschlüssels

3NF wird verletzt, wenn A kein Superkey ist

Sie haben festgestellt, dass die 3NF-Anforderung nur ein Sonderfall (aber nicht wirklich so besonders) der 2NF-Anforderung ist. 2NF an sich ist nicht sehr wichtig. Die wichtige Frage ist, ob A ein Superkey ist, und nicht, ob A zufällig ein Teil eines Kandidatenschlüssels ist.

12
nvogel

Da Sie eine sehr spezifische Frage zu einer Antwort für existierende Frage stellen, folgt hier eine Erklärung dafür (und im Grunde werde ich sagen, was dportas bereits in seiner Antwort gesagt hat, aber in mehr Worten).

Die Beispiele für Designs, die nicht in 2NF und nicht in 3NF enthalten sind, sind nicht identisch.

Ja, die Abhängigkeit liegt in beiden Fällen in einem einzigen Feld.

In einem Nicht-2NF-Beispiel:

  • abhängigkeit ist auf dem Teil des Primärschlüssels

während in Nicht-3NF-Beispiel (das in 2NF ist):

  • die Abhängigkeit liegt in einem Feld, das nicht Teil des Primärschlüssels ist (und in diesem Beispiel auch erfüllt 2NF Dies soll zeigen, dass Sie auch nach 3NF suchen sollten, wenn Sie nach 2NF suchen.)

In beiden Fällen würden Sie zur Normalisierung eine zusätzliche Tabelle erstellen, die keine Aktualisierungsanomalien aufweisen würde (Beispiel für eine Aktualisierungsanomalie: Was passiert in 2NF, wenn Sie Coursename für IT101|2009-2, aber nicht für IT101|2009-1 aktualisieren? Sie erhalten eine inkonsistente = bedeutungslose = unbrauchbare Daten).

Wenn Sie sich also den Schlüssel merken , den gesamten Schlüssel und nichts als den Schlüssel , der sowohl 2NF als auch 3NF abdeckt, sollte dies in der Praxis beim Normalisieren funktionieren. Die Unterscheidung zwischen 2NF und 3NF mag Ihnen subtil erscheinen (fragen Sie sich, ob in der zusätzlichen Abhängigkeit die Attribute, von denen die Daten abhängen, Teil des Kandidatenschlüssels sind oder nicht) und akzeptieren Sie sie einfach.

8
Unreason

2NF ermöglicht, dass Nicht-Prim-Attribute funktional von Nicht-Prim-Attributen abhängig sind

aber

3NF ermöglicht, dass Nicht-Prim-Attribute nur vom Superschlüssel funktional abhängig sind

Wenn also eine Tabelle in 3NF ist, ist sie in 2NF und 3NF ist strenger als 2NF

Hoffe das hilft...

7
Lordferrous

Sie haben die 3. NF erreicht, wenn keine Beziehung zwischen dem Schlüssel und anderen Spalten besteht, die nicht davon abhängen.

Ich bin mir nicht sicher, ob mein Professor das so gesagt hätte, aber so ist es.

Wenn Sie "im Feld" sind. Vergiss die Definitionen. Suchen Sie nach "Best Practices". Eins ist DRY: Wiederholen Sie sich nicht.

Wenn Sie diesem Prinzip folgen, beherrschen Sie bereits alles, was Sie für NF benötigen.

Hier ist ein Beispiel: Ihre Tabelle hat das folgende Schema:

PERSONS : id, name, age, car make, car model

Alter und Name beziehen sich auf den Personeneintrag (=> id), das Modell hängt jedoch vom Fahrzeug und nicht von der Person ab.

Dann würden Sie es in zwei Tabellen aufteilen:

PERSONS : id, name, age, car_models_id (references CAR_MODELS.id)
CAR_MODELS : id, name, car_makes_id (references CAR_MAKES.id)
CAR_MAKES : id, name

Sie können eine Replikation in 2FN haben, jedoch nicht mehr in 3FN.

Bei der Normalisierung geht es um Nicht-Replikation, Konsistenz und aus einem anderen Blickwinkel um Fremdschlüssel und JOINs.

Je normaler, desto besser für Daten, aber nicht für Leistung oder Verständnis, wenn es wirklich zu kompliziert wird.

2
tiktak

2NF folgt der partiellen Abhängigkeit, während 3NF der transitiven Funktionsabhängigkeit folgt. Es ist wichtig zu wissen, dass die 3NF in 2NF sein muss und eine transitive Funktionsabhängigkeit unterstützen muss.

0
rashedcs