Мне интересно, какой лучший дизайн для таблицы пересечений для отношения "многие ко многим".
Два подхода, которые я рассматриваю, следующие:
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 )
)
Есть ли преимущества для одного над другим?
EDIT 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!