|
Datenmodell entwickeln: Welche Tabellen und Beziehungen?
|
| Autor |
Nachricht |
astern
Datenmodell-Missionar

Verfasst am: 20. Jun 2009, 17:29 Rufname: Andreas
Wohnort: Rastede
|
|
| Version: (keine Angabe möglich) |
|
"Welche Tabellen brauche ich?"
"Habe ich in meiner Datenbank die richtigen Tabellen?"
Die Antwort auf diese Fragen liefert ein Datenmodell.
Dieser Artikel zeigt, wie sich ein gutes Datenmodell entwickeln lässt.
DENN: Erst ein gutes Datenmodell erlaubt es, Access sinnvoll zu nutzen.
Ein Datenmodell ist normalerweise
(1) eine Grafik
(2) eine Sache, für die man 30 Buchseiten zur Erläuterung braucht.
Hier kommt eine praktische Anleitung ohne Grafik und auf ca. 3 Seiten!
Also - nehmen wir mal an, in einer Bibliothek werden Bücher an Leser verliehen. Die Bücher sind von Verlagen und stehen in Regalen.
1. Schritt: Formuliere das Problem in Sätzen der Form Substantiv - Verb - Substantiv
Leser leihen Bücher.
Bücher sind von Verlagen.
Bücher stehen in Regalen.
REGEL: Substantive werden zu Tabellen; Verben werden zu Beziehungen - d.h.:
Tabellen: tblLeser, tblBuch, tblVerlag, tblRegal
Beziehungen: tblLeser - tblBuch, tblBuch - tblVerlag, tblBuch - tblRegal
ACHTUNG: Alle Bezeichnungen für Tabellen und deren Spalten ohne Umlaute (ä, ü, ö), ohne Leerzeichen und ohne ß schreiben!
2. Schritt: Formuliere für jede Beziehung zwei Sätze
EIN Leser leiht MEHRERE Bücher.
EIN Buch wird von MEHREREN Lesern ausgeliehen.
EIN Buch steht in EINEM Regal.
In EINEM Regal stehen MEHRERE Bücher.
EIN Buch ist von EINEM Verlag.
Von EINEM Verlag gibt es MEHRERE Bücher.
Damit haben wir folgende Beziehungen:
("<->>" = "1:n", "<<->>" = "m:n")
tblRegal <->> tblBuch
tblVerlag <->> tblBuch
tblLeser <<->> tblBuch
Vielleicht hast Du Dich gewundert, warum EIN Buch an MEHRERE Leser ausgeliehen werden kann. EIN Buch kann doch immer nur bei EINEM Leser sein!? Das ist nach gesundem Menschenverstand auch richtig - datenbanktechnisch aber nicht, wenn nämlich die Zeit ins Spiel kommt: Das Buch kann heute bei Meier sein; vorige Woche hatte es Lehmann und für nächste Woche hat es Krause vorbestellt.
Weitere Beispiele aus anderen Anwendungsgebieten:
EIN Schiff ist in EINEM Hafen.
In EINEM Hafen liegen MEHRERE Schiffe.
Stimmt? Scheinbar ja - aber das Schiff kann ja gestern in Hamburg gewesen sein, ist heute in Antwerpen und morgen in London.
EIN Leihwagen ist bei EINEM Kunden.
EIN Kunde leiht MEHERERE Wagen.
Stimmt? Scheinbar ja - aber der Leihwagen kann ja gestern bei Schmidt gewesen sein, ist heute bei Hauptmann und morgen bei Schubert.
ALSO: Immer wenn es um das Aufheben von Vergangenheitsdaten oder um die Planung für die Zukunft geht, ist eine scheinbare 1:n-Beziehung in Wirklichkeit eine m:n-Beziehung! Die Zeitangaben gehören dann zusammen mit den beiden Fremdschlüsseln in die Zwischentabelle.
3. Schritt: Anlegen der Fremdschlüssel
Dazu zwei REGELN:
(1) Bei einer 1:n-Beziehung wandert der Primärschlüssel der "1"-Seite als Fremdschlüssel auf die "n"-Seite.
(2) Bei einer m:n-Beziehung wandern beide Primärschlüssel als Fremdschlüssel in eine neue, dritte Tabelle zwischen den beiden Tabellen.
Also:
regal_id als Fremdschlüssel regal_id_f in Tabelle tblBuch
verlag_id als Fremdschlüssel verlag_id_f in Tabelle tblBuch
leser_id als Fremdschlüssel leser_id_f in Tabelle tblLeser_Buch
buch_id als Fremdschlüssel buch_id_f in Tabelle tblLeser_Buch
Es stellt sich also heraus, dass Du neben den offensichtlichen Tabellen tblLeser, tblBuch, tblRegal und tblVerlag wegen der m:n-Beziehung zwischen Leser und Buch noch eine weitere Tabelle brauchst: tblLeser_Buch. Ich nenne diese Tabellen "Zwischentabellen", weil sie zwischen zwei Tabellen eingeschoben werden.
4. Schritt: Überlege Dir, ob Du bestimmte Mengen oder Zeiten speichern willst - schau Dir dazu Deine 3-Wort-Sätze noch einmal an:
Leser leihen Bücher (Zeit: "von wann bis wann?")
Bücher sind von Verlagen.
Bücher stehen in Regalen.
Weitere Beispiele
- Aufträge enthalten Artikel (Menge: "Wieviele?") )
- Patienten erhalten Medikamente (Menge: "Wieviel?", Zeit: "Wann?")
- Fahrer fahren LKWs (Zeit: "Wann?")
Diese Mengen und Zeiten gehören in die Zwischentabellen! Damit hat die Zwischentabelle tblLeser_Buch dann neben den beiden Fremdschlüsselspalten leser_id_f und buch_id_f noch die Spalten leserbuch_von und leserbuch_bis.
Fertig! Jetzt kannst Du Access starten, die Tabellen mit den dazugehörigen Spalten anlegen (Primärschlüssel als Autowert, Fremdschlüssel als Zahl / LongInteger) und schließlich per drag&drop die Beziehungen definieren ("Mit referentieller Integrität"!). Dann hast Du ein sauberes Datenmodell und bedeutend weniger Probleme beim Erstellen der Abfragen, Formulare und Berichte! Garantiert!
PS1: Man kann ja auch viel aus Beispielen lernen. Darum sieh Dir mal diese Webseite an: Database Answers!
PS2: Zur Gestaltung von Formularen habe ich auch ein Tutorial geschrieben:http://www.office-loesung.de/ftopic330767_0_0_asc.php
PS3: Ich habe ein Tool entwickelt ("ADaMo" = "A*'s Datenbank-Modellierer") das Dich bei der Entwicklung Deines Datenmodells unterstützt. Angemeldete Nutzer finden immer die aktuelle Version durch Click auf den WWW-Button links neben meinen Postings!
verschoben aus Tabellen und Abfragen jens05
_________________ 1. Gebot: Du sollst lange und gründlich über Dein Datenmodell nachdenken!
2. Gebot: Du sollst keine Formulare erstellen ohne gutes Datenmodell!
| Beschreibung: |
|
| Dateigröße: |
72.9 KB |
| Angeschaut: |
2005 mal |

