2009-11-25 6 views

Antwort

13

Vorteile:

  • Sie können ganz einfach
  • Adaptable Beziehungen unvorhergesehener Umstände
  • helfen Unterbringung etwas zu etwas verlinken
  • Sehr einfache Beziehungen
  • Groß für Systeme ad-hoc
zu implementieren

Nachteile:

  • Fremdschlüssel nicht praktisch
  • Indizes umfassen eine weitere Dimension der Komplexität
  • Beziehungen zwischen Tabellen schwer zu identifizieren, wenn STI mit
  • Database diagramming Tools nicht
  • nicht immer praktisch interpretieren kann für die Modelle verbinden
  • Stark entmutigt für Systeme, bei denen die Datenintegrität verifiziert werden muss

Ich bin ein großer Fan von Beziehungen dieser Art für Datensätze, die bei Bedarf an eine große Anzahl von Dingen angehängt werden, z. B. einen Kommentar oder einen Annotationsdatensatz, der für eine Vielzahl von Datensätzen gelten kann.

Es ist nicht sehr gut für Situationen geeignet, in denen die Beziehung häufig in einem JOIN ausgeübt wird. Das heißt, die polymorphe Assoziation sollte nicht in der Mitte einer Beziehung zwischen Datensätzen stehen, sondern als etwas auf dem Umfang.

+0

Können Sie näher ausführen, warum es nicht gut geeignet ist, um mitten in einer Beziehung zwischen Platten zu sein? Fremdschlüssel sind nicht praktikabel, aber die Integrität wird eher auf der Rails-Ebene als auf der DB behandelt, oder? – Turadg

+2

Wenn Sie eine polymorphe Assoziation in der Mitte verwenden, haben Sie mindestens drei Komponenten für Ihre Join-Bedingungen, vier, wenn beide Beziehungen polymorph sind. Dies kann sich stark nachteilig auf die Performance auswirken, da die Indexgröße mit der Anzahl der Elemente im betroffenen Schlüssel erheblich zunehmen kann. Größere Indizes werden beim Aktualisieren erheblich teurer. Daher ist es vorteilhaft, nur das erforderliche Minimum zu indizieren. Nehmen Sie sich wie immer Zeit, um eine vorgeschlagene Datenbankstruktur mit großen Datenmengen zu vergleichen, die repräsentativ für Ihr System sind. – tadman

+0

Sehr klare Antwort, danke. – Turadg