0

我是数据库设计的初学者。这是我必须设计的系统。这是一个循环数据库引用/外键吗?

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

所以我的数据库设计是这样的:

公司 CompanyID PK

客户 ClientID的PK CompanyID FK

FixedTask FixedTaskID PK CompanyID FK

里程碑 MilestoneID PK FixedTaskID FK

雇员 雇员PK CompanyID FK

TaskPlanning TaskPlanningID PK 雇员FK ClientID的FK MilestoneID FK

任何人都可以告诉我,如果这是循环引用?如果是这样,我该如何解决它?

谢谢!

回答

2

它是圆形的吗?不,这不对。

你会看到立即如果你画的情形的示意图,外键引用堵漏:

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

因此,没必要修复它。

0

由于paxdiablo has shown,这不是一个循环引用。

它,然而“菱形”的依赖,这意味着你不只是有“分裂”,但也有表示表之间的关系线的“合并”。换句话说,这是一个DAG而不是一棵树。

没有什么固有的“修理”,在菱形的依赖,然而,一些的DBMS(值得注意的是,MS SQL服务器)无法声明强制执行的菱形关系(即通过外键语法),所以你不得不改用触发器。