具有两个相关外键的数据库表,可能会获取错误数据

0 sql database database-design foreign-key-relationship

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

  • 一个公司可以有多个部门,一个部门属于一个公司
  • 一个公司可以有多个员工,一个员工属于一个公司
  • 一个部门可以有多名员工,一名员工属于一个部门
公司(
      ID,
      姓名,
)

部门(
      ID,
      标题,
      公司 ID(FK_部门_公司)
      UNIQUE(职位、公司 ID)
)

员工(
      ID,
      名字,
      L 名称,
      公司ID,(FK_Employee_Company)
      部门 ID (FK_Employee_Department)
)

所以我发现有可能将错误的数据插入到Employee表中

这是示例值

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,....) 
Run Code Online (Sandbox Code Playgroud)

这里DepartmentID 103属于CompanyID 26,但我仍然可以插入,那么有没有办法解决这个问题(sqlserver),或者我必须改变设计,请给我一些建议和想法。

问候,

gbn*_*gbn 5

您不需要 Employee 表中的 CompanyID

根据您上面的 2 条陈述

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

这意味着

  • 一个公司可以有多个员工,一个员工属于一个公司

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

tl;dr:通过以下断言来识别:“......一名员工属于一家公司”。

  • 荣誉。另一种说法是employee表中的companyid重复了一个已经存储在employee to department的FK,以及department to company的FK组合中的事实。当同一事实在数据库中多次陈述时,数据库可能会自相矛盾。这个问题可以通过遵守规范化原则来避免。 (2认同)