【发布时间】:2019-08-03 11:21:12
【问题描述】:
我对 SQL 比较陌生,对如何最好地表示以下实体关系图有点困惑:
假设我们有一家公司。公司有员工。员工有经理(许多员工对 1 名经理)。经理是雇员(但经理不能管理自己)。每个员工/经理可以参与多个项目(1 个员工/经理到多个项目)。此外,员工/经理在公司有许多角色(1 位员工/经理到许多角色)。
我最困惑的是如何考虑在员工中嵌入经理。是否需要包含任何限制以确保没有经理自行管理?
这是我目前的架构(PostgreSQL):
CREATE TABLE employees
(
emp_id INTEGER PRIMARY KEY,
name VARCHAR(120) NOT NULL,
manager_id INTEGER REFERENCES managers (manager_id)
);
CREATE TABLE managers
(
manager_id INTEGER PRIMARY KEY,
name VARCHAR(120) NOT NULL
);
CREATE TABLE projects
(
project_id INTEGER PRIMARY KEY,
project_name VARCHAR(120) NOT NULL,
emp_id INTEGER REFERENCES employees (emp_id)
);
CREATE TABLE roles
(
role_id INTEGER PRIMARY KEY,
role_name VARCHAR(120) NOT NULL,
emp_id INTEGER REFERENCES employees (emp_id)
);
非常感谢任何想法和帮助!
【问题讨论】:
-
不要引用项目中的员工。相反,创建一个名为“project_member”的新表,其中包含对员工和项目的引用。同样,创建一个包含角色和员工引用的“分配”表,这样您就可以拥有任意数量的角色。
标签: sql postgresql