Einer der Grund­be­grif­fe der re­la­tio­na­len Da­ten­mo­del­lie­rung ist die Nor­ma­li­sie­rung. Im re­la­tio­na­len Da­ten­bank­mo­dell zeichnet sich gutes Da­ten­bank­de­sign durch ein Minimum an Redundanz aus. Der Grund: Red­un­dan­te Daten führen zu se­man­ti­schen Anomalien. Diese wiederum er­schwe­ren die au­to­ma­ti­sche Da­ten­ver­ar­bei­tung sowie die Pflege der Datenbank. Nor­ma­li­sie­rung ist eine Strategie, Red­un­dan­zen in re­la­tio­na­len Da­ten­ban­ken zu be­sei­ti­gen. Wir zeigen Ihnen, wie Sie dabei vorgehen.

Was ist Nor­ma­li­sie­rung?

Bei der Nor­ma­li­sie­rung handelt es sich um einen Ansatz des Da­ten­bank­de­signs, der bei re­la­tio­na­len Da­ten­ban­ken zur Ver­mei­dung von Red­un­dan­zen zum Einsatz kommt.

Das re­la­tio­na­le Da­ten­bank­mo­dell ist das am weitesten ver­brei­te­te Konzept zur com­pu­ter­ge­stütz­ten Da­ten­ver­wal­tung. In re­la­tio­na­len Da­ten­ban­ken werden In­for­ma­tio­nen als Da­ten­sät­ze in Tabellen ge­spei­chert, die über Schlüssel mit­ein­an­der in Beziehung stehen. Ein Datensatz besteht dabei aus mehreren Wer­te­be­rei­chen, die über Ta­bel­len­spal­ten be­stimm­ten At­tri­bu­ten zu­ge­ord­net sind.

Folgende Tabelle zeigt die ge­spei­cher­ten Rech­nungs­da­ten eines fiktiven Be­triebs­aus­stat­ters. Max Mus­ter­mann hat für seinen Betrieb 10 Monitore, 12 Mousepads und 1 Bürostuhl bestellt. Die Be­stel­lung von Erika Mus­ter­frau umfasst 2 Laptops und 2 Headsets.

In der Datenbank des On­line­shops werden die Rech­nungs­da­ten den At­tri­bu­ten Rech­nungs­num­mer (R.-Nr.), Datum, Kunde, Kun­den­num­mer (K.-Nr.), Adresse, Rech­nungs­po­si­ti­ons­num­mer (P.-Nr.), Artikel, Ar­ti­kel­num­mer (Art.-Nr.), Anzahl (Anz.) und Preis zu­ge­ord­net. Jede Zeile der Tabelle steht für einen Datensatz. Ein solcher Datensatz wird als Tupel be­zeich­net.

Der oben dar­ge­stell­te Da­ten­bank­aus­schnitt fungiert als Beispiel für ein schlech­tes Da­ten­bank­de­sign. Bereits auf den ersten Blick fällt auf, dass die Tabelle zahl­rei­che Red­un­dan­zen aufweist. Hinzu kommt, dass die Wer­te­be­rei­che in den Spalten Kunde und Adresse mehr­wer­ti­ge Daten enthalten. Man spricht von einer nicht nor­ma­li­sier­ten Datenbank.

Der größte Nachteil nicht­nor­ma­li­sier­ter Da­ten­ban­ken ist der erhöhte Spei­cher­be­darf infolge red­un­dan­ter Werte. Außerdem lassen sich Attribute, die mehr­wer­ti­ge Daten enthalten, schlecht auslesen und mit­ein­an­der in Beziehung setzen.

Beispiel: Beide Kunden im oben auf­ge­führ­ten Da­ten­bank­aus­schnitt sind in Mus­ter­hau­sen ansässig. Doch da diese In­for­ma­ti­on nicht separat erhoben wurde, lässt sich die Datenbank nicht ohne Weiteres nach Kunden aus demselben Ort filtern.

Um doppelte und mehr­wer­ti­ge Wer­te­be­rei­che zu vermeiden, sind im Rahmen re­la­tio­na­ler Da­ten­bank­mo­del­le drei auf­ein­an­der auf­bau­en­de Nor­mal­for­men ent­wi­ckelt worden.

Bei einer Nor­mal­form handelt es sich um einen de­fi­nier­ten Ziel­zu­stand. Für jede Nor­mal­form wurden spezielle An­for­de­run­gen fest­ge­legt, die erfüllt sein müssen, wenn dieser Ziel­zu­stand eintreten soll. Eine Datenbank ent­spricht also genau dann der 1., 2. oder 3. Nor­mal­form, wenn alle Vor­aus­set­zun­gen für die jeweilige Nor­mal­form erfüllt sind.

Fakt

