De nombreux de Nombreux Rapport de Conception - Table d'Intersection de la Conception

Je me demandais quoi de mieux qu'une conception est à l'intersection de la table pour un plusieurs-à-plusieurs relations.

Les deux approches que j'envisage sont:

CREATE TABLE SomeIntersection 
(
     IntersectionId UNIQUEIDENTIFIER PRIMARY KEY,
     TableAId UNIQUEIDENTIFIER REFERENCES TableA NOT NULL,
     TableBId UNIQUEIDENTIFIER REFERENCES TableB NOT NULL,
     CONSTRAINT IX_Intersection UNIQUE(TableAId, TableBId )
) 

ou

CREATE TABLE SomeIntersection 
(
     TableAId UNIQUEIDENTIFIER REFERENCES TableA NOT NULL,
     TableBId UNIQUEIDENTIFIER REFERENCES TableB NOT NULL,
     PRIMARY KEY(TableAId, TableBId )
) 

Sont là les avantages de l'un sur l'autre?

EDIT 2:****Veuillez Noter: j'ai l'intention d'utiliser Entity Framework pour fournir une API pour la base de données. Avec cela à l'esprit, n'est une solution mieux travailler avec EF que les autres?

EDIT: Sur une note connexe, pour une table d'intersection que les deux colonnes font référence à la même table (exemple ci-dessous), est-il un moyen de faire les deux champs différents sur un enregistrement?

CREATE TABLE SomeIntersection 
(
     ParentRecord INT REFERENCES TableA NOT NULL,
     ChildRecord INT REFERENCES TableA NOT NULL,
     PRIMARY KEY(TableAId, TableBId )
)

Je veux éviter le suivant

ParentRecord          ChildRecord
=================================
      1                    1         --Cyclical reference! 
  • Pour éviter que votre exemple (ce qui est appelé "l'Auto-référence"), il suffit d'ajouter une CONTRAINTE de VÉRIFICATION sur le niveau de la TABLE "ALTER TABLE dbo.SomeIntersection ADD CONSTRAINT CHK_SomeIntersection_SelfRefNoNono VÉRIFIER (ParentRecord <> ChildRecord)" --- Mais vous ne résoudra pas le cas A->B->C->d'Une manière aussi simple.
  • Je suis plus inquiet à propos de l'auto-références que ronde sur les références, merci!
InformationsquelleAutor Dan McClain | 2009-06-10