这应该没有问题,这个想法很简单,就是确保某个类型的任务只允许与该类型关联的属性。
|任务类型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](https://i.stack.imgur.com/epRcd.png)