Me pregunto qué es un mejor diseño para la tabla de intersección para una relación de muchos a muchos.Diseño de relación de muchos a muchos - Intersection Table Design
Los dos enfoques que estoy considerando son:
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)
)
o
CREATE TABLE SomeIntersection
(
TableAId UNIQUEIDENTIFIER REFERENCES TableA NOT NULL,
TableBId UNIQUEIDENTIFIER REFERENCES TableB NOT NULL,
PRIMARY KEY(TableAId, TableBId)
)
¿Hay beneficios a uno sobre el otro?
EDIT 2: **** Tenga en cuenta: Planeo usar Entity Framework para proporcionar una API para la base de datos. Con eso en mente, ¿una solución funciona mejor con EF que la otra?
EDIT: En una nota relacionada, para una tabla de intersección que las dos columnas hacen referencia a la misma tabla (ejemplo abajo), ¿hay una manera de hacer que los dos campos se diferencian en un disco?
CREATE TABLE SomeIntersection
(
ParentRecord INT REFERENCES TableA NOT NULL,
ChildRecord INT REFERENCES TableA NOT NULL,
PRIMARY KEY(TableAId, TableBId)
)
Quiero evitar que el siguiente
ParentRecord ChildRecord
=================================
1 1 --Cyclical reference!
Para evitar que su ejemplo (que se llama "auto-referencia"), es suficiente para añadir una restricción CHECK en el nivel de tabla " ALTER TABLE dbo.SomethingIntersection ADD CONSTRAINT CHK_SomeIntersection_SelfRefNoNoNo CHECK (ParentRecord <> ChildRecord) " --- Pero no resolverá el caso A-> B-> C-> A de esta manera simple. – van
Me preocupan más las referencias propias que las referencias redondas, ¡gracias! –