Database-Design

約束遞歸關係中的冗餘條目

  • September 3, 2022

考慮這個虛構的數據模型:

在此處輸入圖像描述

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 &lt; Id2)

引用自:https://dba.stackexchange.com/questions/316424