带有两个相关外键的数据库表,可能需要错误的数据

时间:2013-05-09 09:23:16

标签: sql database database-design foreign-key-relationship

我正在设计一个数据库,我的表格如下

  • 公司可以有多个部门,一个部门属于一个公司
  • 公司可以拥有许多员工,员工属于一家公司
  • 部门可以拥有多名员工,员工属于一个部门
Company(
      ID,
      Name,
) 

Department(
      ID,
      Title,
      CompanyID (FK_Department_Company)
      UNIQUE(Title,CompanyID)
)

Employee(
      ID,
      Fname,
      LName,
      CompanyID, (FK_Employee_Company)
      DepartmentID (FK_Employee_Department)
)

所以我发现有可能插入错误的数据 进入员工表

这里是样本值

company  (
       25,Spar Pvt LTD, Sweden, 12345678.
       26,Mr.Wheel Pvt Ltd, Germany, 123456789)

Department(
       101, Manager,25
       102, Front Desk,25
       103, Host,26)

Employee( 81,25,103,....) 

这里DepartmentID 103属于CompanyID 26,但我仍然可以插入,  所以无论如何都要解决这个问题(sqlserver), 或者我必须改变设计,请给我一些建议和想法。

此致

1 个答案:

答案 0 :(得分:4)

您在Employee表中不需要CompanyID

上述两条陈述

  • 公司可以有多个部门,一个部门属于一个公司
  • 部门可以拥有多名员工,员工属于一个部门

这意味着

  • 公司可以拥有许多员工,员工属于一家公司

因此,中间部门表隐含了Employee-Company关系。不需要单独的外键/列

tl; dr:通过这个断言确定:“......一名员工属于一家公司”。