我是SQL的新手,对于如何最好地表示以下内容的实体-关系图有点困惑:
假设我们有一家公司。这家公司有员工。员工有经理(多个员工对应一个经理)。经理是雇员(但经理不能管理自己)。每个员工/经理可以参与多个项目(一个emp/经理对应多个项目)。此外,员工/经理在公司中有多个角色(1个emp/经理对应多个角色)。
我最困惑的是如何考虑在员工中嵌入管理器。有没有什么约束是我需要包括的,以确保没有管理者管理自己?
以下是我到目前为止的模式(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)
);任何想法和帮助都是非常感谢的!
发布于 2019-08-03 11:21:13
我将对您的模式进行以下修改:
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
--);如果您真的想将“没有经理管理自己”规则编码为DB约束,您可以添加一个CHECK约束(emp_id <> manager_id)。
https://stackoverflow.com/questions/57330573
复制相似问题