Als Nor­ma­li­sie­rung be­zeich­net man die Über­füh­rung einer Da­ten­bank­ta­bel­le in eine Nor­mal­form höheren Grades. Die Über­füh­rung in eine Nor­mal­form ge­rin­ge­ren Grades wird De­nor­ma­li­sie­rung genannt.

Nor­ma­li­sie­rung: So nor­ma­li­sie­ren Sie Ihre Datenbank

Um Ihnen die Über­füh­rung einer re­la­tio­na­len Datenbank in die 1., 2. und 3. Nor­mal­form zu ver­an­schau­li­chen, spielen wir die einzelnen Stufen der Nor­ma­li­sie­rung anhand eines Beispiels durch. Aus­gangs­punkt ist der oben auf­ge­führ­te Da­ten­bank­aus­schnitt.

1. Nor­mal­form (1NF)

Eine Tabelle einer re­la­tio­na­len Datenbank ent­spricht der 1. Nor­mal­form (1NF), wenn folgende Vor­aus­set­zun­gen erfüllt sind:

  • Alle Daten liegen atomar vor.
  • Alle Ta­bel­len­spal­ten be­inhal­ten gleich­ar­ti­ge Werte.

Ein Datensatz gilt als atomar, wenn jede In­for­ma­ti­on (jeder Sach­ver­halt) einem separaten Datenfeld zu­ge­ord­net ist.

Nach­ste­hend finden Sie unsere Tabelle zu den Rech­nungs­da­ten, in der wir alle Wer­te­be­rei­che rot her­vor­ge­ho­ben haben, die entweder nicht­ato­mar sind oder die keine gleich­wer­ti­gen Daten enthalten.

Die zahl­rei­chen Her­vor­he­bun­gen zeigen: Unsere Aus­gangs­ta­bel­le verletzt beide Vor­aus­set­zun­gen und ent­spricht somit nicht der 1. Nor­mal­form.

Soll der auf­ge­führ­te Da­ten­bank­aus­schnitt gemäß der 1. Nor­mal­form nor­ma­li­siert werden, ist folgendes Vorgehen er­for­der­lich:

  1. Teilen Sie alle mehr­wer­ti­gen Daten auf separate Spalten auf.
  2. Über­prü­fen Sie die Werte einer jeden Spalte auf Gleich­ar­tig­keit.

Um die Da­ten­sät­ze der Bei­spiel­ta­bel­le in eine atomare Form zu bringen, müssen die Attribute Kunde und Adresse in die spe­zi­fi­sche­ren Attribute Vorname und Nachname bzw. Straße, Haus­num­mer (H.-Nr.), Post­leit­zahl (PLZ) und Ort auf­ge­teilt werden.

Hinweis

Ab wann ein Wert als atomar angesehen wird, hängt vom Nut­zungs­kon­text ab. Ist eine Trennung von Vor- und Nachname bei­spiel­wei­se nicht er­for­der­lich, kann auch der voll­stän­di­ge Name einer Person als atomar gelten. In der Praxis empfiehlt es sich jedoch, mehr­tei­li­ge Werte in kleinst­mög­li­che Einheiten zu un­ter­tei­len.

In der Spalte Preis finden sich Angaben in Euro und in Cent. Ent­schei­den Sie sich für genau eine Art der Angabe, um gleich­ar­ti­ge Wer­te­be­rei­che her­zu­stel­len.

Das Ergebnis ist eine Tabelle, die zwar der 1. Nor­mal­form ent­spricht, aufgrund doppelter Werte jedoch noch immer keine ef­fi­zi­en­te Da­ten­ver­ar­bei­tung erlaubt. Es empfiehlt sich daher, die Tabelle in die 2. Nor­mal­form zu über­füh­ren, um die Red­un­dan­zen zu be­sei­ti­gen.

Tipp

Die 1. Nor­mal­form schreibt atomare Wer­te­be­rei­che vor und er­mög­licht dadurch Da­ten­bank­ab­fra­gen. Daten, die Teil eines nicht­ato­ma­ren Wer­te­be­reichs sind, lassen sich nicht separat abfragen.

2. Nor­mal­form (2NF)

Eine Tabelle, die der 2. Nor­mal­form ent­spre­chen soll, muss alle Vor­aus­set­zun­gen der 1. Nor­mal­form und zu­sätz­lich folgende Bedingung erfüllen:

  • Jedes Nicht­schlüs­sel­at­tri­but muss vom Pri­mär­schlüs­sel voll funk­tio­nal abhängig sein.

In der Ein­lei­tung wurde eine re­la­tio­na­le Datenbank als ein System einzelner Tabellen definiert, die anhand von Schlüs­seln mit­ein­an­der in Beziehung stehen.

