Camping_RIDER: unterschiedliche logisch Beziehungen in einer DB-Tabelle speichern

Beitrag lesen

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

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
# Twitter # Steam # YouTube # Self-Wiki # Selfcode: sh:) fo:) ch:| rl:) br:^ n4:? ie:% mo:| va:) js:) de:> zu:} fl:( ss:) ls:[