Мне интересно, каков лучший дизайн для таблицы пересечений для отношений «многие ко многим».
Два подхода, которые я рассматриваю:
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 )
)
или
CREATE TABLE SomeIntersection
(
TableAId UNIQUEIDENTIFIER REFERENCES TableA NOT NULL,
TableBId UNIQUEIDENTIFIER REFERENCES TableB NOT NULL,
PRIMARY KEY(TableAId, TableBId )
)
Есть ли преимущества одного над другим?
РЕДАКТИРОВАТЬ 2: **** Обратите внимание: Я планирую использовать Entity Framework для предоставления API для базы данных. Имея это в виду, одно решение работает лучше с EF, чем другое?
РЕДАКТИРОВАНИЕ: В связанной заметке для таблицы пересечений, в которой два столбца ссылаются на одну и ту же таблицу (пример ниже), есть ли способ сделать два поля в записи разными?
CREATE TABLE SomeIntersection
(
ParentRecord INT REFERENCES TableA NOT NULL,
ChildRecord INT REFERENCES TableA NOT NULL,
PRIMARY KEY(TableAId, TableBId )
)
Я хочу предотвратить следующее
ParentRecord ChildRecord
=================================
1 1 --Cyclical reference!