Schlüssel dienen bei re­la­tio­na­len Da­ten­ban­ken der ein­deu­ti­gen Iden­ti­fi­zie­rung von Da­ten­sät­zen (Tupeln). Ein Schlüssel, der es er­mög­licht, die einzelnen Zeilen einer Da­ten­bank­ta­bel­le eindeutig zu benennen, wird Su­per­schlüs­sel genannt. Ein solcher Schlüssel kann sich aus den Werten einer einzelnen Spalte ergeben oder aus der Summe der Werte mehrerer Spalten.

In unserem Beispiel ergibt sich ein möglicher Su­per­schlüs­sel bei­spiels­wei­se aus den At­tri­bu­ten Rech­nungs­num­mer (R.-Nr.), Kun­den­num­mer (K.-Nr.) und Rech­nungs­po­si­ti­ons­num­mer (P.-Nr.). Wir haben den Su­per­schlüs­sel in der nach­fol­gen­den Tabelle farblich her­vor­ge­ho­ben.

Ein Schlüssel aus Rech­nungs­num­mer, Kun­den­num­mer und Rech­nungs­po­si­ti­ons­num­mer mit den Werten {124, 12, 1} er­mög­licht es bei­spiels­wei­se, den Datensatz, der für den Laptop-Kauf von Erika Mus­ter­frau steht, eindeutig zu benennen:

Für solch eine ein­deu­ti­ge Iden­ti­fi­zie­rung sind jedoch nicht sämtliche Angaben des aus­ge­wähl­ten Su­per­schlüs­sels er­for­der­lich. Bereits eine Kom­bi­na­ti­on aus Rech­nungs­num­mer und Rech­nungs­po­si­ti­ons­num­mer – also eine Teilmenge des Su­per­schlüs­sels – würde dafür aus­rei­chen, die einzelnen Da­ten­sät­ze zu iden­ti­fi­zie­ren. Solche Schlüssel mit einer minimalen Anzahl an At­tri­bu­ten werden Schlüs­sel­kan­di­da­ten oder Al­ter­na­tiv­schlüs­sel genannt.

In der Regel wird pro Tabelle ein Schlüs­sel­kan­di­dat für die Abbildung der Tabelle aus­ge­wählt. Ideal ist eine fort­lau­fen­de Num­me­rie­rung. Ein solcher Schlüssel wird als Pri­mär­schlüs­sel be­zeich­net und gibt die Rei­hen­fol­ge der Da­ten­sät­ze an.

Der Pri­mär­schlüs­sel kann wie jeder Schlüs­sel­kan­di­dat als ein­tei­li­ger oder – wie in unserem Beispiel – als zu­sam­men­ge­setz­ter Schlüssel vorliegen. Unsere Bei­spiel­ta­bel­le verwendet einen zu­sam­men­ge­setz­ten Pri­mär­schlüs­sel, der sich aus Rech­nungs­num­mer und Rech­nungs­po­si­ti­ons­num­mer ergibt.

Um eine Da­ten­bank­ta­bel­le in die 2. Nor­mal­form zu über­füh­ren, gilt es jedoch nicht nur, den Pri­mär­schlüs­sel und alle Nicht­schlüs­sel­at­tri­bu­te zu ermitteln, sondern auch deren Beziehung zu­ein­an­der. Gehen Sie fol­gen­der­ma­ßen vor:

  1. Prüfen Sie, ob alle Nicht­schlüs­sel­at­tri­bu­te voll funk­tio­nal vom Pri­mär­schlüs­sel abhängig sind. Eine solche Ab­hän­gig­keit ist nur dann gegeben, wenn alle Attribute des Pri­mär­schlüs­sels dafür notwendig sind, das Nicht­schlüs­sel­at­tri­but eindeutig zu iden­ti­fi­zie­ren. Dies bedeutet auch, dass Tabellen mit ein­tei­li­gen Pri­mär­schlüs­seln au­to­ma­tisch der 2. Nor­mal­form ent­spre­chen, wenn alle Vor­aus­set­zun­gen für die 1. Nor­mal­form gegeben sind.
     
  2. Lagern Sie alle Nicht­schlüs­sel­at­tri­bu­te, die nicht voll funk­tio­nal vom gesamten Pri­mär­schlüs­sel abhängig sind, in separate Tabellen aus.

Wenn Sie sich die Bei­spiel­ta­bel­le genau anschauen, werden Sie fest­stel­len, dass die Vor­aus­set­zun­gen für die 2. Nor­mal­form aus folgenden Gründen nicht erfüllt sind: Die Spalte Datum ist lediglich von der Rech­nungs­num­mer (R.-Nr.), nicht aber von der Rech­nungs­po­si­ti­ons­num­mer (P.-Nr.) abhängig. Das Gleiche gilt für die Kun­den­da­ten Vorname, Nachname, Straße, Haus­num­mer (H.-Nr.), Post­leit­zahl und Ort.

