在 PostgreSQL 中创建带有连接的视图
Creating views with joins in PostgreSQL
对于我决定进行的一个小型轮班管理项目,我尝试根据每天 3 班的时间表为我们的员工制定每周轮班时间表,其中 1 班可以容纳一名以上的员工。
我创建了一个员工 table 和一个 work_day table 保存轮班日期和 3 加入 tables 为一天中的每个轮班.
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)
夜班(name5)
这样我就可以将整个工作日作为项目中的对象进行查询。
问题是我在数据库方面的经验很少,而且事实证明它比我想象的要难得多。最近几天我一直在努力,终于放弃了我的自我,现在我寻求你的谦虚帮助,你如何创造这样的观点。它有许多令人困惑的连接,我无法理解它。
非常感谢您。
正如其他人在评论中提到的,数据库设计还有改进的余地。但是,这是创建视图的方法,只需连接您需要数据的所有表和 select 您想要的字段:
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)
对于我决定进行的一个小型轮班管理项目,我尝试根据每天 3 班的时间表为我们的员工制定每周轮班时间表,其中 1 班可以容纳一名以上的员工。
我创建了一个员工 table 和一个 work_day table 保存轮班日期和 3 加入 tables 为一天中的每个轮班.
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)
夜班(name5)
这样我就可以将整个工作日作为项目中的对象进行查询。 问题是我在数据库方面的经验很少,而且事实证明它比我想象的要难得多。最近几天我一直在努力,终于放弃了我的自我,现在我寻求你的谦虚帮助,你如何创造这样的观点。它有许多令人困惑的连接,我无法理解它。
非常感谢您。
正如其他人在评论中提到的,数据库设计还有改进的余地。但是,这是创建视图的方法,只需连接您需要数据的所有表和 select 您想要的字段:
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)