Tôi tự hỏi thiết kế nào tốt hơn cho bảng giao lộ cho mối quan hệ nhiều-nhiều.Thiết kế Quan hệ Nhiều đến Nhiều - Thiết kế Bảng Giao nhau
Hai cách tiếp cận tôi đang xem xét là:
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)
)
hoặc
CREATE TABLE SomeIntersection
(
TableAId UNIQUEIDENTIFIER REFERENCES TableA NOT NULL,
TableBId UNIQUEIDENTIFIER REFERENCES TableB NOT NULL,
PRIMARY KEY(TableAId, TableBId)
)
Có lợi ích cho một trong khác không?
CHỈNH SỬA 2: **** Xin lưu ý: Tôi định sử dụng Entity Framework để cung cấp API cho cơ sở dữ liệu. Với ý nghĩ đó, liệu một giải pháp có hoạt động tốt hơn với EF so với cái kia không?
EDIT: Trên ghi chú liên quan, đối với bảng giao nhau mà hai cột tham chiếu cùng một bảng (ví dụ bên dưới), có cách nào để làm cho hai trường khác nhau trên bản ghi không?
CREATE TABLE SomeIntersection
(
ParentRecord INT REFERENCES TableA NOT NULL,
ChildRecord INT REFERENCES TableA NOT NULL,
PRIMARY KEY(TableAId, TableBId)
)
tôi muốn ngăn chặn những điều sau
ParentRecord ChildRecord
=================================
1 1 --Cyclical reference!
Để ngăn chặn ví dụ của bạn (được gọi là "tự tham khảo"), nó là đủ để thêm một hạn chế kiểm tra về mức độ TABLE " ALTER TABLE dbo.SomeIntersection ADD CONSTRAINT CHK_SomeIntersection_SelfRefNoNoNo CHECK (ParentRecord <> ChildRecord) " --- Nhưng bạn sẽ không giải quyết được trường hợp A-> B-> C-> A theo cách đơn giản này. – van
Tôi lo lắng về việc tự tham khảo nhiều hơn so với tham khảo, cảm ơn! –