Um die Da­ten­ta­bel­le in die 2. Nor­mal­form zu über­füh­ren, lagern wir alle Attribute, die lediglich von der Rech­nungs­num­mer abhängig sind, in eine separate Tabelle mit dem Namen „Rechnung“ aus.

Die Tabelle mit den ver­blei­ben­den Daten nennen wir „Rech­nungs­po­si­ti­on“.

Die Rech­nungs­num­mer (R.-Nr.) findet sich nach der Nor­ma­li­sie­rung in beiden Tabellen und verknüpft diese mit­ein­an­der. Während das Attribut in der Tabelle „Rechnung“ als Pri­mär­schlüs­sel fungiert, kommt es in der Tabelle „Rech­nungs­po­si­ti­on“ als Fremd­schlüs­sel zum Einsatz und ist zugleich Teil des zu­sam­men­ge­setz­ten Pri­mär­schlüs­sels der Tabelle.

Hinweis

Die Ver­knüp­fung via Fremd­schlüs­sel er­mög­licht ein ge­mein­sa­mes Abfragen beider Tabellen. Man spricht von einem Join.

Die Bei­spiel­da­ten ent­spre­chen nun der 2. Nor­mal­form. Gänzlich be­sei­ti­gen ließen sich die Red­un­dan­zen dadurch aber noch nicht. Ziel einer Nor­ma­li­sie­rung ist daher in der Regel die 3. Nor­mal­form.

3. Nor­mal­form (3NF)

Soll eine Tabelle in die 3. Nor­mal­form überführt werden, müssen alle Vor­aus­set­zun­gen der 1. und 2. Nor­mal­form erfüllt sein und zu­sätz­lich die folgende Bedingung:

  • Kein Nicht­schlüs­sel­at­tri­but darf von einem Schlüs­sel­kan­di­da­ten transitiv abhängig sein.

Eine tran­si­ti­ve Ab­hän­gig­keit besteht dann, wenn ein Nicht­schlüs­sel­at­tri­but von einem anderen Nicht­schlüs­sel­at­tri­but – und damit mittelbar von dessen Schlüs­sel­kan­di­da­ten – abhängig ist.

Unser Da­ten­bank­sche­ma verletzt die Be­din­gun­gen der 3. Nor­mal­form gleich an mehreren Stellen:

In der Tabelle „Rechnung“ sind Vorname und Nachname sowie die Attribute Straße, Haus­num­mer (H.-Nr.), Post­leit­zahl und Ort nicht nur vom Pri­mär­schlüs­sel (der Rech­nungs­num­mer), sondern auch von der Kun­den­num­mer abhängig.

In der Tabelle „Rech­nungs­po­si­ti­on“ sind die Attribute Artikel und Preis nicht nur vom Pri­mär­schlüs­sel abhängig, der sich aus Rech­nungs­num­mer und Rech­nungs­po­si­ti­ons­num­mer ergibt, sondern auch von der Ar­ti­kel­num­mer. Auch hier ist die spe­zi­fi­sche Bedingung der 3. Nor­mal­form verletzt.

Um alle Ab­hän­gig­kei­ten zwischen Nicht­schlüs­sel­at­tri­bu­ten zu be­sei­ti­gen, lagern wir die ent­spre­chen­den Attribute in separate Tabellen aus, die durch Fremd­schlüs­sel mit­ein­an­der verknüpft werden. Es ergeben sich somit die vier nor­ma­li­sier­ten Tabellen „Rechnung“, „Kunde“, „Rech­nungs­po­si­ti­on“ und „Artikel“.

Pri­mär­schlüs­sel der Tabelle „Rechnung“ ist eine fort­lau­fen­de Rech­nungs­num­mer. Jeder Rech­nungs­num­mer ist das Datum der Rech­nungs­stel­lung sowie eine Kun­den­num­mer zu­ge­ord­net.

Nähere Angaben zum je­wei­li­gen Kunden werden in der Tabelle „Kunde“ ge­spei­chert. Die Tabellen „Rechnung“ und „Kunde“ sind über die Kun­den­num­mer mit­ein­an­der verknüpft. Diese fungiert in der Tabelle „Kunde“ als Pri­mär­schlüs­sel und kommt in der Tabelle „Rechnung“ als Fremd­schlüs­sel zum Einsatz.

