数据库设计中如何避免循环引用
How to avoid circular reference in database design
给定一个包含任务的项目,我必须知道哪个任务处于活动状态。一个项目可以有很多任务。每个项目只有一个任务处于活动状态。
通常您需要显示项目的所有任务以及当前任务。
您将如何在数据库中建模以避免循环引用?
更新
其他可能的操作:
- 添加任务
- 删除任务
- 移至下一个任务(激活该任务)
您可以通过向 table 任务添加一个 "active" 布尔字段来实现这一点,并使用约束来确保每个项目只存在一个这样的任务。
一个 table 用于项目,一个 table 用于任务,一个 table 通过 id 将两者与具有约束的活动标志联系起来。
试试这个乱写
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;
由于您只能有一个任务作为每个项目的活动任务,我会向项目 table 添加一个属性,其中包含该活动任务的标识符。
因此 table PROJECT 具有(PROJECT_ID、NAME、ACTIVE_TASK_ID 等属性),而 TASK table 具有(TASK_ID、姓名,PROJECT_ID).
此模型允许您在项目中只有零个或一个活动任务。涉及使用标志标记特定任务以指示其处于活动状态的解决方案不太容易强制执行完整性。
给定一个包含任务的项目,我必须知道哪个任务处于活动状态。一个项目可以有很多任务。每个项目只有一个任务处于活动状态。
通常您需要显示项目的所有任务以及当前任务。
您将如何在数据库中建模以避免循环引用?
更新
其他可能的操作:
- 添加任务
- 删除任务
- 移至下一个任务(激活该任务)
您可以通过向 table 任务添加一个 "active" 布尔字段来实现这一点,并使用约束来确保每个项目只存在一个这样的任务。
一个 table 用于项目,一个 table 用于任务,一个 table 通过 id 将两者与具有约束的活动标志联系起来。
试试这个乱写
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;
由于您只能有一个任务作为每个项目的活动任务,我会向项目 table 添加一个属性,其中包含该活动任务的标识符。
因此 table PROJECT 具有(PROJECT_ID、NAME、ACTIVE_TASK_ID 等属性),而 TASK table 具有(TASK_ID、姓名,PROJECT_ID).
此模型允许您在项目中只有零个或一个活动任务。涉及使用标志标记特定任务以指示其处于活动状态的解决方案不太容易强制执行完整性。