如何避免数据库设计中的循环引用

时间:2015-04-01 09:54:10

标签: database database-design

给定一个包含任务的项目,我必须知道哪个任务是活动的。一个项目可以有很多任务。每个项目只有一个任务处于活动状态。

通常您需要显示项目的所有任务以及当前任务。

如何在避免循环引用的数据库中对此进行建模?

更新

其他可能的操作:

  • 添加任务
  • 删除任务
  • 转到下一个任务(让那个任务激活)

4 个答案:

答案 0 :(得分:1)

由于每个项目只能有一个作为活动任务的任务,我会在项目表中添加一个属性,其中包含该活动任务的标识符。

因此表PROJECT具有(PROJECT_ID,NAME,ACTIVE_TASK_ID等)的属性,并且TASK表具有(TASK_ID,NAME,PROJECT_ID)。

此模型允许您在项目中只有零个或一个活动任务。涉及使用标志标记特定任务以指示其处于活动状态的解决方案并非易于实施完整性。

答案 1 :(得分:0)

您可以通过向表Task添加“active”布尔字段来实现此目的,并使用约束来确保每个项目只存在一个此类任务。

答案 2 :(得分:0)

一个包含项目的表,一个包含任务的表,一个表通过id将两个表连接到具有约束的活动标志。

答案 3 :(得分:0)

试试这个潦草的

Table Project
   project_id PK
   name (String)
end;

Table Task
   task_id PK
   project_id FK
   active (Boolean)
-- Unique one Key to combination of "project_id" and "active=true".
end;