Eine zentrale Tabelle unserer Bei­spiel­da­ten­bank ist die Tabelle „Rech­nungs­po­si­ti­on“. Diese enthält die In­for­ma­ti­on, welche Artikel der je­wei­li­gen Rechnung zu­zu­ord­nen sind und wie viele Artikel bestellt wurden. Der fort­lau­fen­de Pri­mär­schlüs­sel der Tabelle „Rech­nungs­po­si­ti­on“ ergibt sich aus der Rech­nungs­num­mer und der Rech­nungs­po­si­ti­ons­num­mer. Die je­wei­li­gen Artikel sind lediglich als Ar­ti­kel­num­mern auf­ge­führt, die als Fremd­schlüs­sel fungieren und die Tabelle „Rech­nungs­po­si­ti­on“ mit der Tabelle „Artikel“ ver­knüp­fen.

Die Tabelle „Artikel“ schließ­lich be­inhal­tet De­tail­in­for­ma­tio­nen zu den je­wei­li­gen Artikeln, etwa die Ar­ti­kel­be­zeich­nung und den Preis. Als Pri­mär­schlüs­sel fungiert die fort­lau­fen­de Ar­ti­kel­num­mer.

In unserem Beispiel mag es wenig effizient er­schei­nen, zwei Tabellen in vier Tabellen auf­zu­spal­ten. Und tat­säch­lich fallen Red­un­dan­zen bei den Daten von lediglich zwei Kunden kaum ins Gewicht. Doch stellen Sie sich vor, Sie möchten mehrere Hun­dert­tau­send Da­ten­sät­ze zu Kunden oder zu Ihrem Pro­dukt­sor­ti­ment kon­sis­tent und wi­der­spruchs­frei in einer re­la­tio­na­len Datenbank ver­ar­bei­ten! Dies gelingt in der Regel nur mit einem Da­ten­bank­sche­ma, das der 3. Nor­mal­form ent­spricht.

Hinweis

Beachten Sie, dass sich doppelte Werte in re­la­tio­na­len Da­ten­ban­ken oft nicht voll­stän­dig vermeiden lassen. Wenn Sie das durch­ge­spiel­te Da­ten­bank­bei­spiel be­trach­ten, werden Sie fest­stel­len, dass die Ver­knüp­fung von Da­ten­bank­ta­bel­len durch Fremd­schlüs­sel mit Red­un­dan­zen verbunden sein kann. Man spricht in diesem Fall von Schlüs­sel­red­un­dan­zen.

Auch wenn die Nor­ma­li­sie­rung von Da­ten­ban­ken mit einem höheren Pro­gram­mier­auf­wand verbunden ist, gilt 3NF – die 3. Nor­mal­form – allgemein als Standard für re­la­tio­na­le Da­ten­bank­sche­ma­ta, von dem nur in Aus­nah­me­fäl­len ab­ge­wi­chen wird. Bei­spiels­wei­se werden Da­ten­ban­ken, die der 3. Nor­mal­form ent­spre­chen, mitunter in die 2. Nor­mal­form de­nor­ma­li­siert. Der Grund dafür ist, dass Joins über mehrere Tabellen bei sehr großen Da­ten­ban­ken zeit­auf­wen­dig sind. Durch die De­nor­ma­li­sie­rung wird die Anzahl der Tabellen und damit auch die Ab­fra­ge­zeit verkürzt.

Weitere Nor­mal­for­men

In der Praxis endet die Nor­ma­li­sie­rung meist mit der 3. Nor­mal­form. Die folgenden Nor­mal­for­men beziehen sich auf Da­ten­bank­sche­ma­ta mit spe­zi­el­len Ge­ge­ben­hei­ten und kommen daher nur in Aus­nah­men­fäl­len zur Anwendung.

Boyce-Codd-Nor­mal­form (3.5NF)

Bei der Boyce-Codd-Nor­mal­form handelt es sich um eine Ver­schär­fung der 3. Nor­mal­form. Bei 3NF gilt:

  • Kein Nicht­schlüs­sel­at­tri­but darf von einem Schlüs­sel­kan­di­da­ten transitiv abhängig sein.

Bei der Boyce-Codd-Nor­mal­form heißt es statt­des­sen:

  • Kein Attribut darf von einem Schlüs­sel­kan­di­da­ten transitiv abhängig sein, es sei denn, es handelt sich um eine triviale Ab­hän­gig­keit.

Relevant ist die Boyce-Codd-Nor­mal­form aus­schließ­lich für Da­ten­bank­ta­bel­len mit mehreren zu­sam­men­ge­setz­ten Schlüs­sel­kan­di­da­ten, bei denen sich die Schlüssel über­lap­pen; also für den Fall, dass ein und dasselbe Attribut Teilmenge zweier Schlüs­sel­kan­di­da­ten ist.

Da­ten­bank­ta­bel­len, die der 3. Nor­mal­form ent­spre­chen und keine mehr­tei­li­gen Schlüs­sel­kan­di­da­ten aufweisen, stellen somit au­to­ma­tisch Vertreter der Boyce-Codd-Nor­mal­form dar.

