database - 在 PostgreSQL 中使用连接创建视图
问题描述
对于一个小型轮班管理项目,我决定尝试为我们的员工制定每周轮班时间表,基于每天 3 班的时间表,其中 1 班可以容纳多名员工。
我创建了一个员工表和一个包含轮班日期的 work_day 表,以及一天中每个轮班的 3 个连接表。
CREATE TABLE employee(
id SERIAL PRIMARY KEY,
"name" VARCHAR(128) NOT NULL,
archived BOOLEAN DEFAULT FALSE
);
CREATE TABLE work_day(
id SERIAL PRIMARY KEY,
"date" DATE NOT NULL UNIQUE
);
CREATE TABLE morning_shift(
employee_id INTEGER FOREIGN KEY REFERENCES employee(id),
shift_id INTEGER FOREIGN KEY REFERENCES work_day(id),
PRIMARY KEY(employee_id, shift_id)
);
CREATE TABLE evening_shift(
employee_id INTEGER FOREIGN KEY REFERENCES employee(id),
shift_id INTEGER FOREIGN KEY REFERENCES work_day(id),
PRIMARY KEY(employee_id, shift_id)
);
CREATE TABLE night_shift(
employee_id INTEGER FOREIGN KEY REFERENCES employee(id),
shift_id INTEGER FOREIGN KEY REFERENCES work_day(id),
PRIMARY KEY(employee_id, shift_id)
);
我想到的计划是创建一个可以实现工作日演示的视图:
日期
早班(姓名1,姓名2)
夜班(name3, name4)
夜班(姓名5)
这样我就可以将整个工作日作为项目中的对象进行查询。问题是我在数据库方面的经验很少,事实证明这比我想象的要困难得多。过去几天我一直在努力,终于放弃了我的自我,现在我寻求你的谦虚帮助,你如何创造这样的观点。它有许多令人困惑的连接,我无法绕开它。
非常感谢您提前。
解决方案
正如其他人在评论中提到的那样,数据库设计还有改进的余地。但是,这是创建视图的方法,只需连接所有需要数据的表并选择所需的字段:
CREATE VIEW shifts AS
SELECT *
FROM work_day inner join morning_shift on work_day.id = morning_shift.shift_id
inner join evening_shift on work_day.id = evening_shift.shift_id
... (more joins)
推荐阅读
- typescript - 通用类型 'GraphQLObjectType
' 需要 0 到 2 个类型参数 - python - Python遍历文件夹中的excel文件
- java - java DSL Spring集成中的免费队列通道
- azure - AppServicePlan 中横向扩展队列触发的 Azure 函数行为
- python - Tensorflow 值错误:输入与层不兼容
- common-lisp - sb-ext:defglobal 访问反汇编 REPL 和 .lisp 文件不同
- corda - Corda公证防止双花,如何检查?
- stripe-payments - Python 条纹支付网关
- python - 我该如何解决这个连接错误和类型错误
- react-native - 无法安装 expo-cli 以使用 react-native