如何在oracle数据库中实现多对多关系正确?

时间:2016-06-17 11:22:02

标签: database oracle

我有一个关于在四个表之间实现简单关系的问题。

employee
department
course
course_employee

创建它们但我只是想确保我没有遗漏可能损害数据库设计的东西。以下是关系:

employee to department -> many to one
employee to course -> many to many

course_employee表是课程表和员工表之间的中介。

这是我的SQL:

CREATE TABLE employee (
  id NUMBER PRIMARY KEY,
  username VARCHAR2(20),
  password VARCHAR2(100),
  email VARCHAR2(40),
  department_id NUMBER
);

CREATE TABLE department(
  id NUMBER PRIMARY KEY,
  department_name VARCHAR2(40),
  location VARCHAR2(30)
);


ALTER TABLE employee
ADD CONSTRAINT department_id
  FOREIGN KEY (department_id)
  REFERENCES department(id);

CREATE TABLE course(
  id NUMBER PRIMARY KEY,
  course_code  VARCHAR2(20),
  course_name VARCHAR2(100),
  difficulty VARCHAR(10),
  duration NUMBER
);

CREATE TABLE course_employee (
  course_id NUMBER,
  employee_id NUMBER
);

ALTER TABLE course_employee
ADD CONSTRAINT fk_course FOREIGN KEY(course_id)
REFERENCES course(id);


ALTER TABLE course_employee
ADD CONSTRAINT fk_employee FOREIGN KEY(employee_id)
REFERENCES employee(id);

从sql developer输出的ER图:

enter image description here

我想为员工添加已完成的课程,但我不确定这是否通过某种关系实现。知道DB设计的人可以分享意见吗?非常感谢你!

2 个答案:

答案 0 :(得分:4)

您可以在course_employee表中跟踪员工注册的培训状态。此表可以包含特定于员工注册课程的任何数据。

答案 1 :(得分:0)

您的course_employee表是课程表和employee表之间的连接表(许多面)。 course_id和employee_id必须同时是Course_employee表的外键和主键,才能使其成为多对多关系。