首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL架构设置

SQL架构设置
EN

Stack Overflow用户
提问于 2019-08-03 00:43:02
回答 1查看 44关注 0票数 3

我是SQL的新手,对于如何最好地表示以下内容的实体-关系图有点困惑:

假设我们有一家公司。这家公司有员工。员工有经理(多个员工对应一个经理)。经理是雇员(但经理不能管理自己)。每个员工/经理可以参与多个项目(一个emp/经理对应多个项目)。此外,员工/经理在公司中有多个角色(1个emp/经理对应多个角色)。

我最困惑的是如何考虑在员工中嵌入管理器。有没有什么约束是我需要包括的,以确保没有管理者管理自己?

以下是我到目前为止的模式(PostgreSQL):

代码语言:javascript
复制
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)
);

任何想法和帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-03 11:21:13

我将对您的模式进行以下修改:

代码语言:javascript
复制
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)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57330573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档