|
| Beschreibung: |
| Beispieldatenbank (2003er Format) |
|
 Download |
| Dateiname: |
bibliothek_v02.zip |
| Dateigröße: |
17.7 KB |
| Heruntergeladen: |
118 mal |
Zuletzt bearbeitet von astern am 01. März 2010, 08:11, insgesamt 6-mal bearbeitet |
|
faßnacht(IT);
www.Office-Loesung.de Administrator

Verfasst am: 21. Jun 2009, 15:58 Rufname: Peter
Wohnort: Mainz-Kastel
|
|
| Version: (keine Angabe möglich) |
|
Hallo
vielen Dank Andreas für diese Anschauliche Einführung!
Zur Übersichtlichkeit finden die Diskussionen über die Anleitung zum Entwickeln von Datenmodellen in diesem Thema:
Diskussionen zu "Datenmodelle" von astern
Viele Grüße
Peter
PS:
Empfohlen sei auch ein Buch zum leichten aber fundierten Einstieg in Microsoft Access:
Andreas Stern
Keine Angst vor Microsoft Access
Microsoft Press, 2007
Viele Grüße
Peter
|
|
astern
Datenmodell-Missionar

Verfasst am: 20. Dez 2009, 18:02 Rufname: Andreas
Wohnort: Rastede
|
| |
| Version: (keine Angabe möglich) |
|
Hallo!
Ich möchte zu meinem Datenmodellierungstutorial noch folgendes ergänzen:
zum 2. Schritt:
Besonderheit: 1:1-Beziehungen
Es kann sein, dass Du bei der Formulierung Deiner Sätze auf so etwas stößt:
Zu EINEM Auftrag gehört EINE Rechnung.
Zu EINER Rechnung gehört EIN Auftrag.
Das würde bedeuten, dass zwischen Auftrag und Rechnung eine 1:1-Beziehung besteht. Überlege nochmal, ob die Sätze wirklich stimmen! Erstellt Ihr vielleicht Teilrechnungen ("Zu EINEM Auftrag gehören MEHRERE (Teil-)Rechnungen.") oder Sammelrechnungen ("Zu EINER Rechnung gehören MEHRERE Aufträge.")? Wenn nicht, dann brauchst Du nicht zwei Tabellen tblAuftrag und tblRechnung, sondern nur eine Tabelle tblAuftrag. Sie enthält dann neben Spalten wir auf_nummer und auf_datum noch Spalten wie auf_rechnummer und auf_rechdatum!
Besonderheit: Dreifach-Beziehungen
Es kann sein, dass Du bei der Formulierung Deiner Sätze auf so etwas stößt:
EIN Leser erhält für die Ausleihe EINES Buches EINE Mahnung.
Dieser Satz enthält die Namen von drei Objekten und Du kannst keines davon weglassen, ohne dass der Satz seinen Sinn verliert! Solche Sätze sind nicht leicht zu finden - aber sie sind u.U. ganz wichtig für Dein Datenmodell. Du solltest daher Deine "Zwei-Objekt-Sätze" immer nochmal unter dem Aspekt überprüfen: Gehört da evtl. noch ein drittes Objekt dazu, damit der Sachverhalt wirklich realistisch erfasst wird? "EIN Leser erhält EINE Mahnung." Ist das wirklich so? Nein! Er erhält eine Mahnung wegen der Ausleihe eines Buches!
Wie geht es weiter?
Bei einer Dreifach-Beziehung (z.B. Leser - Buch - Mahnung; s.o.!) bilden zunächst einmal zwei der drei Objekte eine "normale" m:n-Beziehung - also z.B.:
EIN Leser leiht MEHRERE Bücher aus.
EIN Buch wird von MEHREREN Lesern ausgeliehen.
Das ergibt also zunächst eine "normale" m:n- Beziehung zwischen Leser und Buch; folglich brauchen wir eine Zwischentabelle tblLeser_Buch (s. Abb. im oberen Posting!).
Wie hängt jetzt die Mahnung damit zusammen? Um das herauszufinden, solltest Du zunächst versuchen, den sperrigen Namen der Zwischentabelle "tblLeser_Buch" durch einen anderen, anschaulicheren Begriff zu ersetzen, sonst lassen sich damit schlecht Sätze bilden. In unserem Bibliotheksbeispiel bietet sich für "tblLeser_Buch" der Begriff "tblAusleihe" an!
Test:
Zu EINEM Leser gehören MEHRERE Ausleihen.
ZU EINER Ausleihe gehört EIN Leser.
Zu EINEM Buch gehören mehrere Ausleihen.
Zu EINER Ausleihe gehört EIN Buch.
Stimmt! Nun können wir über die Mahnung nachdenken. Wie hängt sie mit der Ausleihe zusammen?
Zu EINER Ausleihe gibt es MEHRERE Mahnungen (erste, zweite, dritte Mahnung)
Zu EINER Mahnung gehören MEHRERE Ausleihen.(denn beachte: Zu EINER Ausleihe gehört nur EIN Buch! Und wir können ja mehrere Bücher mit einer Mahnung mahnen!)
Also gibt es eine m:n-Beziehung zwischen Ausleihe und Mahnung! Also brauchen wir eine weitere Zwischentabelle "tblAus_Mahn"! Genau genommen ist das jetzt eine Zwischentabelle zwischen einer Tabelle (tblMahnung) und einer (ehemaligen) Zwischentabelle (tblLeser_Buch).
Aber es geht noch weiter!
Das Beispiel mit der Mahnung war besonders schwierig, weil die dritte Beziehung (von Ausleihe zu Mahnung) eine m:n-Beziehung war. Nehmen wir mal unrealistischerweise an, es würde zu jeder Ausleihe immer nur eine einzige Mahnung geschrieben. Wie gesagt - das ist unrealistisch. Aber ich will Dich, lieber Leser, nicht mit noch einem weiteren Beispiel verwirren. Es geht mir nur darum, das Prinzip darzustellen.
Also:
Zu EINER Ausleihe gehört EINE Mahnung.
Zu EINER Mahnung gehören MEHRERE Ausleihen.
Dann sieht das Datenmodell so aus, wie in dem zweiten Bild unten. Dort habe ich der Zwischentabelle wieder den "unhandlichen" Namen tblBuch_Leser_Mahn gegeben, um ihren Charakter als Zwischentabelle besonders zu betonen. Sie ist jetzt eine Zwischentabelle zwischen DREI Tabellen: tblBuch, tblLeser und tblMahnung. Folgerichtig enthält sie jetzt DREI Fremdschlüssel: buch_id_f, leser_id_f und mahn_id_f. Das ist völlig analog zu der "normalen" Zwischentabelle zwischen zwei anderen Tabellen, wie wir sie bereits kennen!
Mittlerweile wird das also richtig kompliziert. Es bleibt aber dabei: Du musst kurze, knappe Sätze nach dem Schema "Zu EINEM x gehört EIN bzw. gehören MEHRERE y" bilden und diese Sätze in Beziehungen zwischen Tabellen umsetzen.
Die schlechte Nachricht ist: Das ist nicht einfach!
Die gute Nachricht ist: Die von mir beschriebene Vorgehensweise führt Dich (ziemlich) sicher zum Ziel: Ein richtig gutes Datenmodell!!
MfG
A*
_________________ 1. Gebot: Du sollst lange und gründlich über Dein Datenmodell nachdenken!
2. Gebot: Du sollst keine Formulare erstellen ohne gutes Datenmodell!
| Beschreibung: |
|
| Dateigröße: |
91.43 KB |
| Angeschaut: |
1956 mal |

