请原谅我在数据库中遇到了一些新问题,我在使用Workbench时遇到了一些问题。
在一个非常简单的测试数据库中,包含三个表:公司、部门、员工
Company Department Employee
- id (PK)(AI) - id (PK)(AI) - id (PK)(AI)
- Name - Name - Name我在公司和部门之间建立了1比多的关系,因为员工只能有一个部门和一个公司,所以我在公司和员工之间建立了1比多的关系,部门和员工之间建立了1比多的关系。
当我这样做时,Workbench在Employee中创建了第三个关系列,名为Company_Department_id,我所有的包含FK的列现在都已经检查过PK,表现在看起来如下所示:
Company Department Employee
- id (PK)(AI) - id (PK)(AI) - id (PK)(AI)
- Name - Name - Name
- Company_id (PK)(FK) - Company_id (PK)(FK)
- Department_id (PK)(FK)
- Company_Department_id (PK)(FK)问题
发布于 2013-05-22 02:56:57
看起来,您已经使用该选项创建了一个标识关系(这是工具箱中的一行未中断的关系)。
标识关系假设引用表中的主键应该是引用表的主键的一部分。

因为Company_id现在是部门主键的一部分,它也必须是员工外键的一部分,因此您的问题#1。
你可能想做的是建立一种不确定的关系。这可以通过从工具箱中选择虚线,或者在关系属性的外键选项卡中取消“标识关系”来实现。
非标识关系是典型的外键约束,只需确保引用表中的任何值都存在于引用表中。

从技术上讲,这应该可以解决您的问题,但是底层数据库设计仍然存在潜在的问题。
例如,没有什么可以阻止多个公司以相同的名称存在,或多个部门具有相同的名称,即使在同一家公司内也是如此。
这可以通过添加唯一的密钥约束来解决,但解决相同问题的另一种方法是使用公司和部门名称作为主键。
如果你这样做,你实际上会想要使用一个识别关系,以便公司名称成为部门的一个组成部分。
(您可能希望了解数据库理论和数据库规范化,因为它将帮助您避免在构建数据库时可能遇到的许多陷阱)

我并不是说这是一个更好的数据库设计,只是这是一个标识关系是有效的/有用的。
https://dba.stackexchange.com/questions/42713
复制相似问题