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

时间:2018-12-30 21:47:14

标签: sql oracle foreign-keys

我有2张桌子。一个是员工,另一个是部门。因此,第一个关系是一对多关系,其中一个员工可以在一个部门工作,而一个部门可以有很多员工。因此,为此,我们将外键放在employee表中。

第二个关系也是一对多关系,尽管它是可选的。这是一种管理关系。因此,一名雇员(可选,因为并非每个雇员都可以这样做)可以管理一个或多个部门,但是一个部门由一名雇员管理。因此,外键在部门中。

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));

因此,从技术上讲,这是我想要的方式,但是我知道会出错,因为我所引用的表之一甚至还没有创建。所以我应该保持一种不是可选关系的关系吗?还是我应该为管理人员创建单独的表格?

2 个答案:

答案 0 :(得分:1)

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

但是,这种设计的问题在于,相互依赖性不仅会在创建表时引起问题,还会在插入或更新数据时引起问题。在执行更新或插入操作时,总是可以暂时禁用约束,但是当它需要过于频繁地重复时,它将变得很乏味。

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

注意

甚至还可以将员工部门存储在另一个单独的表中,而不是将其存储为员工中的外键。尽管这将为两种关系提供一致的解决方案,但这可能不是一个好的设计选择:@APC指出,要强制执行一个表必须有一个子代的规则是很棘手的,因此应保留此类表的数量。最小。

答案 1 :(得分:0)

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

相关问题