2014-10-04 50 views
0

我很難弄清楚在創建數據庫結構時是否有辦法在SQL中實施隱式關係。在抽象的層面,我想類似下面的模式:在SQL中強制隱式關係

一個可以屬於一個或多個Workfield的,一個workfield可以有一個或多個子workfield的其中一個人也可以屬於。如果一個人屬於一個或多個子工作田,那麼他也必須屬於他們的父母工地。

有沒有辦法在SQL中強制執行這種關係,還是我需要在應用程序層中執行此操作?

回答

2

您可以在數據庫中執行此操作。一種方法是有四個表格:Person,Workfield,SubworkfieldPersonWorks

前三個是不言自明的。 Subworkfield表將具有列WorkfieldId,其將具有到Workfield的外鍵關係。列Subworkfield.SubworkfieldId將是主鍵,並且列對SubworkfieldId, WorkfieldId將被宣佈爲unique。後面的聲明是多餘的,但它對強制執行其中一個條件很有幫助。

Personworks表將有三個(相關)列:

  • PERSONID引用人(PERSONID)
  • WorkfieldId引用Workfield(WorkfieldId)
  • SubworkfieldId引用Subworkfield(SubworkfieldId)

每個人都會有建議的外國參考文獻。當參考僅爲Workfield時,則SubworkfieldId將爲NULL

此外,還會有更多的多了一個外鍵引用:

foreign key (WorkfieldId, SubworkfieldId) referenes SubworkfieldId(WorkfieldId, SubWorkfieldId) 

而且,對於完整性,您可以添加:

check (WorkfieldId is not null) 

這種結構充分利用了NULL值是如何處理爲外鍵引用。如果密鑰或複合密鑰的任何部分是NULL,則不檢查外鍵引用。因此,您可以參考Subworkfield表,並且僅在數據填充時使用。

+0

謝謝,明確的食物! – 2014-10-04 16:29:46