Aloha ;)
Zunächst: wenn du das vorstehende Geschwurbel nicht verstanden hast, denk dir nichts dabei. Manch Lösung eines genialen Geistes ist für solche wie uns einfach unverständlich.
etwa:
dabei ist "fürKurs" ein Fremdschlüssel der entweder auf die Kurstabelle verweist oder auf sich selbst.
fürKurs Bed1 verknüpfung bed2 KursK KursA oder 2 2 KursB und KursC Nun habe ich 2 Probleme die ich aktuell sehe:
A wie unterscheide ich, auf welche Tabelle sich der Fremdschlüssel bezieht, mal ganz davon abgesehen, wie kann ich eine Spalte auf 2 Tabellen referenzieren lassen
"Einfach" geht das nicht. Ich schlage daher einen leicht geänderten Ansatz vor:
ID | fürKurs | Element | verknüpfung | mit |
---|---|---|---|---|
0 | KursK | KursA | oder | 1 |
1 | KursK | KursB | und | 2 |
2 | KursK | KursC | oder | Null |
So ist an jeder Spalte klar, für welche Tabelle der Schlüssel gilt.
Hinweis: Ich ging jetzt mal davon aus, dass du die Angabe fürKurs an der Stelle zwingend brauchst. Es wäre im vorliegenden Datenmodell aber auch möglich, diese Spalte an der Stelle komplett rauszulassen und in einer weiteren Tabelle (zwei Spalten: fürKurs und startID) den Kurs mit dem ersten Bedingungsteil zu verknüpfen. Das hat Vorteile, unter anderem ist es Speicherplatz-effizienter und du kannst zusätzlich Eindeutigkeit bei fürKurs fordern.
B Mit diesem Entwurf kann ich sowas wie KursA UND (KursB ODER (KursC UND KursD) ODER KursE) nicht abbilden.
Doch, kannst du! Du musst die Bedingung nur gleichwertig umordnen:
KursA UND (KursB ODER (KursE ODER (KursC UND KursE)))
In deinem Beispiel war ein oder-oder drin. Das lässt sich in zwei hintereinander ausgeführte oders umschreiben. Das klappt für alle und- bzw. oder-Verknüpfungen, weil diese assoziativ und kommutativ sind.
Wie du die Eingabemöglichkeit gestaltest steht auf einem anderen Blatt, aber entweder muss deine Software vor dem Speichern umordnen oder (wahrscheinlicher) es stellt sich heraus, dass es für dich schon bei der Eingabe geschickt ist, ein solches Format zu fordern.
Ich hoffe die Idee hilft dir weiter.
Grüße,
RIDER