|
| Beschreibung: |
|
| Dateigröße: |
93.45 KB |
| Angeschaut: |
1940 mal |

|
| Beschreibung: |
| .mdb-Dateien v03 und v03a (2003er Format) |
|
 Download |
| Dateiname: |
bibliothek_v03.zip |
| Dateigröße: |
35.87 KB |
| Heruntergeladen: |
70 mal |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
| |

|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Access Hilfe: Beziehungen |
7 |
Neville |
107 |
10. Feb 2010, 18:55 KlausMz  |
 |
Access Tabellen & Abfragen: Tabellen vergleichen und abweichungen anzeigen |
17 |
Gast |
768 |
06. Aug 2009, 17:40 Bitsqueezer  |
 |
Access Tabellen & Abfragen: Ergebnis bei n:m Beziehungen |
7 |
steli |
108 |
10. Jul 2009, 14:01 DBKlempner  |
 |
Access Tabellen & Abfragen: 2 Tabellen vergleichen und doppelte Werte löschen |
2 |
Engelchen007 |
633 |
08. Mai 2009, 08:06 Engelchen007  |
 |
Access Tabellen & Abfragen: Tabellen in diversen Datenbanken löschen |
2 |
Domainhunter |
104 |
27. Okt 2008, 14:36 Domainhunter  |
 |
