我很難弄清楚在創建數據庫結構時是否有辦法在SQL中實施隱式關係。在抽象的層面,我想類似下面的模式:在SQL中強制隱式關係
一個人可以屬於一個或多個Workfield的,一個workfield可以有一個或多個子workfield的其中一個人也可以屬於。如果一個人屬於一個或多個子工作田,那麼他也必須屬於他們的父母工地。
有沒有辦法在SQL中強制執行這種關係,還是我需要在應用程序層中執行此操作?
我很難弄清楚在創建數據庫結構時是否有辦法在SQL中實施隱式關係。在抽象的層面,我想類似下面的模式:在SQL中強制隱式關係
一個人可以屬於一個或多個Workfield的,一個workfield可以有一個或多個子workfield的其中一個人也可以屬於。如果一個人屬於一個或多個子工作田,那麼他也必須屬於他們的父母工地。
有沒有辦法在SQL中強制執行這種關係,還是我需要在應用程序層中執行此操作?
您可以在數據庫中執行此操作。一種方法是有四個表格:Person
,Workfield
,Subworkfield
和PersonWorks
。
前三個是不言自明的。 Subworkfield
表將具有列WorkfieldId
,其將具有到Workfield
的外鍵關係。列Subworkfield.SubworkfieldId
將是主鍵,並且列對SubworkfieldId, WorkfieldId
將被宣佈爲unique
。後面的聲明是多餘的,但它對強制執行其中一個條件很有幫助。
的Personworks
表將有三個(相關)列:
每個人都會有建議的外國參考文獻。當參考僅爲Workfield
時,則SubworkfieldId
將爲NULL
。
此外,還會有更多的多了一個外鍵引用:
foreign key (WorkfieldId, SubworkfieldId) referenes SubworkfieldId(WorkfieldId, SubWorkfieldId)
而且,對於完整性,您可以添加:
check (WorkfieldId is not null)
這種結構充分利用了NULL
值是如何處理爲外鍵引用。如果密鑰或複合密鑰的任何部分是NULL
,則不檢查外鍵引用。因此,您可以參考Subworkfield
表,並且僅在數據填充時使用。
謝謝,明確的食物! – 2014-10-04 16:29:46