【发布时间】:2017-09-08 13:31:14
【问题描述】:
我有以下场景:一个'phone'子表可以通过join表服务多个父表,如下:
CREATE TABLE phone (
id BIGINT AUTO_INCREMENT,
number VARCHAR(16) NOT NULL,
type VARCHAR(16) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE employee_phone (
id BIGINT AUTO_INCREMENT,
employee BIGINT NOT NULL,
phone BIGINT NOT NULL,
PRIMARY KEY(id),
CONSTRAINT empl_phone_u_phone UNIQUE(phone),
CONSTRAINT empl_phone_fk_employee
FOREIGN KEY(employee)
REFERENCES employee(id) ON DELETE CASCADE,
CONSTRAINT empl_phone_fk_phone
FOREIGN KEY(phone)
REFERENCES phone(id) ON DELETE CASCADE
);
让爱丽丝和鲍勃住在同一所房子里,并成为同一家公司的员工。 HR 有两个为 Alice 注册的电话号码,而他们只有一个为 Bob 注册的电话号码,即房子的固定电话号码。 有没有办法在数据库级别强制使用此配置,不能为同一员工(或供应商,或以后出现的任何父母)重复电话号码(号码类型)?或者我会必须在应用层处理这些限制?我宁愿不使用触发器或表非规范化(如网站上的相关问题中所见,例如this one,它适用于 ID,而不适用于其他字段),但如果没有其他选择,我愿意这样做。我正在使用 MySQL。感谢您的关注。
【问题讨论】:
-
我很困惑。 Alice 和 Bob 可以使用相同的电话号码吗?
-
@GordonLinoff 是的。例如,他们可能是住在同一所房子里的一对夫妇。 HR 需要每个人的电话号码。
标签: mysql sql unique jointable