Ich würde gerne das „Nested-Set-Modell“ verwenden, muss aber eine GUID als Primärschlüssel haben.Wie komme ich ohne Ganzzahlen als pk aus?
-
20-08-2019 - |
Frage
Ich bin nicht bewusst Wie tief wird mein Baum sein.Ich denke also, dass das NSM für mich geeignet ist, wenn ich einige Dokumente lese.In SQL geht dieses Modell davon aus, dass ich einen ganzzahligen Wert als Primärschlüssel verwende.Ich dachte daran, eine Zwillingstabelle zu erstellen, nur um die Ganzzahlen (PK, links, rechts) zu speichern, die durch eine Eins-zu-eins-Beziehung mit der realen Tabelle verbunden sind.Die Dinge werden komplizierter und es ist eine Verschwendung von Speicherplatz, insbesondere wenn der Server nicht mir gehört und ich jedes Megabyte bezahlen muss.Helfen!!
AKTUALISIEREN
Exzellent!Fabelhaft!!Danke, Macka und Bill, ich könnte mir vorerst die Lektüre eines ganzen Buches ersparen.Celko ist eine zukünftige Bestellung bei Amazon.;-)
Lösung
Es spielt keine Rolle, um welchen Typ es sich bei Ihrem Primärschlüssel handelt, da die linken/rechten Werte immer noch ganze Zahlen sind.z.B.
CREATE TABLE [dbo].[Demo](
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_Demo_ID] DEFAULT (newid()),
[Name] [varchar](50) NOT NULL,
[Lft] [int] NOT NULL,
[Rgt] [int] NOT NULL,
CONSTRAINT [PK_Demo] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
- Fügen Sie einige Testdaten hinzu
INSERT INTO demo(name,lft,rgt)
SELECT 'node1',1,6
UNION
SELECT 'node2a',2,3
UNION
SELECT 'node2b',4,5
- Überprüfen Sie, ob es funktioniert
SELECT *
FROM demo
WHERE lft>=2
ORDER BY lft
Andere Tipps
Als @macca schreibt, Die linken und rechten Werte sind keine Fremdschlüssel für Baumknoten, daher müssen sie nicht der gleiche Typ sein. Sie können Ganzzahlen sein, während der Baumknoten -Primärschlüssel eine GUID ist.
Celko schrieb auch "Bäume und Hierarchien in SQL für Smarties"Das detaillierter über das verschachtelte Set -Modell und andere Lösungen. Wenn Sie dieses Buch lesen, sparen Sie viel Zeit und viele Fehler.
Es gibt andere Lösungen zum Speichern hierarchischer Daten in einer Datenbank. Siehe meine Antwort hier:Was ist der effizienteste/eleganteste Weg, um einen flachen Tisch in einen Baum zu analysieren?