Frage

Ich habe Tabelle mit dem Namen 'Wörterbuch' mit Spalten wie folgt:

  • ID Bigint
  • TYPE varchar (200)
  • ITEM varchar (200)

Tabelle wird durch verschiedene Tabellen als einfaches Wörterbuch / Suche verwendet.
Zum Beispiel speichert es Länder, Titel, Listen Branche.

TYPE Spalte hält Informationen über Art Wörterbuch, ITEM ist Wörterbuch String-Wert.

Alle funktionieren gut, aber Ich habe Probleme Beziehung zwischen Wörterbuch einzurichten und foreigin Tabellen.
Wenn ich ‚Fremdschlüsselbeziehung‘ verwendet, kann ich es nicht von ‚TYPE“ Spalte machen abhing.

(Bitte beachten Sie gleiche Element mit den gleichen Typ - zB ‚Länder‘ können auf mehrere Tabellen verknüpft werden, wenn Artikel mit einer anderen Art auf unterschiedliche verknüpft werden)

Zur Zeit USPs Ich verwende das zu schaffen, aber ich möchte Standard Beziehung Mechanismus wechseln.
Jede Beratung, wie man das?

War es hilfreich?

Lösung

Es scheint mir, dass Sie eine alternative Konstruktion könnte in Erwägung ziehen

Dictionary table
ID (pk)
DICTIONARY_TYPE_ID (fk to dictionaryType) 
ITEM

DictionaryType table
ID (pk)
DESCRIPTION

und dann Links machen auf die ID DictionaryType Tabelle an Orten, wo Sie sich gerade verweisen möchten Typ von Ihrem ursprünglichen Entwurf

Andere Tipps

Aus dem Kontext der Frage, ich bin zu raten Sie eines von zwei Dingen tun müssen:

  • Machen Sie Ihre Type Spalte der Primärschlüssel
  • oder haben die Fremdschlüssel hängen von dem ID Feld hier.

Fremdschlüssel müssen einen Primärschlüssel beziehen, und es sieht aus wie Ihre Type Spalte kein PK ist.

, was Sie hier haben, ist ein EAV db Design, die für Reihe von Gründen schlecht ein, Ihr Problem zu sein. gibt es hierfür keine Lösung im eigentlichen Sinne. Sie könnten versuchen, sql_variant als Spaltentyp für das Element und versuchen, zu einer PK-FK-Beziehung auf, dass mit.

gibt es eine andere Art und Weise kann man versuchen, dies mit dem XML-Datentyp und Schemata zu tun, wie ich hier . aber Sie werden dies zu testen, um zu sehen, ob es für Ihr Problem gilt.

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