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