Wie erstelle ich einen (Typ, ID) (auch bekannt als 'polymorph')- Fremdschlüsselspalte im MS-Zugriff?

StackOverflow https://stackoverflow.com/questions/154209

  •  03-07-2019
  •  | 
  •  

Frage

In Ruby-on-Rails wird dies als "polymorphe Assoziation" bezeichnet.

Ich habe mehrere Commentable Dinge in meiner Bewerbung sind die Tabellen für jeden unten:

Post
id | title | text | author (FK:Person.id) | ...

Person
id | name | ...

Photo
id | title | owner (FK:Person.id) | path | ...

Ich möchte eine hinzufügen Comments Tabelle wie folgt:

Comments
id | commentable_type | commentable_id | text | author (FK:Person.id)

Ich verstehe, dass ich die referenzielle Integrität der Datenbank auf diese Weise verliere, aber die einzige andere Option ist, mehrere zu haben Comments Tische: PostComments, PersonComments, PhotoComments, ...

Und jetzt für die Frage:

Wie kann ich ein Formular erstellen, das grokiert, wie man die Lookup durchführt, indem ich den Tabellennamen aus bekomme? Comments.commentable_type und dann die ID von Comments.commentable_id?

War es hilfreich?

Lösung

Diese Technik ist in der SQL -Welt umgangssprachlich als "Subklasse" bekannt. Für ein bearbeitetes Beispiel (SQL Server -Syntax ist jedoch leicht für MS -Zugriff angepasst) siehe David Portas Blog..

In Ihrem Szenario befinden sich die Datenelemente, die allen Kommentaren gemeinsam sind, in Ihrer Kommentartabelle. Alles, was für jeden Typ spezifisch ist, wäre in spezialisierten Tabellen wie Photocomments usw. Beachten Sie, dass die FK die zweispaltige Verbindung des ID plus der Typ sein sollte, das oft übersehen wird, aber für die Referenzintegrität hier, z. B. Sie nicht Ich möchte, dass etwas als Fotokommentar in der Tabelle der Personaltringe angezeigt wird.

Andere Tipps

Ich glaube, viele Menschen machen Meta-Tabellen für so etwas. Ziemlich genau so, wie du es beschrieben hast.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top