Hallo ???,
auf den ersten Blick, und ohne das in der Tiefe betrachtet zu haben, fällt mir folgendes auf:
- beide Modelle sind sehr verwirrend abgebildet. Ich weiß nicht ob du über entsprechende Tools verfügst, aber da gibt es auch einiges im Internet, um Datenbankmodelle übersichtlich abzubilden.
- Bei deinem Telefonbuch ist mir aufgefallen, dass du Dinge unnötigerweise doppelt abbildest - z.B. Group. Versuche solche Kategorisierungen abstrakter abzubilden und durch eine zusätzliche Tabelle zu konkretisieren. Auf jeden Fall ist das eine 1:n Beziehung.
- Es mag ganz nett sein, HABTM als Begriff zu verwenden, aber ich würde mich (applikationsunabhängig) an die allgemeinübliche Beschreibung halten (1:1, 1:n, n:m).
- Überlege dir, was jeweils im Mittelpunkt steht. Mittelpunkte können durch Foreign-Keys verbunden werden (denke nicht zu cake-mässig).
Beispiel:
Mittelpunkt: Artikel
hat 1:n Konditionssätze (Preise)
hat 1:n Artikeltexte (Textart, Sprache)
(Mittelpunkt)Auftrag hat 1:n Positionen - Artikel(foreign Key)
Auftrag steht in Beziehung zur Rechnung (1:n - Fakturaplan (Teilzahlung))
Auftrag hat n Partner (Auftraggeber, Warenempfänger, Rechnungsempfänger, Regulierer, Vertriebsbeauftragter, Provisionsempfänger,...)
Wie ich das sehe, steckt das Modell noch sehr in den Anfängen
Mich wundert es sowieso, dass viele sich auf ein Schlüsselfeld in einer Tabelle beschränken. Es ist alles eine Frage der Definition. Professionelle Datenbanken (Oracle, MS-SQL, Interbase) unterstützen von Haus aus verknüpfte Schlüssel.
Denke nur mal du hast eine Tabelle Texte in denen du die Einträge mehrsprachig abbildest. Der Schlüssel (um am oberen Beispiel zu bleiben) könnte sein: Artikelnummer, Text-ID (damit meine ich nicht eine Zahl), Sprache. Nur mit diesem Schlüssel darf es keine doppelten Einträge geben.
Sorry, wenn das kleinkariert scheint. Aber ich komme aus der SAP-Welt. SAP hat mehr als 15.000 Tabellen und da ist kaum etwas überflüssig doppelt gemoppelt.
Ciao Thomas