如果我有以下表格:
CREATE TABLE projects
(
id SERIAL PRIMARY KEY,
name VARCHAR(25) NOT NULL,
);
INSERT INTO projects (name) VALUES ('Portfolio Website'), ('Client Website');
CREATE TABLE developers
(
id SERIAL PRIMARY KEY,
name VARCHAR(25) NOT NULL,
);
INSERT INTO developers (name) VALUES ('Kevin'), ('Mark'), ('Simon');
CREATE TABLE languages
(
id SERIAL PRIMARY KEY,
name VARCHAR(25) NOT NULL,
);
INSERT INTO languages (name) VALUES ('HTML'), ('PHP'), ('ASP.NET'), ('Java');
CREATE TABLE developer_languages
(
id SERIAL PRIMARY KEY,
developer INTEGER REFERENCES developers(id),
language INTEGER REFERENCES languages(id)
);
INSERT INTO developer_languages (developer, language) VALUES (1,1), (1,2), (2,1), (2,3), (3,4);
CREATE TABLE project_developers
(
id SERIAL PRIMARY KEY,
project INTEGER REFERENCES projects(id),
developer INTEGER REFERENCES developers(id)
);
要求是每个项目都有一个HTML开发人员和一个Java开发人员。有没有办法创建一个强制执行此规则的规则?
我知道我可以在项目表中有一个'html_dev'和'java_dev'列,但如果你想让项目中的每个开发人员都存储在这两列和project_developers表中,那么这就是一个额外的数据源。
我希望我的问题有道理吗?我甚至不确定从哪里开始寻找所以我虽然有人可能能指出我正确的方向,谢谢!
答案 0 :(得分:0)
您尝试做的事情并不容易解决,并且约束触发器不是解决方案,因为您无法创建约束来匹配您的问题。一种解决方案如下,虽然它有点人为:
此过程可确保新项目具有两种风格的开发人员,并且当开发人员从项目中删除时,每种风格中至少有一种仍然存在。使用SELECT insert_new_project('New project', 1, 3);
插入新项目。