Access Tabellen & Abfragen: Zusammensetzen zweiter Tabellen + Filterung |
1 |
Gast |
107 |
02. Sep 2008, 21:05 maike kaluscha  |
 |
Access Tabellen & Abfragen: mehrere verknüpfte Tabellen aneinanderhängen |
6 |
swobby |
1342 |
30. Jan 2008, 17:38 swobby  |
 |
Access Tabellen & Abfragen: Abhaengige Tabellen auswerten |
5 |
SzP/TEF13 |
915 |
29. Jan 2008, 16:27 Stefffano  |
 |
Access Formulare: Im Acces Unterformular: Tabellen / Anzeige |
6 |
Ocor |
619 |
07. Nov 2007, 11:42 Ocor  |
 |
Access Formulare: Beziehungen zu Kombinationsfelder aufbauen |
0 |
Franky999 |
1024 |
13. Okt 2006, 17:29 Franky999  |
 |
Access Tabellen & Abfragen: Zwei Tabellen mit fast identischen Inhalten zusammenführen |
7 |
Habakuk |
2950 |
27. Aug 2006, 21:50 Habakuk  |
 |
Access Tabellen & Abfragen: gr. datenbänke verküpfen oder verbinden oder Beziehungen ??? |
10 |
kappaland |
408 |
15. Aug 2006, 17:58 jens05  |
| |
|