首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何连接两个具有多个关系的表

如何连接两个具有多个关系的表
EN

Stack Overflow用户
提问于 2018-12-30 21:47:13
回答 2查看 63关注 0票数 1

我有两张桌子。一个是员工,另一个是部门。因此,第一种关系是一对多的关系,其中1名员工可以在一个部门工作,但一个部门可以有多名员工。因此,我们将外键放在employee表中。

第二种关系也是1比多的关系,尽管它是可选的。这是一种管理关系。因此,一个员工(可选的,因为不是每个员工都这样做)可以管理一个或多个部门,但是一个部门由一个员工管理。因此外键在部门。

代码语言:javascript
复制
create table dept(
    departmentName varchar2(10),
    mgrId integer,
    primary key(departmentName),
    foreign key mgrId references employee(empId)
);

create table employee(
    empId integer;
    empName varchar2(100),
    departmentName varchar2(10),
    primary key(empId),
    foreign key(departmentName) references dept(departmentName));

从技术上讲,这是我想要的,但我知道我会得到一个错误,因为我所引用的其中一个表还没有创建。所以我应该只保留一段不是可选的关系吗?还是我应该为经理们做一张单独的桌子?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-30 21:56:15

您可以首先创建两个表,然后添加约束。

然而,这种设计的问题在于,不仅在创建表时,而且在插入或更新数据时,相互依赖关系都会导致问题。在执行更新或插入时,总是可以暂时禁用约束,但如果需要重复太频繁,则会变得单调乏味。

为了避免这种情况,您可以按照建议创建一个单独的表来处理经理关系。

Note

甚至还可以将员工部门存储在另一个单独的表中,而不是在员工中作为外键存储。虽然这将为这两种关系提供一致的解决方案,但这可能不是一个好的设计选择:正如@APC所评论的那样,执行一个表必须有一个子表的规则是很棘手的,因此这类表的数量应该保持在最低限度。

票数 1
EN

Stack Overflow用户

发布于 2018-12-30 21:56:08

可以在创建表后添加外键以跳过错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53981692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档