Merke: was in SQL "gefühlt" nicht in eine Tabelle gehört, das gehört auch meist tatsächlich nicht in die Tabelle. Das ist natürlich nicht exakt, aber zumindest eine gewisse "Gedächtnisstütze":
- Hat eine Person "Beginn" und "Ende"?
- Soweit es über deren Geburt und Tod hinausgeht: nein.
Da man in SQL Relationen nur zweidimensional verknüpfen kann ( A x B ) eine
n x m
Relation aber dreidimensional ist, braucht man immer eine Zwischentabelle. Und muß drauf achten, welcher PK und welcher FK wohin kommt.
Die brauchen ein bißchen Abstraktionsvermögen um zu kapieren was da rein kommt. In allen Fällen ist die Struktur aber grundsätzlich dieselbe:
SQL:
CREATE TABLE table_A
(
id int NOT NULL PRIMARY KEY
-- ....
)
CREATE TABLE table_B
(
id int NOT NULL PRIMARY KEY
)
CREATE TABLE intermediate_table
(
id_a int NOT NULL REFERENCES table_A(id),
id_b int NOT NULL REFERENCES table_B(id)
PRIMARY KEY(id_a, id_b)
)
sodaß:
1. Weder Table_A noch Table_B referenzieren einander (die haben exakt nichts miteinander zu tun im Sinne von SQL)
2. der PK der Zwischentabelle ist notwendigerweise zusammengesetzt aus mindestens zwei PK Spalten der "teilnehmenden" Tabellen
3. je nach Situation können das auch mehr als zwei teilnehmende Tabellen sein, je nachdem wieviele Aspekte eine solche Verknüpfung berücksichtigen muß.
4. Weitere Spalten in diese Relation beschreiben die Eigenschaften
der Verknüpfung.
Das wird in diesem Fall wichtig. Weder der Arbeitgeber noch der Arbeitnehmer "beginnt" oder "endet" irgendwann, sondern die Beziehung zwischen den beiden tut dies. Entsprechend wandern
beginn
und
ende
in die Zwischentabelle.
Ebenso wenn weitere Anforderungen an die Verknüpfung gestellt werden müßten oder weil es keine Zeit*räume* sondern Zeit*fenster* geben würde.
Dann kommen nicht beginn und ende in die Zwischentabelle, sondern in eine Tabelle Zeitfenster und deren PK wird zusätzlich in den PK der Zwischentabelle eingetragen werden (als zusätzliche Dimension dort).
Sind die PK einer teilnehmenden Tabelle schon zusammengesetzt, müssen auch alle Spalten dieses PK mitgenommen werden. Weswegen ein einteiliger PK den mehrteiligen vorzuziehen ist, wo möglich.