我是 SQL 的新手,对如何最好地表示以下实体关系图感到困惑:
假设我们有一家公司。公司有员工。员工有经理(许多员工对 1 名经理)。管理者是雇员(但管理者不能管理自己)。每个员工/经理可以参与多个项目(1 个 emp/经理到多个项目)。此外,员工/经理在公司中扮演许多角色(1 个 emp/manager 到许多角色)。
我最困惑的是如何考虑将经理嵌入员工之中。是否需要包含任何限制以确保没有经理管理自己?
到目前为止,这是我的架构 (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)
);
非常感谢任何想法和帮助!
最佳答案
我会对您的架构进行以下修改:
CREATE TABLE employees
(
emp_id INTEGER PRIMARY KEY,
name VARCHAR(120) NOT NULL,
-- instead of: manager_id INTEGER REFERENCES managers (manager_id)
manager_id INTEGER REFERENCES employees (emp_id)
);
-- ...and remove:
--CREATE TABLE managers
--(
-- manager_id INTEGER PRIMARY KEY,
-- name VARCHAR(120) NOT NULL
--);
如果您真的想将“没有经理管理自己”规则编码为数据库约束,您可以添加 CHECK
约束(emp_id <> manager_id
)。
关于SQL 架构设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330573/