Frage

Ich versuche, eine Baum-Beziehung in einer Tabelle zu modellieren. Zum Beispiel gibt es „Kategorien“ und Kategorien können sich innerhalb einer übergeordneten Kategorie sein.

Ihr Schema ist:

id int PRIMARY KEY,
parent_id int,
name

Meine Frage ist, sollte ich die parent_id Spalte als Fremdschlüssel kennzeichnen? Foreign bedeutet „außen“ und nicht sich selbst verweis. Gibt es eine andere Art von Schlüssel für diesen Zweck?

Meine Frage ist ähnlich: Selbstbezugsbeschränkung in MS SQL , aber ich bin eine andere Frage zu stellen , Cascading ein Problem nicht zu sein.

War es hilfreich?

Lösung

sich selbst verweisende Fremdschlüssel passieren die ganze Zeit. Z.B. Mitarbeiter könnten eine anderen „Mitarbeiter“, wie sein Manager haben, so dass der manager_id wird ein Fremdschlüssel für das employee_id Feld in derselben Tabelle.

Fremdschlüssel sind der natürliche Kandidat für die Darstellung des übergeordneten Knoten in hierarchischen Daten, obwohl sie ausschließlich für die nicht verwendet:)

Andere Tipps

Wenn Sie sehr tief Verschachtelungsebenen es nicht einfach sein kann performant auf alle Nachkommen eines bestimmten Knotens wählen aus, da die meisten der DB nicht Rekursion Griff sehr gut. Ein weiterer Ansatz ist zu verwenden, was die „Nested Sets“ genannt wird, die Beziehungen zu repräsentieren. Ein großer Artikel finden Sie hier:

http://www.intelligententerprise.com/001020/celko.jhtml

Ein Fremdschlüssel zwischen zwei Spalten in derselben Tabelle häufig verwendet, wenn Baum Mapping Strukturen auf relationale Datenbanken. Es ist jedoch nicht der einzige Ansatz verfügbar.

Lesen Sie diesen Artikel für alternative reperesentations: speichern hierarchische Daten in einer Datenbank

Ich glaube nicht, dass es eine andere Art von Schlüssel ist ... ein Fremdschlüssel in diesem Szenario wäre in Ordnung .. es wäre die Beschränkung gegen die parent_id erzwingen, um sicherzustellen, dass es eine gültige ID verweist

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