2015-08-20 49 views
0

我有一個存儲團隊成員的sql連接表。團隊和人員表格已經存在,team_members表格加入了這兩個表格。唯一限制表只允許每個唯一團隊使用liquibase一個真實值

團隊成員表還包含另一個布爾列team_lead,它代表給定團隊的領導者。每支球隊只能有一名領袖,令人震驚,我知道:)。

我想添加一個唯一的約束來確保每個團隊只有一個團隊領導。基本上我想確保team_id列的每個唯一值只有一行具有true值,可能存在於team_lead列中,但對於team_lead,任何數量的行可能都存在false。

我想添加第二個約束,該約束可以防止從team_member數據庫中刪除team_lead,在行可刪除之前,必須將team_lead值設置爲false。

它看起來像部分鍵可能是解決方案,但是,我真的不熟悉他們,我也不確定liquibase允許使用它們。我不期望完整的SQL,但有人可以幫助我瞭解我應該使用什麼工具以及爲什麼要執行此操作?

回答

1

不是向TeamMembers表中添加布爾值,而是將lead_team_member列添加到團隊表中,該列表將引用TeamMember記錄作爲領導者的成員。

不需要棘手的約束,並且您可以使用適當的外鍵來防止刪除團隊負責人的TeamMember記錄。

+0

這是一個很好的觀點,除了我不想修改現有的表,我們的代碼依賴於如果可能的話。我看到你的方法更有意義,但是由於缺乏更好的措辭,上述方法與你的建議相比有多「壞」?不想修改已經被使用的表,因爲修改現有的java代碼的開銷,我沒有在技術上擁有(但是如果必須的話,可以修改)足夠的理由不按照你所建議的方式去做? – dsollen

+1

我不認爲你會後悔有一個正確的數據模型,並且你現有的模型有寫在它上面的「技術債務」。 –