2015-05-21 27 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图形复制一行继承。因此请参考满足该要求的表格。