这是一个循环数据库引用/外键吗?

时间:2012-03-29 12:55:05

标签: database-design relational-database foreign-key-relationship circular-reference

我是数据库设计的初学者。这是我必须设计的系统。

公司有雇员为他们工作。 公司有与之有业务往来的客户。 公司可以为客户完成任务。 任务有必须在任务完成之前发生的里程碑。 员工有完成任务的里程碑。

所以我的数据库设计如下所示:

公司 CompanyID PK

客户端 ClientID PK CompanyID FK

FixedTask FixedTaskID PK CompanyID FK

里程碑 MilestoneID PK FixedTaskID FK

员工 EmployeeID PK CompanyID FK

TaskPlanning TaskPlanningID PK EmployeeID FK ClientID FK MilestoneID FK

有人能告诉我这是否是循环引用?如果是这样,我该如何解决?

谢谢!

2 个答案:

答案 0 :(得分:2)

是循环吗?不,不是。

如果你绘制了一个情况图,插入了外键引用,你会立即看到

               +--------------+
    +--------> |   Company    | <--------+
    |          +--------------+          |
    |                 ^                  |
    |                 |                  |
+--------+     +--------------+     +----------+
| Client |     |  FixedTask   |     | Employee |
+--------+     +--------------+     +----------+
    ^                 ^                  ^
    |                 |                  |
    |          +--------------+          |
    |          |  Milestone   |          |
    |          +--------------+          |
    |                 ^                  |
    |                 |                  |
    |          +--------------+          |
    +----------| TaskPlanning |----------+
               +--------------+

因此,无需修复它。

答案 1 :(得分:0)

作为paxdiablo has shown,这不是循环引用。

然而,它是“菱形”依赖关系,这意味着您不仅要“分裂”,还要“合并”表示表之间关系的行。换句话说,这是DAG而不是树。

在菱形的依赖项中没有任何固有的“修复”,但是某些DBMS(特别是MS SQL Server)无法以声明方式强制执行菱形关系(即通过FOREIGN KEY语法),因此您将被迫使用而不是触发器。