我想知道什麼是多對多關係的交集表更好的設計。多對多關係設計 - 交叉表設計
我正在考慮這兩種方法:
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:****請注意:我打算使用實體框架爲數據庫提供一個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!
爲了防止你的榜樣(這被稱爲「自我參照」),就足以在桌子上水平「增加一個檢查約束ALTER TABLE dbo.SomeIntersection ADD CONSTRAINT CHK_SomeIntersection_SelfRefNoNoNoNo CHECK(ParentRecord <> ChildRecord)「 ---但你不會以這種簡單的方式解決案例A-> B-> C-> A. – van 2009-06-11 18:14:00
我比較關心引用,更擔心自引用,謝謝! – 2009-06-11 18:22:19