数据库设计 – 实体关系问题

我有4个相关的表(这是一个例子):
Company:
ID
Name
CNPJ

Department:
ID
Name
Code
ID_Company 

Classification:
ID
Name
Code
ID_Company

Workers:
Id 
Name
Code
ID_Classification
ID_Department@H_502_3@ 
 

假设我有一个id = 20,id_company = 1的分类.
还有一个id_company = 2(代表另一家公司)的部门.

这将允许创建来自两家公司的工人,因为分类和部门分别与公司相关联.我不希望这种情况发生,所以我认为我的人际关系有问题,我不知道如何解决它.

解决方法

您的问题源于您的模型中缺少实体类型的事实.考虑以下ERD:

请注意,我在DEPARTMENT和CLASSIFICATION之间添加了一个交集实体类型.这个新的实体类型:POSITION提供模型中隐含的信息,特定部门具有各种分类的给定工作集.

将POSITION作为显式实体添加到模型中有一些优点.

>它避免了您担心可能被分配到不同公司的部门和分类的WORKER的问题.
>它为您提供了可能适用于某个职位的其他谓词的基因座,例如工资等级等.
>它允许您记录一个位置存在的事实,即使该位置当前没有工人,这很可能是有用的信息.

请注意,为了避免为不同公司的部门和分类定义职位的问题,我扩展了DEPARTMENT和CLASSIFICATION的关键,这很好,因为你可以在Todd Everett’s中详细阅读回答.

谨防上面的模型假设简化.具体而言,它假定每个位置仅记录一次.这可能适用于您的业务规则,也可能不适用.如果您需要公司内同一部门和分类的多个POSITION记录,那么您可以在POSITION中引入代理键.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03