Lana: Nachtrag: m:n bei mehreren Tabellen

Beitrag lesen

Hi!

»» meine Frage ist, ob das auch mit nur einer notiz-Tabelle lösbar ist; falls ja, wie müssten dann die Beziehungen gesetzt werden?

wenn ich den design richgit interpretiere, dann ist es so nicht möglich, dass ein kunde (für geschäfte und räume ist es analog) mehrere notizen haben kann, da du den fremdschlüssel in die tabelle kunde gepackt hast. es müsste eigentlich genau umgekehrt sein, dass der fremdschlüssel der kunden in der tabelle notizen erzeugt wird. das wäre dann eine 1:n beziehung zwischen den kunden und den Notizen.

mir ist da beim Schreiben/Zeichnen ein Fehler passiert.

so sollte es jetzt richtig sein
+------------+   +--------------+   +--------------+
| k_notiz    |   | g_notiz      |   | r_notiz      |
+------------+   +--------------+   +--------------+
| id         |   | id           |   | id           |
+------------+   +--------------+   +--------------+
| kunde_id   |   | geschaeft_id |   | raum_id      |
+------------+   +--------------+   +--------------+
       |                |                  |
+------------+   +--------------+   +--------------+
| kunde      |   | geschaeft    |   | raum         |
+------------+   +--------------+   +--------------+
|            |   |              |   | id           |
+------------+   +--------------+   +--------------+
|            |   | id           |---| geschaeft_id |
+------------+   +--------------+   +--------------+
| id         |---| kunde_id     |   |              |
+------------+   +--------------+   +--------------+

in deinem vorherigen beiträgen sprichst du sogar eine n:m beziehung an. aber ich kann in deinem falle nicht sehen, warum du das brauchen solltest. letztlich willst du ja, dass ein und dieselbe notiz nicht mehreren kunden gehört, sondern nur zu genau einen. oder habe ich das falsch aufgefasst ?

ja, eine Notiz soll nur für ein Kunden/etc. zulässig sein, ich schaffe mit dadurch evtl. Redundanzen, das sollte aber vertretbar sein, oder?

was deine andere frage betrifft, ob man nicht eine notiz-tabelle für alle drei entitäten kunde/geschäft/raum machen kann, das geht ein wenig in die objektorientierung rein. gibt dazu schon etliche versuche, das mit rdbms zu kombinieren. ich persönlich halte davon nicht allzuviel, aber das ist ansichtssache. man könnte natürlich eine tabelle draus machen und alle drei fremdschlüssel darin abbilden. je nachdem um welchen notiz es sich handelt, wird eben einer der drei fremdschlüssel besetzt. aber ich halte das für nicht optimal.

mein leitsatz zu dem thema daten-design ist, was gleich aussieht, muss nicht gleich sein. auch wenn die drei notiztabellen sehr gleich aufgebaut sind, musst du dir überlegen, ob du sie auf irgendeine weise miteinander verbinden willst. das würde bedeuten, willst du eine veränderung für die notizen der kunden vornehmen, dann musst du es für alle drei machen, zum beispiel wenn du eine zusätzliche spalte brauchst. also der ansatz mit den drei notiztabellen ist schon ok.

Wie müßte man die Beziehungen bei der Datenbank erstellen? Die Spalte, die die Fremd-ID aufnehmen würde, würde ja die ID entweder aus Tabelle 1, Tabelle 2 oder Tabelle 3 speichern.

PostgreSQL soll ja ein objektrelationales Datenbankmanagementsystem (ORDBMS) sein.
Wie ist das zu verstehen? Kann man dort in ein Schemata eine Tabelle um bestimmte Zeilen erweitern?

Lana