Rom*_*man 1 sql derby check-constraints
我正在尝试创建一个约束来检查项目是否只有一个员工,其角色是项目负责人,但同时可以让其他员工具有不同的角色.
我的表定义:
CREATE TABLE employee
( employee_id INT NOT NULL PRIMARY KEY
,employee_role VARCHAR(15) NOT NULL
, CHECK (employee_role in ('project_leader', 'administrator', 'member'))
)
CREATE TABLE project
( project_id INT NOT NULL PRIMARY KEY
, name VARCHAR(50)
, employee_id INT NOT NULL
, employee_role VARCHAR(15) NOT NULL
, CONSTRAINT employee_project_FK
FOREIGN KEY (employee_id, employee_role)
REFERENCES employee (employee_id, employee_role)
, CONSTRAINT only_one_project_leader
CHECK (employee_role = 'project_leader')
) ;
Run Code Online (Sandbox Code Playgroud)
我不清楚如何在约束中表达这一点以及我需要改变什么.如果有人告诉我我做错了什么,我会很感激.
你错过了一张桌子.您的数据结构需要三个表:
如果您想要一个项目只有一个领导者的约束,那么您只需添加一个列来Project调用ProjectLeader.这将强制执行约束,因为领导者每个项目只有一个插槽.如果你必须有一个领导者,那么添加一个检查约束以确保不是NULL.
数据模型出现问题的迹象是表中project_id的主键project.这意味着对于给定的project_id,只有一名员工.我认为这不是你想要的.
编辑:
表格看起来像:
CREATE TABLE project
( project_id INT NOT NULL PRIMARY KEY,
name VARCHAR(50),
project_leader int references employee(employee_id)
) ;
CREATE TABLE projectemplyee
( projectemployee_id INT NOT NULL PRIMARY KEY,
project_id int references project(project_id),
employee_id int references employee(employee_id),
employee_role VARCHAR(15) NOT NULL
) ;
Run Code Online (Sandbox Code Playgroud)
每个项目的领导者只有一个插槽.您不需要约束来强制执行单一操作.
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |