Verbindungstabelle mit Flag zur fachlichen Unterscheidung

slowfly

Erfahrenes Mitglied
Hallo zusammen

Wir machen hier bei uns gerade ein Datenbankmodell und haben hier zwei verschiedene Lösungen für unser "Problem". Mich interessiert, welche Variante die "bessere"/"schönere" ist.

Also, zu den ANforderungen:
Ein Benutzer kann einen Einkaufszettel pflegen.
Ein Benutzer kann einen Einkaufszettel für einen anderen Benutzer freigeben.

Ich habe dann mal die Tabellen Benutzer und Einkaufszettel erstellt.

Dann in der Tabelle Einkaufszettel einen Foreign Key "id_benutzer", welcher auf die id der Tabelle Benutzer referenziert.
Für den Share habe ich dann eine "Verbindungstabelle" (wie sagt man richtig?) gemacht, mit zwei Foreign Keys, von welchen der eine auf Benutzer geht und der andere auf Einkaufszettel.

So, meines Erachtens würde das ja prinzipiell funktionieren, jetzt wurde aber folgendes vorgeschlagen:
Man kann ja den Foreign Key in der Tabelle Einkaufszettel löschen und dafür in der Verbindungstabelle ein "Boolean"-Feld "Eigentümer" setzen.

Jetzt stellt sich die Frage, welche Varianten bieten welche Vor- und Nachteile?

Was mir einfällt ist, dass in der ersten Variante ganz einfach durch die FK's sichergestellt ist, dass ein Einkaufszettel immer einem Benutzer gehört. In der zweiten Variante muss durch wahrscheinlich irgendwelche Constraints (ich bin kein DBA, an dieser Stelle *g*) sichergestellt werden, dass in der Verbindungstabelle für ein "Schlüsselpärchen", also Benutzer und Einkaufszettel, immer genau ein Eintrag existiert, bei welchem dieses Boolean-Eigentümer-Feld auf true gesetzt ist...

Was meint ihr dazu?

Besten Dank und Gruss
slowy
 
Die erste Variente ist gut, wenn du ein Einkaufszettel für mehrere andere Benutzer machen kannst.
Wenn du aber pro Einkaufszettel nur ein Benutzer hast und der Einkaufszettel nicht weitergereicht (oder wenn, das historisiert werden muss), würde ich in der Einkaufszeittel-Tabelle 2 Felder machen.
- fk_id_creater
- fk_id_owner

Derjenige der den Zettel schreibt ist der creator. Derjenige der ihn aktiv hat ist der owner. Wenn man für sich selber einen schreibt, dann sind die beiden Felder gleich abgefüllt. So muss man sich nicht mit Flags undsoweiter herumschlagen.
 
Besten Dank für deine Antwort.

Also der Einkaufszettel "wird für mehrere Benutzer gemacht". Zur Erklärung: Zum Beispiel geh ich immer für meine Mutter einkaufen (gehen wir einfach mal aus, dass es so ist hehe). Dann macht die Mutter ihren Einkaufszettel am Morgen und gibt ihn mir frei. Ich kann dann bei der Arbeit dann Zettel anschauen und ändern (brauch ja noch Zigaretten), gleichzeitig kann sie ihn aber auch noch ändern, da sie vergessen hat, dass die Butter wieder mal alle ist.

Aber was ist mit der zweiten Variante? Technisch würden ja beide Varianten mit diesen Anforderungen funktionieren,...

Danke und Gruss
 
Zurück