我是数据库设计的初学者。这是我必须设计的系统。
公司有雇员为他们工作。 公司有与之有业务往来的客户。 公司可以为客户完成任务。 任务有必须在任务完成之前发生的里程碑。 员工有完成任务的里程碑。
所以我的数据库设计如下所示:
公司 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
有人能告诉我这是否是循环引用?如果是这样,我该如何解决?
谢谢!
答案 0 :(得分:2)
是循环吗?不,不是。
如果你绘制了一个情况图,插入了外键引用,你会立即看到 :
+--------------+
+--------> | Company | <--------+
| +--------------+ |
| ^ |
| | |
+--------+ +--------------+ +----------+
| Client | | FixedTask | | Employee |
+--------+ +--------------+ +----------+
^ ^ ^
| | |
| +--------------+ |
| | Milestone | |
| +--------------+ |
| ^ |
| | |
| +--------------+ |
+----------| TaskPlanning |----------+
+--------------+
因此,无需修复它。
答案 1 :(得分:0)
作为paxdiablo has shown,这不是循环引用。
然而,它是“菱形”依赖关系,这意味着您不仅要“分裂”,还要“合并”表示表之间关系的行。换句话说,这是DAG而不是树。
在菱形的依赖项中没有任何固有的“修复”,但是某些DBMS(特别是MS SQL Server)无法以声明方式强制执行菱形关系(即通过FOREIGN KEY语法),因此您将被迫使用而不是触发器。