Die unten stehende Tabelle weist zwei Schlüs­sel­kan­di­da­ten auf, die sich jeweils aus zwei At­tri­bu­ten zu­sam­men­set­zen.

  • Zu­lie­fe­rer­num­mer (Z.-Nr.) und Ar­ti­kel­num­mer
  • Zu­lie­fe­rer und Ar­ti­kel­num­mer

Beide Schlüssel er­mög­li­chen eine Iden­ti­fi­ka­ti­on jedes einzelnen Da­ten­sat­zes. Einziges Nicht­schlüs­sel­at­tri­but ist die Anzahl. Da das Attribut Anzahl von keinem der Schlüs­sel­kan­di­da­ten transitiv abhängig ist, ent­spricht die Tabelle 3NF.

Die Boyce-Codd-Nor­mal­form hingegen liegt nicht vor, da eine Ab­hän­gig­keit zwischen den At­tri­bu­ten Zu­lie­fe­rer­num­mer (Z.-Nr.) und Zu­lie­fe­rer besteht. Das Attribut Zu­lie­fe­rer­num­mer (Z.-Nr.) ist damit transitiv abhängig vom Schlüs­sel­kan­di­da­ten, der sich aus Zu­lie­fe­rer und Ar­ti­kel­num­mer ergibt; das Attribut Zu­lie­fe­rer hingegen vom Schlüs­sel­kan­di­da­ten, der aus Zu­lie­fe­rer­num­mer (Z.-Nr.) und Ar­ti­kel­num­mer re­sul­tiert.

Vermeiden lassen sich die tran­si­ti­ven Ab­hän­gig­kei­ten, wenn wir die Aus­gangs­ta­bel­le in die Tabellen „Anzahl“ und „Zu­lie­fe­rer“ aufteilen, sodass keine sich über­schnei­den­den Schlüs­sel­kan­di­da­ten mehr vorliegen.

Die Boyce-Codd-Nor­mal­form ver­hin­dert Red­un­dan­zen, die dadurch entstehen, dass iden­ti­fi­zie­ren­de Schlüs­sel­at­tri­bu­te durch sich über­lap­pen­de Schlüs­sel­kan­di­da­ten mehrfach auf­ge­führt werden müssen. Im oben auf­ge­führ­ten Beispiel ver­hin­dert die Über­füh­rung in 3.5NF doppelte Werte in der Spalte Zu­lie­fe­rer.

Hinweis

Von einer trivialen Ab­hän­gig­keit spricht man, wenn ein Attribut von sich selbst voll funk­tio­nal abhängig ist. Da dies bei jedem Da­ten­bank­zu­stand für jedes Attribut stets der Fall ist, ent­spre­chen triviale Ab­hän­gig­kei­ten in der Logik einer Tau­to­lo­gie.

4. Nor­mal­form

Eine Da­ten­bank­ta­bel­le ent­spricht der 4. Nor­mal­form, wenn die Vor­aus­set­zun­gen der Boyce-Codd-Nor­mal­form erfüllt sind und zu­sätz­lich folgende Bedingung:

  • Es liegen keine mehr­wer­ti­gen Ab­hän­gig­kei­ten vor, es sei denn, diese sind trivial.

Eine mehr­wer­ti­ge Ab­hän­gig­keit (mul­tiva­lued de­pen­den­cy) liegt immer dann vor, wenn zwei Attribute, die nicht mit­ein­an­der in Beziehung stehen, vom selben Attribut abhängig sind.

Wir ver­deut­li­chen dies an einem Beispiel:

Folgende Tabelle zeigt pro Kunde an, welche Artikel bestellt wurden und an welchen Zu­stell­ort diese geliefert werden müssen.

Der Kunde mit der Kun­de­num­mer 234 hat bei­spiels­wei­se die Artikel 1-0023-D und 2-0023-D bestellt, die an seine Adresse mit der Post­leit­zahl 12345 geliefert werden sollen. Für den Kunden 567 gehen die Artikel 1-0023-D, 3-0023-D, 4-0023-D und 5-0023-D an den Lieferort 56789.

Die Da­ten­sät­ze lassen sich lediglich mit einem Su­per­schlüs­sel iden­ti­fi­zie­ren, der sich aus allen drei At­tri­bu­ten – Kun­den­num­mer, Ar­ti­kel­num­mer und Post­leit­zahl – ergibt. Da es kein Nicht­schlüs­sel­at­tri­but gibt, liegt 3NF vor. Zudem bestehen keine nicht­tri­via­len tran­si­ti­ven Ab­hän­gig­kei­ten. 3.5NF ist somit ebenfalls gegeben. Es liegen jedoch mehr­wer­ti­ge Ab­hän­gig­kei­ten vor: Sowohl das Attribut Ar­ti­kel­num­mer als auch das Attribut Post­leit­zahl sind vom Attribut Kun­den­num­mer (K.-Nr.) abhängig, stehen selber jedoch in keinerlei Beziehung zu­ein­an­der.

