2015-05-21 24 views
1

我有各種類型的任務。每種任務類型都有一組給定的屬性。創建任務並分配屬性的值。具有多個外鍵的表可能會失效

的數據庫設計的過程是:

任務類型(pk_taskType,名)

TaskTypeProperty(pk_taskTypeProperty,fk_taskType,名)

任務(pk_task,fk_taskType,名)

TaskProperty(pk_taskProperty, fk_task,fk_taskTypeProperty,值)

enter image description here

一切正常,但給定一個任務,一個可以改變任務類型的參考和不改變性質的潛力。這是無效的,但數據庫仍然很高興。

有更好的模式來表示這種情況並在數據庫中執行它嗎?

示例數據:

enter image description here

如果fk_taskType在任務表變更爲2,數據庫允許,但我們知道有一個不正確的屬性相關聯的任務T1的特性。

回答

0

這應該沒有問題,這個想法很簡單,就是確保某個類型的任務只允許與該類型關聯的屬性。



|任務類型TYPE_ID存在。

任務類型由TYPE_ID標識。

 
TaskType {TYPE_ID} 
     PK {TYPE_ID} 


|財產PROP_ID存在。

房產以PROP_ID標識。

 
Property {PROP_ID} 
     PK {PROP_ID} 


|任務類型TYPE_ID與屬性PROP_ID相關聯。

對於每個屬性 ,任務類型可能與多個屬性關聯可能有多個任務類型與該屬性關聯。

如果任務類型與某個屬性相關聯,則該任務類型必須存在。

如果任務類型與屬性相關聯,而且該屬性必須存在。

 
TaskTypeProperty {TYPE_ID, PROP_ID} 
       PK {TYPE_ID, PROP_ID} 

      FK1 {TYPE_ID} REFERENCES TaskType {TYPE_ID} 
      FK2 {PROP_ID} REFERENCES Property {PROP_ID} 


|任務TASK_ID是任務類型TYPE_ID

每個任務只有一個任務類型;對於每個任務類型,可能比一個任務更具有該任務類型的更多 。

如果任務是任務類型,那麼該任務類型必須存在。

 
Task {TASK_ID, TYPE_ID} 
    PK {TASK_ID} 

    AK {TASK_ID, TYPE_ID} -- superkey, redundant here but needed in SQL 
          -- to be referenced by a FK 

FK1 {TYPE_ID} REFERENCES TaskType {TYPE_ID} 


|任務TASK_ID類型TYPE_ID有財產PROP_ID

任務可能有多個屬性,對於每個屬性,多個任務都有可能擁有該屬性。

如果任務類型的任務具有屬性,那麼該屬性與該任務類型相關聯。

如果任務具有與任務類型相關聯的屬性,而該任務屬於該任務類型。

 
TaskProperty {TASK_ID, PROP_ID, TYPE_ID} 
      PK {TASK_ID, PROP_ID} 

      FK1 {TASK_ID, TYPE_ID} REFERENCES Task {TASK_ID, TYPE_ID} 
      FK2 {TYPE_ID, PROP_ID} REFERENCES TaskTypeProperty {TYPE_ID, PROP_ID} 

注:

 
PK = primary key 
AK = alternate key (unique) 
FK = foreign key 

enter image description here

0

你不需要TaskProperty表都沒有。您有TaskTypeProperty表,它具有每種類型任務的每個屬性的條目。我認爲字段pk_taskTypeProperty和fk_taskType形成了該表的組合PK(儘管我當然希望你不要真的將字段命名爲「FK _...」或「PK _...」)。

所以在任務表中,應該有一個TaskType和TaskProperty字段,它們構成了TaskTypeProperty表的FK。現在不能有任務在TaskTypeProperty表中沒有正確定義。

任務表不需要將FK直接添加到TaskType表中。該引用鏈將經過TaskTypeProperty FK到TaskType表。這是一個非常好的設計。外鍵的目的是實施數據完整性,而不是從UML圖形複製一行繼承。因此請參考滿足該要求的表格。