Viele-zu-Viele-Tabellen verknüpfen in grails (GORM) / hibernate
Ich Spiele umgebaut mit Grails und finde die ORM-Zeug mühsam, weil ich nicht ganz verstanden, was ich mache, wenn es um die domain-Klassen. Ich hoffe jemand kann mir wieder auf die Strecke
Betrachten Sie die folgenden
Test Job : Viele Hardware Verwendet, auf Job Viele:Eine Physischen Hardware
...dies ist Analog zu dem klassischen Order, OrderLine, Produkt-Szenario gesehen, in der Universität, DB-Beispiele
Habe ich die folgenden domain-Klassen
class Job
{
String jobName
String jobDescription
}
class HardwareOnJob
{
static hasMany = [ jobs:Job, physicalHardware:PhysicalHardware ]
static belongsTo = Job
String role
}
class PhysicalHardware
{
String assetName
String model
String os
}
Die Frage, die ich Fragen muss ist, warum nicht Grails erstellen, mir zwei extra Tabellen in meiner Datenbank, anstatt des link-entity - /domain-Klasse, die ich definiert haben. Zum Beispiel Grails erstellt hardware_on_job_job und hardware_on_job_physical_hardware in der Datenbank.
Mithilfe des eingerüstet Controller kann ich geben Sie einige hardware, geben Sie eine Aufgabe und geben Sie dann die Verknüpfung der beiden zusammen. Die Frage, die ich habe, ist, warum schafft es diese beiden zusätzlichen Tabellen anstatt der Verwendung des domain-Objekts (HardwareOnJob) habe ich angegeben.
Jede Hilfe/Beratung wird sehr geschätzt werden, wie Muttern zu betrachten, und neue Dinge ausprobieren. Btw ich bin auf grails-version 1.2.1
InformationsquelleAutor K2J | 2010-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf die
joinTable
keyword die:Hier ist das Beispiel aus dem Benutzerhandbuch:
InformationsquelleAutor Heinrich Filter
erwägen Sie die Verwendung einer ausdrücklichen Verein-Klasse/Tabelle. finden Sie die membership-Klasse in http://www.grails.org/Many-to-Many+Mapping+ohne+Hibernate+XML
ein Nebeneffekt ist Gerüst für die association-Klasse (wirst du nicht bekommen, diese ohne eine ausdrückliche Verein-Klasse).
InformationsquelleAutor Ray Tayek
Beim Einsatz einer für viele, oder viele für viele-Beziehungen grails erstellt eine join-Tabelle mit den ID ' s der Objekte in der Beziehung. Können Sie verhindern, indem Sie die join-Tabelle, indem Sie sagen grails zu verwenden, einen Fremdschlüssel in einer eins-zu-viele-Beziehung. Meines Wissens gibt es keine Möglichkeit zu vermeiden, mit der automatisch erstellten join-Tabelle in einer viele zu viele Beziehung. Weitere Informationen finden Sie in den Abschnitten 5.2.1.2 und 5.2.1.3 der diese sowie diese
InformationsquelleAutor Jared
Ok also nach dem Spiel habe ich mit der folgenden Struktur
Schaut das sinnvoll ist, um alle anderen? Die Struktur der Datenbank, die erstellt wurde, sieht eine Menge mehr freundlich und hat nur die drei Tabellen, die ich erwarte.
Daran interessiert zu hören, Völker Gedanken, wie ich komme aus einer relationalen hintergrund. Ich schaue mir das Objekt der Schöpfung als ein Mittel zu geben, eine klare db-design aus der Perspektive der Dienstweg zu berichten gegen.
Kommentare willkommen
Warum sind Sie unter Angabe der id-Spalten? Sie sollten entfernen Sie die Zuordnung der id-Spalte komplett.
Wenn Ihr mir sagen könnt, warum ich das tun sollte, es würde helfen, mein Verständnis, wie gesagt ich bin neu in grails. Viele Entwickler völlig außer acht lassen die Datenbank und behandeln es als etwas stummes storage-Schicht. Berücksichtigen, wenn die Anwendung live und Daten anreichert. Ich möchte eine nette und verständliche Datenbank-design, dass ich Berichte schreiben gegen leicht. Der Grund für die link-Tabelle ist, die ich speichern möchten, die ein Element, wie eine Menge von inline mit den Feldern, die Verknüpfung der Tabellen zusammen. Eine Bestellung Zeile die Rechnung. Hoffe, dass alles macht Sinn.
InformationsquelleAutor K2J
Kurz, wenn das Kind hat genau einen Parent, dann in Übergeordneten, setzen Sie
und Kind, Sie setzen
(oder wenn Sie nicht möchten, cascading, denke ich, nur Hinzugefügt, "Parent parent" ausreichen würde, aber dies ist ein seltener Fall, Schätze ich)
Dies schafft eine bidirektionale Beziehung, die in einer untergeordneten Domäne-Objekt können Sie den Zugriff auf die parent-Objekt über die Eigenschaft, und in einem übergeordneten Objekt haben Sie die Kinder-Kollektion.
Normalerweise erstellen Sie eine Spalte, in der Kinder, halten Sie die id für seine Eltern. Dies kann nicht der Fall für viele, zu viele, als eine Art link-Tabelle erforderlich sein wird (und GORM kann damit umgehen). So genannten "one-sided" - Beziehungen (wie in deinem ersten Beispiel) können auch erstellen, Tabellen verknüpfen, in dem erklärt wird, dass ein bisschen von diesem:
http://grails.1312388.n4.nabble.com/Many-to-many-vs-Many-to-one-td1369336.html
InformationsquelleAutor user606153