10.4.2002
Vergleicht man mal eine Rechnung für einen Kunden (wie sie überall vorkommen kann...) und deren Artikel, dann stellt man folgendes fest:
- Eine Rechnung enthält viele Artikel
- ein Artikel kann aber ebensogut in mehreren Rechnungen enthalten sein.
- Ein Kunde kann mehrere Rechnungen bekommen,
- aber eine Rechnung bezieht sich nur auf einen einzelnen Kunden.
Zwischen Rechnungen und deren Artikeln besteht einen n:m-Beziehung, zwischen Rechnungen und deren Kunden besteht aber nur eine 1:n-Beziehung.
n:m-Beziehungen muss man, wie wir gelernt haben, in 1:n-Beziehungen auflösen.
In einer Kundentabelle werden u.a. folgende Daten beinhaltet:
| Kunden |
| KNR |
| Firma |
| Strasse |
| Ort |
| ... |
Die Dateneingabeseite der Kundentabelle könnte so aussehen:
| KNR |
Firma |
Ort |
| 1 |
Stromberg |
Hamburg |
| 2 |
Müller |
Bremen |
| 3 |
Schulz |
Hamburg |
In der Rechnungstabelle werden folgende Daten stehen:
| Rechnungen |
| RNR |
| RKNR |
| RDatum |
| ... |
Ich werde jetzt nicht alle Rechnungen der jew. Kunden auflisten, aber es sind für jeden Kunden eine... :-)
Zwischen der Kundennummer der Kundentabelle (KNR) und der Rechnungskundennummer (RKNR) besteht eine 1:n-Beziehung.
In der Artikeltabelle stehen folgende Daten:
| Artikel |
| ANR |
| AName |
| APreis |
| ... |
Wir entwickeln eine Positionen-Tabelle, um die n:m-Beziehung aufzulösen:
| Positionen |
| RNR |
| ANR |
| Anzahl |
| ... |
Jetzt sind die Schlüssel der Rechnungstabelle und der Artikeltabelle in der Positionentabelle als Fremdschlüssel gespeichert.
Man kann mit der Positionentabelle jetzt folgendes feststellen:
- eine Rechnung enthält mehrere Positionen
- eine Position bezieht sich auf genau eine Rechnung
- ein Artikel kann in mehreren Positionen vorkommen
- eine Position enthält genau einen artikel
Zwischen Rechnungen und Positionen besteht eine 1:n-Beziehung, ebenso zwischen Artikel und Positionen.
Schlüsselarten
Es gibt Primärschlüssel (primarykey, PK), Fremdschlüssel (Foreignkey, FK), Schlüsselkandidaten (Candidatekey), Alternativschlüssel (alternativkey), Ersatzschlüssel (surrogatekey) und Sekundärschlüssel (secondarykey).