Frage

Ich versuche, einen Baum wie Struktur zu implementieren, ein materialisierte Pfadmodell hier beschrieben ist: http://www.dbazine.com/oracle/or-articles/tropashko4 .

Ist es möglich, die referenzielle Integrität auf dem [Pfad] Feld zu erzwingen? Ich sehe nicht, wie SQL könnte es tun, muss ich es tun manuell in der DAL?

War es hilfreich?

Lösung

Ja, müssen Sie die Datenintegrität selbst in der DAL erzwingen, wenn Sie entweder materialisierten Pfad verwenden oder Nested Sets Lösungen für hierarchische Daten.

Adjazenzliste unterstützt referentielle Integrität, und dies gilt auch für einen Entwurf, den ich nennen „ Closure Tabelle " (Tropashko nennt diese Konstruktion "transitive Hülle Beziehung").

Andere Tipps

„materialisierten Pfad“, wie von Vadim Tropashko in diesem Artikel dargestellt, führt den Begriff der Ordnung in eine Beziehung ( „Jones ist das zweite Element“.).

„materialisierten Pfad“ ist nichts anderes als „eine Form der materialisierten Ansicht“ auf der transitiven Hülle, und deshalb leidet alle und genau die gleichen Probleme wie jeder anderen „materialisierte Ansicht“, mit der Ausnahme, daß die Dinge sind algorithmisch schlechter gerade wegen der Beteiligung ein Verschluss.

SQL ist fast völlig machtlos, wenn Constraints-on-a-Verschluss sind im Spiel. (Bedeutung: ja, SQL erfordert, dass Sie alles selbst zu tun.) Es ist einer jener Bereiche, in denen der RM das Maximum seiner fast unbegrenzten Macht zeigt, aber SQL nicht bodenlos, und wo es ist eine Schande, dass die Mehrheit der Menschen Fehler SQL für seine relational.

(@ Bill Karwin. Ich möchte in der Lage sein, das Sie auf der Beziehung zwischen der Tiefe der Bäume und das Ergebnis auf die Leistung +1 für Ihre Anmerkungen zu geben, Es gibt keine bekannten Algorithmen Schließungen zu berechnen, die eine gute Leistung in der Fall der Bäume mit „verrückten“ Tiefen. Es ist ein algorithmisches Problem, nicht ein SQL noch ein relationaler ein.)

EDIT

Ja, RM = Relationale Modell

Im materialisierte Pfadmodell können Sie beliebige Zeichenfolge verwenden (vielleicht Unicode-Strings mehr als 256 Kinder zu ermöglichen) anstelle von Spezialketten Form „x.y.z“. Die ID der Eltern ist dann die ID der direkten Kinder mit dem letzten Zeichen entfernt . Sie können diese einfach mit einer Check-Einschränkung erzwingen wie (mein Beispiel in PostgreSQL arbeitet)

check(parent_id = substring(id from 1 for char_length(id)-1)),

in Ihrem Tabellenbefehl erstellen. Wenn Sie auf Saiten Form „x.y.z“ bestehen, müssen Sie mit regulären Ausdrücken spielen, um, aber ich würde denke, es ist möglich, eine entsprechende Check-Einschränkung zu finden.

Ja, wir können „erzwingen referenzielle Integrität auf dem [Pfad] Feld“. Das habe ich vor ein paar Jahren hier beschrieben:

Speichern Sie Ihre Konfigurationseinstellungen als eine Hierarchie in einer Datenbank

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