Je voudrais utiliser le «modèle de jeu imbriqué», mais je suis obligé d'avoir un GUID comme clé primaire. Comment puis-je faire sans les entiers comme PK?

StackOverflow https://stackoverflow.com/questions/662697

Question

je ne suis pas au courant Quelle sera la profondeur de mon arbre. Je pense donc que le NSM est apte à moi, en lisant certains documents. Dans SQL, ce modèle supposait que j'utilise une valeur entière comme clé primaire. J'ai pensé créer une table jumelle uniquement pour stocker les INTS (PK, gauche, droite) connectés par une relation un à un avec la vraie table. Les choses sont compliquées et c'est un gaspillage de disque d'espace, surtout lorsque le serveur n'est pas à moi et que je dois payer chaque mégaoctet. Aider!!

METTRE À JOUR

Excellent! Fabolous !! Merci Macka et Bill, je pourrais sauter en lisant un livre entier pour l'instant. Celko est une commande future sur Amazon. ;-)

Était-ce utile?

La solution

Peu importe le type que votre clé principale est car les valeurs gauche / droite seront toujours des entiers. par exemple.

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]

- Add quelques données de test

INSERT INTO demo(name,lft,rgt)
SELECT 'node1',1,6
UNION
SELECT 'node2a',2,3
UNION
SELECT 'node2b',4,5

- Vérifiez que cela fonctionne

SELECT *
FROM demo
WHERE lft>=2
ORDER BY lft

Autres conseils

Comme @macka écrit, les valeurs gauche et droite ne sont pas des clés étrangères aux nœuds d'arbre, ils n'ont donc pas à être le même type. Ils peuvent être des entiers tandis que la clé primaire du nœud d'arbre est un GUID.

Celko a également écrit "Arbres et hiérarchies en SQL pour les smart"Ce qui va plus en détail sur le modèle d'ensemble imbriqué et d'autres solutions. La lecture de ce livre vous fera gagner beaucoup de temps et beaucoup d'erreurs.

Il existe d'autres solutions pour stocker les données hiérarchiques dans une base de données. Voir ma réponse ici:Quel est le moyen le plus efficace / élégant pour analyser une table plate dans un arbre?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top