Nachteil eines solchen Da­ten­bank­de­signs: Immer wenn für einen Kunden ein neuer Artikel auf­ge­führt wird, muss auch eine Post­leit­zahl in die Datenbank ein­ge­tra­gen werden. Es entstehen red­un­dan­te Daten.

Re­du­zie­ren lassen sich diese Red­un­dan­zen, indem die Tabelle in 4NF überführt wird. Dazu müssen wir die Tabelle so aufteilen, dass keine oder nur noch triviale mehr­wer­ti­ge Ab­hän­gig­kei­ten bestehen. Wir legen daher zwei separate Tabellen an. Möglich ist dies, da Ar­ti­kel­num­mer und Post­leit­zahl in keinerlei Beziehung zu­ein­an­der stehen.

Wie das Beispiel zeigt, beseitigt die 4. Nor­mal­form Redundanz, die durch mehr­wer­ti­ge Ab­hän­gig­kei­ten entsteht – in diesem Fall speziell in der Spalte Post­leit­zahl (PLZ).

Hinweis

Wir gehen bei diesem (zu­ge­ge­be­ner­ma­ßen etwas kon­stru­ier­ten) Beispiel davon aus, dass für jeden Kunden nur eine Post­leit­zahl ein­ge­tra­gen werden kann. Hätten die Kunden hingegen die Mög­lich­keit, sich ver­schie­de­ne Produkte an un­ter­schied­li­che Zu­stell­or­te liefern zu lassen, bestünde eine Ab­hän­gig­keit zwischen Ar­ti­kel­num­mer sowie Post­leit­zahl und die Aus­gangs­ta­bel­le ent­sprä­che auch ohne Nor­ma­li­sie­rung bereits 4NF.

5. Nor­mal­form

Eine Da­ten­bank­ta­bel­le ent­spricht der 5. Nor­mal­form, wenn sie den Be­din­gun­gen der 4. Nor­mal­form genügt und zu­sätz­lich folgende Bedingung erfüllt ist:

  • Die Tabelle lässt sich nicht weiter aufteilen, ohne dass dabei In­for­ma­tio­nen ver­lo­ren­ge­hen.

Unter welchen Umständen ein solcher Fall eintritt, zeigen wir Ihnen anhand eines Beispiels. Für dieses gehen wir davon aus, dass ein Un­ter­neh­men eine Website auf Basis von TYPO3 sowie einen Magento-Webshop betreibt. Mit den Software-Projekten sind drei Mit­ar­bei­ter betraut: Frau Schmidt, Herr Müller und Herr Krause, die jeweils un­ter­schied­li­che Qua­li­fi­ka­tio­nen mit­brin­gen.

Die Bei­spiel­ta­bel­le zeigt, welcher Mit­ar­bei­ter in welchem Software-Projekt welche Qua­li­fi­ka­ti­on einbringt. Darüber hinaus lässt sich ablesen, welche Qua­li­fi­ka­ti­on für welches Projekt benötigt wird.

Frau Schmidt bringt in das Magento-Projekt ihre Kennt­nis­se in PHP und SQL ein und greift für die TYPO3-Website auf SQL und Ja­va­Script zurück. Herr Müller übernimmt ebenfalls die PHP-Pro­gram­mie­rung bei Magento und arbeitet bei TYPO3 mit Ja­va­Script. Herr Krause schließ­lich ist nur in das TYPO3-Projekt ein­ge­bun­den und übernimmt dort die PHP-Pro­gram­mie­rung – das jedoch allein. Der Tabelle ist darüber hinaus zu entnehmen, dass für Magento Kennt­nis­se in PHP und SQL er­for­der­lich sind, während das TYPO3-Projekt PHP-, SQL- und Ja­va­Script-Kennt­nis­se erfordert.

Die Tabelle besitzt nur einen Schlüssel, der sich aus allen drei At­tri­bu­ten zu­sam­men­setzt, und ent­spricht somit min­des­tens 3NF sowie der Boyce-Codd-Nor­mal­form. Da außerdem keine Ab­hän­gig­kei­ten zwischen allen drei At­tri­bu­ten bestehen, stellt die Tabelle auch eine Ver­tre­te­rin der 4. Nor­mal­form dar.

