2017-02-22 87 views
0

在我的數據庫中,我有兩個表。 第一個表格包含商店打開的日期。 第二張表包含顧客進入商店的日期。SQL約束多表

我需要一個約束來確保客戶在店鋪打開後總是進店。 我怎樣才能實現這個約束 觸發器/約束/存儲過程?

+1

當商店打開並且人員進入時添加觸發器以交叉引用。 – Snowlockk

+0

SQL Server是否支持帶有檢查選項的視圖?可以在這裏使用。 – jarlh

回答

1

如果您很樂意稍微更改表格的結構,則可以使數據庫系統強制實施該約束。您爲您的商店表添加一個附加密鑰,其中包含現有密鑰的列+商店開放日期。

然後,您可以將商店開放日期作爲額外列添加到客戶表中,然後替換現有外鍵或添加引用上述新密鑰的新外鍵,以便您知道存儲的商店開放日期在這張表中忠實地反映了商店表中的實際價值。

然後,簡單檢查約束可以比較客戶表中的兩列值。

如果您希望從現有/外部代碼中隱藏此額外列的存在,您可以重命名客戶表,然後生成客戶視圖,而不需要商店開放日期。所有你需要的是一個INSTEAD OF INSERT觸發器來填充插入新客戶時的開店日期。


(如果你選擇保留現有的結構,正是因爲它目前是,記住,你需要至少觸發在客戶表在店內的更新觸發插入和更新表,所以如果商店開放日期稍後改變,則不會以無效數據結束)