Database-Design
約束遞歸關係中的冗餘條目
考慮這個虛構的數據模型:
Dudes和Dudettes可以有一場比賽。我只希望一對夫婦匹配一次。
這看起來與表格類似:
Dud-ette id, name 1, Peter 2, Nadine 3, Hans 4, Elle 5, Zoe Match id1, id2, time 1, 5, 2022-09-01 2, 3, 2022-09-03 3, 2, 2022-09-03 4, 3, 2022-08-24
現在看看發生了什麼:在匹配表中,我們有兩次相同的關係,只是相反:(2,3) 和 (3,2)。我不能通過添加鍵或唯一約束來限制它,因為它會認為它是非冗餘的。冗餘將是 (2,3) 和 (2,3)。似乎在您進行遞歸設計時會發生這種情況,這意味著從實體到自身的關係。
我希望 (2,3) 被認為是 (3,2) 的冗餘,因此被禁止。是否有任何設計解決方案或 sql 關鍵字?
將匹配約束為 id1<id2,例如
alter table Match add constraint ck_StoreEachRelationOnce check (Id1 < Id2)