Nun gilt es zu prüfen, ob auch 5NF gegeben ist. Dazu zerlegen wir die Aus­gangs­ta­bel­le „Mit­ar­bei­ter­qua­li­fi­ka­ti­on im Pro­jekt­ein­satz“ in die drei Tabellen „Pro­jekt­ein­satz“, „Mit­ar­bei­ter­qua­li­fi­ka­ti­on“ und „Pro­jekt­an­for­de­rung“.

Die Tabelle „Pro­jekt­ein­satz“ zeigt an, welcher Mit­ar­bei­ter in welches Software-Projekt ein­ge­bun­den ist.

Der Tabelle „Mit­ar­bei­ter­qua­li­fi­ka­ti­on“ lässt sich entnehmen, welcher Mit­ar­bei­ter welche Pro­gram­mier- bzw. Da­ten­bank­spra­che be­herrscht.

Welche Qua­li­fi­ka­ti­on für welches Projekt er­for­der­lich ist, gibt die Tabelle „Pro­jekt­an­for­de­rung“ an.

Auf den ersten Blick wirkt der Da­ten­bank­aus­schnitt nach der Zerlegung deutlich über­sicht­li­cher. Doch weisen die im Rahmen der Nor­ma­li­sie­rung ent­stan­de­nen Tabellen auch denselben In­for­ma­ti­ons­ge­halt auf wie die Aus­gangs­ta­bel­le?

Um das her­aus­zu­fin­den, müssen wir einen Join vornehmen – eine Da­ten­bank­ab­fra­ge über alle drei Tabellen. Das Ergebnis über­rascht.

Bei der Re­kon­struk­ti­on der Aus­gangs­ta­bel­le müssen wir zwangs­läu­fig davon ausgehen, dass jeder am Projekt be­tei­lig­te Mit­ar­bei­ter jede seiner Qua­li­fi­ka­tio­nen einbringt, sofern diese vom je­wei­li­gen Projekt erfordert werden. Die In­for­ma­ti­on, dass Herr Krause die PHP-Pro­gram­mie­rung für das TYPO3-Projekt allein über­nom­men hat, ist ver­lo­ren­ge­gan­gen. Die Aus­gangs­ta­bel­le lässt sich somit nicht ver­lust­frei zerlegen und ent­spricht damit bereits der 5. Nor­mal­form.

In der Praxis werden Sie nur selten auf Da­ten­bank­sche­ma­ta stoßen, die die Vor­aus­set­zun­gen für 4NF erfüllen, aber nicht der 5. Nor­mal­form ent­spre­chen. In­ter­es­sant ist 5NF jedoch für An­wen­dungs­fäl­le, bei denen aus vor­han­de­nen Daten neue In­for­ma­tio­nen gewonnen werden sollen.

Das Beispiel zeigt immerhin, das sowohl Frau Schmidt als auch Herr Müller PHP-Kennt­nis­se besitzen, die sie, da sie in das TYPO3-Projekt ein­ge­bun­den sind, zukünftig auch dort ein­brin­gen könnten – eine In­for­ma­ti­on, die sich das Un­ter­neh­men dafür zunutze machen könnte, die Software-Ent­wick­lung in diesem Projekt ef­fi­zi­en­ter zu gestalten.

Vor- und Nachteile der Nor­ma­li­sie­rung

Ziel der Nor­ma­li­sie­rung ist die Reduktion doppelter Werte. Über­füh­ren Sie Ihre Datenbank in eine der auf­ge­führ­ten Nor­mal­for­men, hat dies den Vorteil, dass das Ziel­sche­ma weniger Redundanz aufweist als das Aus­gangs­sche­ma. Nor­ma­li­sie­rung er­leich­tert Ihnen somit die Pflege Ihrer Datenbank.

An­de­rer­seits geht die Nor­ma­li­sie­rung von Da­ten­ban­ken immer mit der Aus­la­ge­rung von At­tri­bu­ten in separate Tabellen einher. Dies erfordert mög­li­cher­wei­se die In­te­gra­ti­on von Fremd­schlüs­seln und kann somit zu Schlüs­sel­red­un­dan­zen führen. Der zentrale Nachteil jedoch ist, dass logisch zu­sam­men­ge­hö­ri­ge Daten in einer nor­ma­li­sier­ten Datenbank nicht mehr zusammen ge­spei­chert werden. Möchte man Daten, die auf ver­schie­de­ne Tabellen auf­ge­teilt wurden, zu­sam­men­füh­ren, ist zunächst ein Join er­for­der­lich.

Per Da­ten­bank­ab­fra­gen über Joins lassen sich komplexe In­for­ma­tio­nen her­aus­fil­tern. In der Umsetzung sind Joins jedoch auf­wen­di­ger als einfache Abfragen. Hinzu kommt ein deutlich größerer Zeit­auf­wand, wenn Joins über eine Vielzahl von Da­ten­bank­ta­bel­len erfolgen.

Zum Hauptmenü