Die zweite Normalform besteht nun darin, eines der oben angesprochenen Defizite zu beseitigen. Nach dessen Beseitigung ist die Relation in 2NF.

10.1 Definition

Definition 10.1-1: Zweite Normalform (2NF)
Eine Relation ist in zweiter Normalform (2NF), falls jedes Nichtschlüsselattribut voll funktional abhängig ist vom (gesamten) Schlüssel.
Alternativ: ... falls kein (echtes) Schlüsselattribut Determinante für Nichtschlüsselattribute ist.

Somit müssen in einer Relation mit 1NF und ohne 2NF einfache funktionale Abhängigkeiten bestehen. Werden diese beseitigt, beschreibt jedes Attribut dann das Objekt, das durch den Primärschlüssel identifiziert wird und nicht ein anderes, das durch einen Teil des Schlüssels identifiziert wird. Ist diese Bedingung erfüllt, können die oben angeführten Anomalien nicht auftreten.

Relationen in 1NF, die nicht in 2NF sind, können in diese überführt werden. Dies erreicht man dadurch, dass die Attribute der Relation so in verschiedenen Relationen neu angeordnet werden, dass a) obige 2NF-Bedingung erfüllt ist und b) keine Information verloren geht.

10.2 Beispiele AUFTRÄGE und ANGEBOT

10.2.1 Aufträge

Betrachten wir nun nochmals obige Relation Aufträge_1NF.

AUFTRÄGE_1NF

AuftragsNr

PosNr

ProduktNr

ProduktBez

Menge

...

0001

1

9901

Laser Drucker xyz

1

...

0001

2

9910

Toner xyz

3

...

0001

3

9905

Papier abc

5.000

...

0010

1

9905

Papier abc

30.000

...

0010

2

9910

Toner xyz

1

...

0011

1

9901

Laser Drucker xyz

1

...

0011

2

9911

Tintenpatronen x

20

...

0011

3

9905

Papier abc

5.000

...

0011

4

9906

InkJet-Drucker yz

2

...

0012

1

9998

xyz-Bildschirm

1

...

.....

 

 

 

 

...

Schlüssel: #(AuftragsNr, PosNr)


 


...

AuftragsDatum

KundenNr

KundenName

...

30.06.03

1700

Müller

...

30.06.03

1700

Müller

...

30.06.03

1700

Müller

...

01.07.04

1201

Sammer

...

01.07.04

1201

Sammer

...

02.07.02

1600

Stanzl KG

...

02.07.02

1600

Stanzl KG

...

02.07.02

1600

Stanzl KG

...

02.07.02

1600

Stanzl KG

...

04.07.02

1900

Max OHG

...

...

 

 


Sie soll nun schrittweise in die höheren Normalformen gebracht werden.

Sie ist tatsächlich in 1NF und nicht in 2NF, da von dem Schlüsselattribut AuftragsNr funktionale Abhängigkeiten ausgehen, dieses also Determinante ist:

AuftragsNr => AuftragsDatum

AuftragsNr => KundenNr

AuftragsNr => KundenName

Damit bestehen auch einfache funktionale Abhängigkeiten, deren Existenz immer ein Hinweis auf einen Verstoß gegen die 2NF ist:

AuftragsNr, PosNr --> AuftragsDatum

AuftragsNr, PosNr --> KundenNr

AuftragsNr, PosNr --> KundenName

Ein solches Defizit ist in den FA-Diagrammen besonders leicht erkennbar.

Diese Relation wird nun schrittweise normalisiert (und nicht, wie oben in der Vertiefung, auf einmal). Zuerst nochmals die ursprüngliche Relation in textlicher Notation:

AUFTRÄGE_1NF (#(AuftragsNr, PosNr), ProduktNr, ProduktBez, Menge, AuftragsDatum, KundenNr, KundenName),

Um die 2NF zu erreichen, müssen die funktionalen Abhängigkeiten von Schlüsselteilen beseitigt werden. Dazu wird das Attribut (und Determinante) AuftragsNr mit allen von ihm funktional abhängigen Attributen in eine neue Relation Kundenaufträge gestellt. Diese ist dann auf jeden Fall in 2NF, eine evtl. höhere Normalform wird später geprüft.

KUNDENAUFTRÄGE_2NF

#AuftragsNr

AuftragsDatum

KundenNr

KundenName

0001

30.06.03

1700

Müller

0010

01.07.04

1201

Sammer

0011

02.07.02

1600

Stanzl KG

0012

04.07.02

1900

Marx OHG

.....

 

 

 


Für diese Relation gilt: Schlüssel ist AuftragsNr, Nichtschlüsselattribute (NSA) sind AuftragsDatum, KundenNr, KundenName

Folgende funktionale Abhängigkeiten bestehen:

AuftrNr => AuftragsDatum

AuftrNr => KundenNr

AuftrNr => KundenName

KundenNr => KundenName

Die funktionalen Abhängigkeiten zeigen, dass die volle Abhängigkeit aller Nichtschlüsselattribute vom Schlüssel gegeben ist.

Die restlichen Attribute von Aufträge_1NF bilden dann eine Relation Auftragspositionen, in der die einzelnen Auftragspositionen festgelegt sind. Die AuftragsNr verbleibt hier ebenfalls und ist nun einfaches Schlüsselattribut und Fremdschlüssel.

AUFTRAGSPOSITIONEN_2NF

AuftragsNr

PosNr

ProduktNr

ProduktBez

Menge

0001

1

9901

Laser Drucker xyz

1

0001

2

9910

Toner xyz

3

0001

3

9905

Papier abc

5.000

0010

1

9905

Papier abc

30.000

0010

2

9910

Toner xyz

1

0011

1

9901

Laser Drucker xyz

1

0011

2

9911

Tintenpatronen x

20

0011

3

9905

Papier abc

5.000

0011

4

9906

InkJet-Drucker yz

2

0012

1

9998

xyz-Bildschirm

1

.....

 

 

 

 


Für diese Relation gilt: Schlüssel ist #(AuftragsNr, PosNr), Schlüsselattribute (SA) sind AuftragsNr, PosNr.

Außerdem bestehen folgende vollen funktionalen Abhängigkeiten:

AuftragsNr, PosNr => ProduktNr

AuftragsNr, PosNr => Menge

AuftragsNr, PosNr => ProduktBez

ProduktNr => ProduktBez

Die Verknüpfung der beiden nun entstandenen Relationen und damit die eventuelle Wiederherstellung der alten „Zusammenhänge“ erfolgt über das Attribut AuftragsNr, das ja in beiden Relationen vorkommt (àSQL-Notation):

Kundenaufträge.AuftragsNr

bzw.

Auftragspositionen.AuftragsNr

Damit ergibt sich auch der in Auftragspositonen angegebene Fremdschlüssel.

Die folgende Abbildung zeigt das sich daraus ergebende kleine Datenmodell.


Abbildung 10.2-1:

Relationales Datenmodell Aufträge_2NF

10.2.2 ANGEBOT

Obige Relation

ANGEBOT_1NF (#(NameHost, NameODB), RetrSpr, DBTyp, Vertrag, Umfang),

muss in die zwei Relationen ODB_2NF und Angebot_2NF umgewandelt werden:

ANGEBOT_2NF (#(NameHost, NameODB), RetrSpr, Vertrag)

ODB_2NF (#NameODB, DBTyp, Umfang)

Wie bei allen Zerlegungen ist darauf zu achten, dass durch die Zerlegung keine Information verloren geht. In der Relation Angebot sind jetzt die Attribute, die das Angebotsverhältnis ("Host bietet Datenbank an") modellieren. Die Attribute von Relation ODB, die natürlich sehr schnell an Zahl zunehmen, beschreiben die Online-Datenbanken an sich.

Hier nochmals die Ausgangsrelation, danach die beiden in 2NF befindlichen Relationen.


Abbildung 10.2-2:

Relation Angebot_1NF


Abbildung 10.2-3:

Relation Online-Datenbanken


Abbildung 10.2-4:

Relation Angebot

Beide sind tatsächlich bereits in einer höheren Normalform. Die beiden neuen Relationen stellen ein kleines Datenmodell dar, das Online-Datenbanken genannt werden soll:


Abbildung 10.2-5:

Datenmodell Online-Datenbanken

10.3 Faustregel

Die 2NF ist immer dann von vorneherein erfüllt, falls jeder Schlüssel aus einem einzigen Attribut besteht, denn in diesem Fall ist die funktionale Abhängigkeit immer die volle funktionale Abhängigkeit und da das Attribut Schlüssel ist, sind alle NSA voll von ihm abhängig (nicht aber die anderen Schlüsselattribute).

Eine Zerlegung einer Relation wie oben gezeigt wird Projektion genannt. Grundsätzlich gilt, dass jede Relation, die in 1NF ist und nicht in 2NF, durch Projektionen immer in 2NF-Relationen zerlegt werden kann. Die Originalrelation kann durch einen sog. Verbund wiederhergestellt werden (ein Verbund zweier Relationen entspricht der oben eingeführten relationalen Verknüpfung zweier Relationen).

10.4 Beispiel PROJEKTMITARBEIT

10.4.1 Variante 1

Ein weiteres Beispiel: Die Relation Projektmitarbeit_1NF erfasst Informationen zu Angestellten und ihrer Mitwirkung in Projekten:

PROJEKTMITARBEIT_1NF

Name

PersonalNr

Funktion

Funktions­Beschrei­bung

Name­Proj

Proj­Dauer

Proj­Zugeh

Proj­Budget

Stein

12345

Leiter

….

LCD

24

24

10

Maier

12346

DV

….

LCD

24

18

10

Müller

23456

Leiter

….

786zz

18

18

30

Bach

54321

InfMan

….

786zz

18

10

30

Bach

54321

DV

….

LCD

24

24

10

.....

 

 

….

 

 

 

 

Schlüssel: #(PersonalNr, NameProjekt)


Es bedeuten:

Funktion: Funktion der Person im Projekt

FunktionsBeschr: Genauere Klärung der Funktion / textlich

NameProj: Eindeutiger Name des Projekts

ProjDauer: Dauer des Projekts in Monaten

ProjZugeh: Anzahl Monate, die die jeweilige Person dem Projekt angehört

ProjBudget:Budget des Projekts in Millionen Euro

Die Abkürzung BPR bei der Funktionsspezifikation bedeuetet Business Process Reengineering.

Das folgende FA-Diagramm gibt die vollen funktionalen Abhängigkeiten an.


Abbildung 10.4-1:

FA-Diagramm der Relation Projektmitarbeit_1NF

Daneben existieren die folgenden einfachen funktionalen Abhängigkeiten:

PersonalNr, NameProj --> Name

PersonalNr, NameProj --> ProjBudget

PersonalNr, NameProj --> ProjDauer

In welcher Normalform ist diese Relation? Die 1NF ist erfüllt. Ein Verstoß gegen sie wäre im FA-Diagramm nicht erkennbar, weshalb FA-Diagramme nur bei Relationen eingesetzt werden, die in 1NF sind.

Die 2NF ist nicht erfüllt, weil die NSA Name, ProjBudget und ProjDauer nicht voll f.a. sind vom Schlüssel.

Exkurs: Anomalien in diesem Beispiel

Einfüge-Anomalie

Wird ein neues Projekt gestartet, so kann es erst eingetragen werden, wenn die erste Person, die im Projekt mitarbeitet, ebenfalls bekannt ist.

Lösche-Anomalie

Angenommen, ein Projekt ist vorübergehend ohne Personal, z.B. weil die Mitarbeiter aus dem Projekt gekündigt haben, neue aber noch nicht bestimmt sind. Dann verschwindet, wenn die Projektzugehörigkeit der letzten Person gelöscht wird, auch die Information über das Projekt.

Aktualisierungsanomalien

Falls die ProjDauer eines Projekts verändert wird, muss diese Information nicht nur an einer Stelle geändert werden, sondern an mehreren. Gleiches gilt für das Projektbudget. Falls ein Mitarbeiter seinen Namen verändert, z.B. durch Heirat, gilt dasselbe.

Diese Relation wird normalisiert in die drei Relationen

Projektmitarbeit_2NF,

Projekte_2NF und

Personal_2NF.

Zuerst die tabellarische Darstellung der sich ergebenden Relationen:

Projektmitarbeit

PersonalNr

Funktion

FunktBeschreibung

NameProj

ProjZugeh

12345

Leiter

……

LCD

24

12346

DV

……

LCD

18

23456

Leiter

……

486zz

18

54321

InfMan

……

486zz

10

54321

DV

……

LCD

24

.....

 

……

 

 

Schlüssel: #(PersonalNr, NameProj)


 

Projekte

#NameProj

ProjDauer

ProjBudget

LCD

24

10

LCD

24

10

486zz

18

30

486zz

18

30

LCD

24

10


 

Personal

#PersonalNr

Name

12345

Stein

12346

Maier

23456

Müller

54321

Bach

54321

Bach

 

.....


Die durchgestrichenen Zeilen sind jetzt - gegenüber der Ausgangsrelation, überflüssig.

Hier die FA-Diagramme der neuen Relationen:


Abbildung 10.4-2:

FA-Diagramme der Relationen Projektmitarbeit, Projekte, Personal

Das Datenmodell:


Abbildung 10.4-3:

Relationales Datenmodell Projektmitarbeit

Textliche Darstellung:

PROJEKTMITARBEIT_2NF (#(PersonalNr, NameProj), Funktion, FunktBeschreibung, ProjZugeh)

PERSONAL (#PersonalNr, Name)

PROJEKTE (#NameProj, ProjDauer, ProjBudget)

10.4.2 Variante 2

Wie sehr eine kleine Veränderung der Semantik die Modellierung verändert, soll das folgende Beispiel zeigen. Es handelt sich um das obiges Beispiel mit folgenden Änderungen:

  • Ein neues Attribut FunktionsSpez beschreibt die Tätigkeit der Person im jeweiligen Projekt.
  • Eine Person kann in verschiedenen Projekten dieselbe Funktion haben
  • Eine Person kann im selben Projekt mehrere Funktionen ausüben

Hier einige Beispielsdaten:

PROJEKTMITARBEIT_1NF

Name

PersonalNr

Name­Proj

Funktion

Funktions­Spez

Proj­Dauer

Proj­Zugeh

Proj­Budget

Stein

12345

TFT

Leiter

ArbGr02

24

24

10

Maier

12346

TFT

DV

Gesamt

24

18

10

Müller

23456

999zz

Leiter

Gesamt

18

18

30

Bach

54321

999zz

InfMan

BPR

18

10

30

Bach

54321

TFT

DV

Vernetzung

24

24

10

Baum

65432

W2.0

Finanzen

Ausgaben

36

36

5

Baum

65432

W2.0

Contro

Gesamt

36

24

5

Baum

65432

BPR

Contro

Einnahmen

12

12

1

.....

 

 

 

 

 

 

 

Schlüssel: #(PersonalNr, NameProjekt, Funktion)


Schlüssel der Relation:

#(PersonalNr, NameProj, Funktion)

Die Gesamtheit der funktionalen Abhängigkeiten in dieser Relation zeigt das folgende FA-Diagramm.


Abbildung 10.4-4:

FA-Diagramm Projektmitarbeit

Die Abhängigkeit des Attributs FunktionsSpez von den drei Attributen Funktion, PersonalNr und NameProj soll hier so sein. D.h. dass sich die Funktionsspezifikation erst aus der Kombination der drei entsprechenden Attributsausprägungen feststellen lässt.

Textliche Darstellung:

PROJEKTMITARBEIT_1NF (#(PersonalNr, NameProj, Funktion), FunktionsSpez, Name, ProjZugeh, ProjBudget, ProjDauer)

Die Überführung der Relation in die 2NF führt zu folgenden Relationen.


Abbildung 10.4-5:

FA-Diagramm zu Projektmitarbeit und Funktionen


Abbildung 10.4-6:

FA-Diagramm zu Personal


Abbildung 10.4-7:

FA-Diagramm zu Projektmitarbeit

 


Abbildung 10.4-8:

FA-Diagramm zu Projekten

Nachfolgend – zur Verdeutlichung – zugehörige Tabellen mit Beispielsdaten.

FUNKTIONSSPEZ

PersonalNr

NameProj

Funktion

Funktions­Spez

12345

TFT

Leiter

ArbGr02

12346

TFT

DV

Gesamt

23456

999zz

Leiter

Gesamt

54321

999zz

InfMan

BPR

54321

TFT

DV

Vernetzung

65432

W2.0

Finanzen

Ausgaben

65432

W2.0

Contro

Gesamt

65432

BPR

Contro

Einnahmen

 

 

 

 

Schlüssel: #(PersonalNr, Funktion, FunktionsSpez)


 

PROJEKTMITARBEIT

PersonalNr

NameProj

ProjZugeh

Funktion

12345

TFT

24

Leiter

12346

TFT

18

DV

23456

999zz

18

Leiter

54321

999zz

10

InfMan

54321

TFT

24

DV

65432

W2.0

36

Finanzen

65432

W2.0

24

Contro

 

 

 

 

Schlüssel: #(PersonalNr, NameProjekt)


 

PERSONAL

#PersonalNr

Name

12345

Stein

12346

Maier

23456

Müller

54321

Bach

54321

Bach

65432

Baum

65432

Baum

 

.....


 

PROJEKTE

#NameProj

ProjDauer

ProjBudget

TFT

24

10

TFT

24

10

999zz

18

30

999zz

18

30

TFT

24

10

W2.0

36

5

W2.0

36

5

 

 

 


Hier noch die übliche textliche Notation:

FUNKTIONSSPEZ (#(PersonalNr, Funktion, FunktionsSpez))

PROJEKTMITARBEIT (#(PersonalNr, NameProj), Funktion, ProjZugeh)

PERSONAL (#PersonalNr, Name)

PROJEKTE (#NameProj, ProjDauer, ProjBudget)

Zum Schluss das im Rahmen der Normalisierung entstandene Datenmodell.


10.5 Zerlegung und Zusammengehörigkeit

Der Normalisierungsschritt von der 1NF zur 2NF ist immer mit einer Zerlegung der Relation verbunden. Immer wird die „störende“ Determinante, die Teil des Schlüssels ist, mit den von ihr abhängigen Attributen herausgenommen und zu einer neuen Relation gemacht.

Auch die weiteren Normalisierungsschritte führen meist zu Zerlegungen. Für alle diese Zerlegungen sind nun zwei Regeln zu beachten:

  • Die Zerlegung darf zu keinem Informationsverlust führen. Dies wird i.d.R. durch entsprechende Schlüssel/Fremdschlüssel realisiert.
  • Kommt es vor, dass eine neu entstehende Relation eine Objekt- oder Beziehungsklasse beschreibt, die bereits in einer anderen Relation angelegt ist, dann werden die beiden Relationen zusammengeführt. Denn es gilt: nur eine Relation für eine Objekt- oder Beziehungsklasse!

Identisch sind zwei Relationen in diesem Sinne, wenn sie denselben Schlüssel haben.