2te Normalform...Eigene Tabelle fuer jedes Kennzeichen? (Access)

ThomasS., Mittwoch, 08.04.2009, 08:45 (vor 3484 Tagen)
bearbeitet von Martin Asal, Donnerstag, 31.12.2015, 13:42

Auszug aus dem Tutorial.

Zweite Normalform (Tabellen)

Eine Tabelle befindet sich in der zweiten Normalform, wenn sie der ersten Normalform entspricht und darüber hinaus jeder Datensatz nur Felder enthält, die sich auf das Objekt beziehen, das durch den Primärschlüssel dargestellt wird.

In der folgenden Beispieltabelle gibt es zwar ein Primärschlüsselfeld (IDKunde), das aber keinen Bezug zu den Autokennzeichen hat.
Bei den Kunden haben die Auto-KZ nichts zu suchen. Gemäß der zweiten Normalform müssen sie aus obiger Tabelle entfernt werden. Sie gehören in eine eigene Tabelle. Dann können auch mehr als zwei Kennzeichen pro Kunde dargestellt werden. Auto-KZ ist dann das Primärschlüsselfeld der neuen Tabelle.

Ich moechte eine Datenbank aufbauen, bei der ich einem Kunden mehrere Vertraege (Bspw.Verwaltung/Buchfuehrung/Pruefung) und diesen Vertraegen verschiedene Inhalte bzw. Dienste zuweisen moechte.
Grundsaetzlich stellt sich mir die Frage, ob innerhalb eines Datensatzes auch Felder frei bleiben koennen.

So habe ich es bisher.
Ich habe z.B Vertrag XY (Primaerschluessel). Dienst dieses Vertrages kann A,B,C,D,E sein (Spalten). Es kann aber auch sein, dass mehrere wie zB.A+B als Dienste im Vertrag enthalten sind.
Kann ich, wenn ich der Normalform entprechen will das ueberhaupt so anlegen?...ich haette immer freie Felder, da nie alle Dienste in Anspruch genommen werden. In dem Tutorialbeispiel http://www.access-tutorial.de/tabellen/normalformen.htm wird das durch eine eigene KFZ Tabelle geloest, und hier wird die IDKunde mit DuplikateMoeglich indiziert.

Bedeutet das fuer mich, dass ich fuer jede Unterscheidungsmoeglichkeit bzw. Auswahlmoeglichkeit eine separate Tabelle anlegen muss?!
im Extremfall also[tabA,tabB...tabA+B,tabA+C....tabC+D....tabA+C+D.....]

Es waere natuerlich ein erheblicher Mehraufwand.Oder laesst sich das auch so regeln, dass ich statt freier Felder den Datentyp auf boolean setze, also auf jeden Fall etwas in der Tabelle steht...zb A(ja) B(nein) C(ja) D(ja) E(nein)

Wenn ich mir allerdings das Beispiel zur dritten Normalform anseh, dann scheint es so zu sein, dass ich einfach nur eine einzige Tabelle haben muss, in der einmal alle Moeglichkeiten [s.o.] drinstehen, denen wird dann eine eindeutige Nummer zugeordnet und die muss ich dann in EINE Spalte (statt 5) eintragen und habe eine eindeutige Zuordnung ohne die Moeglichkeit leerer Zellen.

ueber eine klare verstaendliche Antwort wuerde ich mich wie immer sehr freuen, und bitte um Verstaendnis fuer mein Unverstaendnis. Danke

Mit freundlichen Gruessen
ThomasS.

2te Normalform...Eigene Tabelle fuer jedes Kennzeichen?

Martin Asal @, Mittwoch, 08.04.2009, 21:48 (vor 3484 Tagen) @ ThomasS.

Ich moechte eine Datenbank aufbauen, bei der ich einem Kunden mehrere Vertraege (Bspw.Verwaltung/Buchfuehrung/Pruefung) und diesen Vertraegen verschiedene Inhalte bzw. Dienste zuweisen moechte.

Du hast also Kunden, Verträge, und bietest Dienste an, die auf bestimmten Dienstleistungen beruhen. Demnach würde ich 4 Tabellen anlegen, und diese wie folgt normalisieren:

tblKunden 1:n tblVerträge 1:n tblDienste n:1 tblDienstleistungen

In tblDienstleistungen kommen dann für Verwaltung/Buchfuehrung/Pruefung je ein Datensatz rein. Schließlich bietest Du eine bestimmte Produktpalette an, Rasenmähen gehört derzeit wohl nicht dazu ;-)

tblKunden sollte klar sein; eben alles zum Kunden.

Für jeden Vertrag ein Eintrag in tblVerträge; jeder Vertrag gehört eindeutig zu einem Kunden.

In tblDienste kommen die jeweiligen Vertragsdetails rein: In einem Vertrag ist z.B. nur Buchführung und Prüfung vereinbart, macht also 2 Datensätze. Dazu wird in tblDienste nur die VertragsID, nicht die KundenID gespeichert; die ergibt sich ja bei Bedarf wieder aus dem Vertrag. Außerdem gibt es ein Feld "Dienstleistung", in dem die ID aus tblDienstleistungen gespeichert wird.

Wahrscheinlich wirst Du die einzelnen Tabellen sehr schnell weiter "aufbohren"; z.B. würde ich in tblDienste noch Felder anlegen zum Tätigkeitsbeginn (der für einen Dienst innerhalb des Vertrags vielleicht ein anderer ist, als der Vertragsbeginn) oder Preisvereinbarungen.

Grundsaetzlich stellt sich mir die Frage, ob innerhalb eines Datensatzes auch Felder frei bleiben koennen.

Ja. Aber bitteschön nur bei Feldern, die nicht andere Tabellen tangieren.

bis denn
Martin

RSS-Feed dieser Diskussion
powered by my little forum