Normalisiert die Tabelle in die 3. Normalform

7

Diese Frage ist offensichtlich eine Hausaufgabe. Ich kann meinen Professor nicht verstehen und habe keine Ahnung, was er während der Wahl gesagt hat. Ich muss Schritt für Schritt Anweisungen machen, um die folgende Tabelle zuerst in 1NF, dann 2NF, dann 3NF zu normalisieren.

Ich schätze jede Hilfe und Anweisung.

    
David Tunnell 07.03.2013, 15:25
quelle

4 Antworten

18

Okay, ich hoffe, ich erinnere mich an alle richtig, fangen wir an ...

Regeln

Um sie sehr kurz zu machen (und nicht sehr präzise, ​​nur um Ihnen eine erste Vorstellung davon zu geben, worum es geht):

  • NF1 : Eine Tabellenzelle darf nicht mehr als einen Wert enthalten.
  • NF2 : NF1 sowie alle Nicht-Primärschlüsselspalten müssen von allen Primärschlüsselspalten abhängig sein.
  • NF3 : NF2- und Nicht-Primärschlüsselspalten können nicht voneinander abhängen.

Anweisungen

  • NF1 : Suchen Sie Tabellenzellen, die mehr als einen Wert enthalten, und fügen Sie diese in separate Spalten ein.
  • NF2 : Suchen Sie nach Spalten mit weniger als allen Primärschlüsselspalten, und fügen Sie sie in eine andere Tabelle ein, die nur die Primärschlüsselspalten enthält, auf die sie wirklich angewiesen sind.
  • NF3 : Suchen Sie nach Spalten, die von anderen Nicht-Primärschlüsselspalten abhängig sind, zusätzlich zum Primärschlüssel. Setzen Sie die abhängigen Spalten in eine andere Tabelle.

Beispiele

NF1

Eine Spalte " state " hat Werte wie "WA, Washington". NF1 wird verletzt, weil das zwei Werte, Abkürzung und Name ist.

Lösung: Um NF1 zu erfüllen, erstellen Sie zwei Spalten, STATE_ABBREVIATION und STATE_NAME .

NF2

Stellen Sie sich vor, Sie haben einen Tisch mit diesen vier Spalten, der internationale Namen von Automodellen ausdrückt:

  • COUNTRY_ID (numerisch, Primärschlüssel)
  • CAR_MODEL_ID (numerisch, Primärschlüssel)
  • COUNTRY_NAME (varchar)
  • CAR_MODEL_NAME (varchar)

Die Tabelle kann diese zwei Datenzeilen enthalten:

  • Zeile 1: COUNTRY_ID = 1, CAR_MODEL_ID = 5, COUNTRY_NAME = USA, CAR_MODEL_NAME = Fox
  • Zeile 2: COUNTRY_ID = 2, CAR_MODEL_ID = 5, COUNTRY_NAME = Deutschland, CAR_MODEL_NAME = Polo

Das heißt, das Modell "Fox" heißt in den USA "Fox", aber in Deutschland heißt das gleiche Automodell "Polo" (erinnere dich nicht, ob das tatsächlich stimmt).

NF2 wird verletzt, weil der Name des Landes nicht von der Fahrzeugmodell-ID und der Länder-ID abhängt, sondern nur von der Länder-ID.

Lösung: Um NF2 zu erfüllen, verschieben Sie COUNTRY_NAME in eine separate Tabelle "COUNTRY" mit den Spalten COUNTRY_ID (Primärschlüssel) und COUNTRY_NAME . Um eine Ergebnismenge einschließlich des Ländernamens zu erhalten, müssen Sie die beiden Tabellen mit einem JOIN verbinden.

NF3

Sagen Sie, Sie haben einen Tisch mit diesen Spalten, der die klimatischen Bedingungen der Staaten ausdrückt:

  • STATE_ID (varchar, Primärschlüssel)
  • CLIME_ID (Fremdschlüssel, ID einer Klimazone wie "Wüste", "Regenwald", etc.)
  • IS_MOSTLY_DRY (bool)

NF3 wird verletzt, weil IS_MOSTLY_DRY nur von der CLIME_ID abhängt (nehmen wir das zumindest an), aber nicht von der STATE_ID (Primärschlüssel).

Lösung: Um NF3 zu erfüllen, setzen Sie die Spalte MOSTLY_DRY in die Klimazonen-Tabelle.

Hier sind ein paar Gedanken zur tatsächlichen Tabelle in der Übung:

Ich wende die oben erwähnten NF-Regeln an, ohne die Primärschlüsselspalten anzufechten. Aber sie ergeben eigentlich keinen Sinn, wie wir später sehen werden.

  • NF1 wird nicht verletzt, jede Zelle enthält nur einen Wert.
  • NF2 wird von EMP_NM und allen Telefonnummern verletzt, weil alle diese Spalten nicht vom vollständigen Primärschlüssel abhängig sind. Sie hängen alle von EMP_ID (PK) ab, aber nicht von DEPT_CD (PK). Ich nehme an, dass die Telefonnummern gleich bleiben, wenn ein Mitarbeiter in eine andere Abteilung wechselt.
  • NF2 wird auch von DEPT_NM verletzt, weil DEPT_NM nicht vom vollständigen Primärschlüssel abhängig ist. Es hängt von DEPT_CD ab, aber nicht von EMP_ID.
  • NF2 wird auch von allen Skill-Spalten verletzt, da sie nicht Abteilung, sondern nur Mitarbeiter-spezifisch sind.
  • NF3 wird von SKILL_NM verletzt, weil der Skill-Name nur vom Skill-Code abhängt, der nicht einmal Teil des zusammengesetzten Primärschlüssels ist.
  • SKILL_YRS verletzt NF3, weil es von einem Primärschlüsselelement (EMP_ID) und einem Nicht-Primärschlüsselelement (SKILL_CD) abhängt. Es ist also teilweise abhängig von einem Nicht-Primärschlüssel-Attribut.

Wenn Sie also alle Spalten löschen, die NF2 oder NF3 verletzen, bleibt nur der Primärschlüssel (EMP_ID und DEPT_CD). Dieser verbleibende Teil verstößt gegen die gegebenen Geschäftsregeln: Diese Struktur würde es einem Mitarbeiter ermöglichen, gleichzeitig in mehreren Abteilungen zu arbeiten.

Sehen wir uns das aus der Ferne an. In Ihrem Datenmodell geht es um Mitarbeiter, Abteilungen, Fähigkeiten und die Beziehungen zwischen diesen Entitäten. Wenn Sie dies normalisieren, erhalten Sie eine Tabelle für die Mitarbeiter (mit DEPT_CD als Fremdschlüssel), eine für die Abteilungen, eine für die Fähigkeiten und eine weitere für die Beziehung zwischen Mitarbeitern und Fähigkeiten, die "Skill Jahre "für jedes Tupel von EMP_ID und SKILL_CD (mein Lehrer hätte letzteres eine" assoziative Entität "genannt).

    
user1992821 07.03.2013, 16:50
quelle
2

Betrachten Sie die ersten beiden Zeilen Ihrer Tabelle, und schauen Sie sich an, welche Spalten in dieser Tabelle mit "PK" markiert sind, und unter der Annahme, dass "PK" für "Primärschlüssel", "und" steht Wenn ich mir die Werte anschaue, die für diese beiden Spalten in diesen beiden Zeilen erscheinen,
würde ich Ihrem Professor empfehlen, sich aus dem Datenbankunterricht zu befreien und nicht zurück zu kommen, bis er selbst richtig auf der Thema.

Diese Übung kann nicht ernst genommen werden, da die Problembeschreibung selbst hoffnungslos widersprüchliche Informationen enthält.

(Beachten Sie, dass es als Konsequenz auf diese Frage einfach keine "gute" oder "richtige" Antwort gibt !!!)

    
Erwin Smout 07.03.2013 20:16
quelle
1

Eine weitere übermäßig vereinfachte Antwort steht bevor.

In einer relationalen 3NF-Tabelle wird jeder Nicht-Schlüssel-Wert durch den Schlüssel, den ganzen Schlüssel und nichts als den Schlüssel bestimmt (also hilf mir Codd;)).

1NF: Der Schlüssel. Dies bedeutet, dass beim Angeben des Schlüsselwerts und einer benannten Spalte höchstens ein Wert am Schnittpunkt der Zeile und der Spalte vorhanden ist. Ein Mehrfachwert, wie eine Reihe von Werten, die durch Kommas getrennt sind, ist nicht zulässig, da Sie nicht direkt mit einem Schlüssel und einem Spaltennamen auf den Wert zugreifen können.

2NF: Der ganze Schlüssel. Wenn eine Spalte, die nicht Teil des Schlüssels ist, durch eine richtige Teilmenge der Schlüsselspalten bestimmt wird, wird 2NF verletzt.

3NF: Und nichts als der Schlüssel. Wenn eine Spalte von einer Gruppe von Nicht-Schlüsselspalten bestimmt wird, wird 3NF verletzt.

    
Walter Mitty 07.03.2013 17:05
quelle
0

3NF erfüllt nur dann, wenn es in der zweiten Normalform vorliegt und keine transitive Abhängigkeit aufweist und alle Nicht-Schlüsselattribute vom Primärschlüssel abhängen sollten.

Transitive Abhängigkeit: R = (A, B, C). A- & gt; B UND B- & gt; C THEN A- & gt; C

    
user3016962 21.11.2013 10:01
quelle