11.1 Redundanz trotz 2NF |
|
Auch eine Relation, die in 2NF ist, kann noch Redundanzen und Anomalien aufweisen. Betrachten wir z.B. die Relation Kundenaufträge_2NF aus dem Datenmodell Aufträge. |
|
Kundenaufträge_2NF |
|
| #AuftragsNr |
AuftragsDatum |
KundenNr |
KundenName |
| 0001 |
30.06.03 |
1700 |
Müller |
| 0100 |
18.03.04 |
1700 |
Müller |
| 0010 |
01.07.04 |
1201 |
Sammer |
| 0011 |
02.07.02 |
1600 |
Stanzl KG |
| 0012 |
04.07.02 |
1900 |
Marx OHG |
| 0014 |
04.08.03 |
1900 |
Marx OHG |
| ..... |
|
|
|
| |
Hier gelten folgende funktionalen Abhängigkeiten:
|
|
AuftrNr => AuftragsDatum |
|
AuftrNr => KundenNr |
|
AuftrNr => KundenName |
|
KundenNr => KundenName |
|
Die Relation ist ohne Zweifel in 2NF. Die trotzdem noch vorliegende Redundanz liegt darin, dass dieselbe Kundennummer natürlich sehr oft vorkommen kann und für jedes Vorkommen der Kundennamen erfasst wird. |
Redundanz |
Als besonderes Strukturmerkmal halten wir fest, dass ein Nichtschlüsselattribut (NSA), KundenNr, Determinante ist und dass eine „fortgesetzte“ funktionale Abhängigkeit besteht: |
|
AuftrNr => KundenNr => KundenName |
|
Eine solche „fortgesetzte“ funktionale Abhängigkeit wird transitive Abhängigkeit zwischen AuftrNr und KundenName genannt (in Anlehnung an den entsprechenden Begriff der Mathematik) und so dargestellt: |
Transitive Abhängigkeit |
AuftrNr --->::--> KundenName |
|
Zur Erinnerung (an die Schulalgebra): transitiv bedeutet eine Beziehung über ein anderes Element hinweg. A und B sind in (irgendeiner) transitiven Beziehung (bez), wenn für diese gilt. A bez C bez B. |
|
11.1.1 Beispiel ANGESTELLTE |
|
Das nächste Beispiel betrifft eine Relation mit Informationen zu Angestellten. Im Rahmen eines Modellierungsvorhabens habe sich folgende Relation ergeben: |
|
ANGESTELLTE (#PersNr, Abteilung, AbtLeiter, Name, Vorname, Alter, Wohnort, Straße) |
|
Mit der Festlegung, dass hier nur der Hauptwohnsitz erfasst wird, dass also jede/r nur eine Adresse hat, gelten folgende funktionalen Abhängigkeiten: |
|
PersNr => Name |
|
PersNr => Vorname |
|
PersNr => Abteilung |
|
PersNr => AbtLeiter |
|
PersNr => Alter |
|
PersNr => Wohnort |
|
PersNr => Straße |
|
Somit gilt: |
|
PersNr => Abteilung => AbtLeiter |
|
und damit die folgende transitive Abhängigkeit: |
|
PersNr --->::---> AbtLeiter |
|
Die Redundanz liegt hier in der Mehrfacherfassung des Zusammenhangs |
|
Abteilung => AbtLeiter |
|
Bei jedem Eintrag einer Abteilung wird auch der Abteilungsleiter eingetragen. |
|
Das folgende FA-Diagramm mit den vollen funktionalen Abhängigkeiten macht dieses Strukturmerkmal deutlich: |
|

|
|
|
Abbildung 11.1-1: |
FA-Diagramm der Relation Angestellte_2NF |
|
|
|
Die Grafik visualisiert auch sehr deutlich den Verstoß gegen die oben schon dargestellte Idealstruktur. Die entsprechende „störende“ funktionale Abhängigkeit wurde durch einen „Blitz“ markiert. |
|
Auch hier ist also wieder ein Nichtschlüsselattribut (NSA) Determinante. |
|
11.1.2 Beispiel Online-Datenbanken |
|
Das folgende Beispiel betrifft wieder die Relation zu Online-Datenbanken: |
|
Online-Datenbanken_2NF(#Name, #NameKurz, Sprache, Typ, Region, Produzent, ProdLand) |
|
Auch diese Relation ist in 2NF, da - wie auch aus dem FA-Diagramm ersichtlich - alle Nichtschlüsselattribute voll funktional abhängig sind vom Primärschlüssel. Trotzdem weist sie Strukturmängel auf, wie auch die folgende tabellarische Darstellung deutlich macht (einige Attribute wurden aus Platzgründen weggelassen / vgl. das FA-Diagramm zu dieser Lösung weiter unten, bei der Überführung in die 3NF): |
|
ODB_2NF |
|
| Name |
NameKurz |
... |
Produzent |
ProdLand |
| CRONOS-FRIC |
FRIC |
... |
EUROSTAT |
Luxemburg |
| CRONOS-BISE |
BISE |
... |
EUROSTAT |
Luxemburg |
| Predicasts Overview of Markets and Technology |
PTS Promt |
... |
Predicasts |
USA |
| Predicasts U.S.Time Series |
PTS USTS |
... |
Predicasts |
USA |
| ..... |
|
|
|
|
| |
Anmerkung: die angegebenen Attributsausprägungen sind fiktiv. |
|
Anmerkung: Bitte nicht irritieren lassen von den zwei Schlüsseln. Diese stellen keinen Verstoß gegen die 2NF dar, denn es sind zwei konkurrierende Schlüssel. Verstöße gegen die 2NF basieren immer auf einem (aus mehreren Attributen) zusammengesetzten Schlüssel. |
|
Die Strukturmängel bestehen darin, dass Nichtschlüsselattribute voneinander funktional abhängig sind, so wie hier |
|
Produzent => ProdLand |
|
und dass dadurch eine transitive Abhängigkeit entsteht: |
|
Name --->::---> ProdLand |
|
In einem solchen Fall treten wieder die oben besprochenen Anomalien auf: |
Anomalien am Beispiel ODB_2NF |
- Ein neuer Produzent mit seinem Land kann - wegen der Forderung der Objektintegrität - nicht eingetragen werden, ohne dass nicht zumindest eine seiner Datenbanken bekannt ist (Einfüge-Anomalie)
- Verlegt ein Produzent seinen Hauptsitz in ein anderes Land, muss das neue Land nicht nur an einer Stelle, sondern an mehreren geändert werden (Aktualisierungs-Anomalie)
- Müssen wir die letzte uns bekannte Online-Datenbank eines Produ-zenten löschen, verlieren wir auch die Information über seine Existenz und das Land, in dem er ansässig ist (Lösche-Anomalie).
|
|
Die Ursache dafür ist wieder die Redundanz, die sich aus einem solchen Strukturmerkmal ergibt: Wie auch die obige tabellarische Darstellung zeigt, wird ProdLand für jede Datenbank des Produzenten erfasst. |
|
Die Schwierigkeiten entstehen wiederum dadurch, dass NameProd zwar Determinante, aber nicht Schlüsselattribut ist. Dadurch wird mit NameProd und ProdLand die Beschreibung einer zweiten Objektklasse aufgenommen, die z.B. mit weiteren Adressangaben fortgesetzt werden kann. |
|
Formal erfasst wird dieses Strukturdefizit über den oben schon eingeführten Begriff der transitiven Abhängigkeit. Es gelten ja die funktionalen Abhängigkeiten (mit der Annahme, dass jede Online-Datenbank nur einen Produzenten hat): |
|
Name => Produzent |
|
Produzent => ProdLand |
|
Ebenso gilt natürlich, dass von der Online-Datenbank auf das Land des Produzenten geschlossen werden kann: |
|
Name => ProdLand |
|
Insgesamt lässt sich damit wieder eine „Kette“ aufstellen: |
|
Name ---> Produzent ---> ProdLand |
|
Die transitive Abhängigkeit ist formal wie folgt definiert: |
|
Definition 11.1-1: Transitive Abhängigkeit A und C seien Attribute einer Relation R. C heißt transitiv abhängig von A, in Zeichen: A --->::---> C, falls es ein Attribut B aus R gibt mit dem gilt: A => B => C (A <> B <> C) |
|
Entsprechendes gilt für Attributkombinationen, wenn also für A, B oder C mehrere Attribute stehen. |
|
11.1.3 Beispiel ODB-HOST |
|
Auch im folgenden Beispiel (einer Version der Relation Angebot) liegt eine transitive Abhängigkeit vor: |
|
ODB-HOST_2NF (#(NameODB, NameHost), RetrSpr, TypRetrSpr) |
|
Folgende Annahmen sollen gelten: |
|
- Ein Host verwendet u.U. für verschiedene Online-Datenbanken unterschiedliche Retrievalsprachen (Abfragesprachen für Online-Datenbanken).
- Retrievalsprachen werden eindeutig typisiert (z.B.: "geeignet für Zeitreihen", "geeignet für datensatzorientierte Datenbanken", „geeignet für Textdatenbanken“, usw.)
|
|
Dann gelten die folgenden funktionalen Abhängigkeiten: |
|
#(NameODB, NameHost) => RetrSpr |
|
#(NameODB, NameHost) => TypRetrSpr |
|
RetrSpr => TypRetrSpr |
|
und damit |
|
#(NameODB, NameHost) --->::---> TypRetrSpr |
|
Das FA-Diagramm: |
|

|
|
|
Abbildung 11.1-2: |
Relation ODB-HOST_2NF |
|
|
|
Das FA-Diagramm visualisiert sehr deutlich den Verstoß gegen die 3NF durch die funktionale Abhängigkeit, die von einem NSA ausgeht. |
|
Die Beispiele machen deutlich, wodurch die transitiven Abhängigkeiten Schwierigkeiten bereiten: durch sie wird die Beschreibung einer weiteren Objekt- oder Beziehungsklasse eröffnet (hier z.B. durch RetrSpr = > TypRetrSpr die der Retrievalsprachen), zusätzlich zu der eigentlich in der Relation beschriebenen (hier die der Beziehung zwischen Online-Datenbanken und ihren Anbietern. Dies führt dann zu der oben beschriebenen Redundanz in den Daten. |
|
11.2 Definition 3NF |
|
Liegen solche Strukturen nicht vor oder wurden sie beseitigt, ist eine Relation in dritter Normalform: |
|
Definition 11.2-1: Dritte Normalform (3NF) Eine Relation ist in dritter Normalform (3NF), falls sie in 2NF ist und falls keine transitiven Abhängigkeiten zwischen dem Schlüssel und Nichtschlüsselattributen (NSA) bestehen (alternativ: ... falls kein NSA Determinante ist). |
|
Somit gilt: |
|
- in einer 3NF-Relation ist kein Nichtschlüsselattribut (NSA) transitiv von einem Schlüssel abhängig, d.h. jedes NSA beinhaltet eine Eigenschaft, die dem zugrundeliegenden Objekt als Ganzes zukommt.
- Eine Relation ist in 3NF genau dann wenn alle NSA gegenseitig unabhängig und voll abhängig sind vom Schlüssel.
- "A relation R is in third normal form (3NF) if and only if, for all time, each tuple of R consists of a primary key value that identifies some entity, together with a set of zero or more mutually independent attribute values that describe the entity in some way" [Date 1986, S. 367].
|
|
Damit ist dann der Bezug auf ein Objekt im relationalen Sinn voll hergestellt. Im FA-Diagramm äußert sich dies so, dass Pfeile nur vom Primärschlüssel ausgehen, so wie oben als Idealstrukturen gezeigt. |
|
Eine Relation mit einer transitiven Abhängigkeit wird wie folgt normalisiert: Die Determinante, die nicht Schlüsselattribut ist, bildet zusammen mit dem von ihr abhängigen Attribut eine neue Relation. In der Ursprungsrelation muss diese Determinante (die nach der Normalisierung keine mehr ist) ebenfalls stehen bleiben. |
Regel - Von der 2NF zur 3NF |
Betrachten wir dies anhand der obigen drei Beispiele. |
|
11.3 Beispiele |
|
11.3.1 Kundenaufträge |
|
Zuerst die Relation in textlicher Notation: |
|
Kundenaufträge_2NF (#AuftragsNr, AuftragsDatum, KundenNr, KundenName) |
|
Das Nichtschlüsselattribut als Determinante war KundenNr: |
|
KundenNr => KundenName |
|
Die transitive Abhängigkeit: |
|
AuftragsNr --->::---> KundenName |
|
Damit muss die Relation in folgende zwei zerlegt werden: |
|
Aufträge_3NF (#AuftragsNr, AuftragsDatum, KundenNr) |
|
Kunden_3NF (#KundenNr, KundenName) |
|
Das Attribut KundenNr wird zu einem Fremdschlüssel. |
|
11.3.2 Angestellte |
|
Die Relation zu den Angestellten hat das Attribut Abteilung, das gleichzeitig NSA und Determinante ist, und damit eine transitive Abhängigkeit zwischen PersNr und AbtLeiter (vgl. auch das FA-Diagramm oben): |
|
Angestellte_2NF (#PersNr, Abteilung, AbtLeiter, Name, Vorname, Alter, Wohnort, Straße) |
|
Abteilung => AbtLeiter |
|
PersNr --->::---> AbtLeiter |
|
Die Relation muss in die folgenden zwei Relationen zerlegt werden: |
|
Angestellte_3NF (#PersNr, Abteilung, Name, Vorname, Alter, Wohnort, Straße) |
|
Abteilung_3NF (#Abteilung, AbtLeiter) |
|
Hier die FA-Diagramme der neuen Relationen: |
|

|
|
|
Abbildung 11.3-1: |
FA-Diagramm zur Relation Angestellte_3NF |
|
|
|

|
|
|
Abbildung 11.3-2: |
FA-Diagramm zur Relation Abteilung_3NF |
|
|
|
11.3.3 Online-Datenbanken |
|
In der oben vorgestellten Relation Online-Datenbanken ist Produzent(enname) die „störende“ Determinante: |
|
Online-Datenbanken_2NF(#Name, #NameKurz, Sprache, Typ, Region, Produzent, ProdLand) |
|

|
|
|
Abbildung 11.3-3: |
Relation ONLINE-DATENbANKEN_2NF |
|
|
|
Für die Überführung in die 3NF wird diese Relation in die folgenden zwei Relationen zerlegt: |
|
ONLINE_DATENBANKEN_3NF (#Name, #NameKurz, Sprache, Typ, Region, Produzent) |
|
PRODUZENTEN_3NF (#Produzent, ProdLand) |
|
Etwaige hinzukommende Adressangaben wären dann an die Relation Produzent_3NF anzuhängen. Damit ergeben sich folgende FA-Diagramme: |
|

|
|
|
Abbildung 11.3-4: |
FA-Diagramm der Relation Online-Datenbanken_3NF |
|
|
|

|
|
|
Abbildung 11.3-5: |
FA-Diagramm der Relation Produzenten_3NF |
|
|
|
11.3.4 ODB-HOST |
|
Das obige Beispiel |
|
ODB-Host_2NF (#(NameODB, NameHost), RetrSpr, TypRetrSpr) |
|
wird zerlegt in |
|
ODB-Host_3NF (#(NameODB, NameHost), RetrSpr) |
|
und |
|
RetrSpr_3NF (#RetrSpr, TypRetrSpr) |
|

|
|
|
Abbildung 11.3-6: |
FA-Diagramm der Relation ODB-Host_3NF |
|
|
|

|
|
|
Abbildung 11.3-7: |
FA-Diagramm der Relation RetrSpr_3NF |
|
|
|
11.3.5 Personal |
|
Zum Abschluss dieses Abschnitts nun noch ein größeres Beispiel für den Weg von der 1NF zur 3NF – mit ungewöhnlichem Schlüssel. |
|
Im Rahmen eines Modellierungsvorhabens habe sich folgende Relation ergeben: |
|
Personal (PersonalNr, Name, Wohnort, AbtNr, AbtName, NameProj, Projektraum) |
|
Bedeutung der Attribute: |
|
PersonalNr: Personalnummer |
|
Name: Namensangaben der Beschäftigten |
|
Wohnort: Wohnort der Beschäftigten (Erster Wohnsitz) |
|
AbtNr: Abteilungsnummer |
|
AbtName: Namen der Abteilungen |
|
NameProj: Namen von Projekten |
|
ProjRaum:Raum, in dem die Projektleitung angesiedelt ist |
|
Zur Semantik: |
|
- Ein Mitarbeiter kann in mehreren Projekten sein
- Ein Mitarbeiter ist nur genau einer Abteilung zugeordnet
- Die Projektleitung ist in genau einem Raum angesiedelt.
|
|
Damit gelten folgende einfachen (-->) und vollen (=>) funktionalen Abhängigkeiten: |
|
PersonalNr => Name |
|
PersonalNr => Wohnort |
|
PersonalNr => AbtNr |
|
PersonalNr => AbtName |
|
AbtNr => AbtName |
|
AbtName => AbtNr |
|
NameProj => Projektraum |
|
PersonalNr, NameProj --> Name |
|
PersonalNr, NameProj --> Wohnort |
|
PersonalNr, NameProj --> AbtNr |
|
PersonalNr, NameProj --> AbtName |
|
PersonalNr, NameProj --> Projektraum |
|
Ein Schlüssel ist so definiert, dass durch ihn jedes Tupel eindeutig identifiziert wird. Also müssen in ihm die Determinanten zusammengefügt werden, von denen alle übrigen Attribute funktionell abhängig sind. Somit wird hier die Attributkombination (PersonalNr, NameProj) Schlüssel. Von diesem Schlüssel ist allerdings kein Attribut voll funktional abhängig, wie auch das folgende FA-Diagramm zeigt: |
Schlüssel-bestimmung |

|
|
|
Abbildung 11.3-8: |
FA-Diagramm der Relation Personal |
|
|
|
Eine solche Relation ist - die 1NF mal vorausgesetzt - nicht in 2NF. Ihre Überführung in 2NF führt – ausgedrückt in FA-Diagrammen - zu folgendem Ergebnis: |
|

|
|
|
Abbildung 11.3-9: |
FA-Diagramm der Relation Pers-Abt_2NF |
|
|
|

|
|
|
Abbildung 11.3-10: |
FA-Diagramm der Relation Projekte_2NF |
|
|
|

|
|
|
Abbildung 11.3-11: |
FA-Diagramm der Relation Pers-Proj_2NF |
|
|
|
Die Relation Pers-Proj_2NF, die sozusagen die Projektmitarbeit festhält, dient als Verbindungsrelation zwischen den anderen beiden Relationen. |
|
Pers-Proj_2NF und Projekte_2NF befinden sich auch gleich in 3NF, während Pers_Abt_2NF nochmals zerlegt werden muss (diesmal in textlicher Notation): |
|
Pers_3NF(#PersonalNr, Name, Wohnort, AbtNr) |
|
und |
|
Abt_3NF(#AbtNr, #AbtName) |
|
Bei Abt_3NF sind beide Attribute Schlüsselattribute. Eines davon wird als Primärschlüssel festgelegt. Insgesamt ergibt sich damit das folgende relationale Datenmodell: |
|

|
|
|
Abbildung 11.3-12: |
Relationales Datenmodell Pers_Abt_Proj |
|
|
|
11.4 Vertiefung - „Relationale“ Objekt- und Beziehungsklasse |
|
Ganz zu Beginn des Kapitels, bei der Einführung des Relationenbegriffs, wurde als ein Modellierungsschritt genannt, dass jede Objektklasse und jede Beziehungsklasse in eine Relation „eingefüllt“ wird. |
|
Ist dies geschehen, entsprechen sich (Objekt-/Beziehungs-)Klasse und Relation noch sehr genau. |
|
Wird dann die 1NF herbeigeführt, sind u.U. Attribute mit Mehrfacheinträgen weggenommen und in eigene Relationen getan worden. Die Übereinstimmung von (Objekt-/Beziehungs-)Klasse und Relation ist nicht mehr voll gegeben. Die Klasse wird durch zwei oder drei Relationen beschrieben. |
|
Genauso bei der Herbeiführung der 2NF und 3NF. Die Attribute der (Objekt-/Beziehungs-)Klasse werden falls nötig auf verschiedene Relationen verteilt, diesmal aber, weil in der Ausgangsrelation verschiedene Objekt-/Beziehungsklassen beschrieben wurden. |
|
Insgesamt gilt, dass die ursprüngliche Beschreibung der (Objekt-/Beziehungs-)Klasse sich nach den Normalisierungsschritten nicht mehr in einer Relation, sondern in mehreren (u.U: zahlreichen) befindet. |
|
11.5 Normalisierung durch Zerlegung |
|
Soweit die Betrachtung der ersten drei Normalformen. Dies sind gleichzeitig auch die wichtigsten, zumindest für die Praxis der Datenhaltung. Wie zu erkennen ist bedeutet Normalisierung, dass Relationen in eine höhere Normalform gebracht werden und dass dies meist durch Zerlegung geschieht. Diese Zerlegung sollte aber gewissen Regeln genügen. Die wichtigsten seien hier nochmals zusammengefasst: |
|
- Es darf keine Information verloren gehen. D.h., es muss durch entsprechende Schlüssel/Fremdschlüssel-Anordnung erreicht werden, dass die zerlegten Relationen gegebenenfalls wieder verknüpft werden können.
- Es darf durch die Zerlegung in keinem Bereich des Datenmodells ein Rückschritt bezüglich der Normalformen erfolgen.
- Nach jeder Zerlegung ist zu prüfen, ob die neu entstandenen Relationen nicht mit anderen, schon bestehenden, verschmolzen werden können. Grundsätzlich gilt, dass für eine relationale Objekt- oder Beziehungsklasse immer nur eine Relation vorhanden sein darf.
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |