我有以下场景:'phone'子表可以通过连接表提供多个父表,如下所示:
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
);
让Alice和Bob住在同一所房子里,成为同一家公司的员工。人力资源部门有两个电话号码为爱丽丝注册,而他们只有一个用于鲍勃,这是房子固定电话的号码。 有没有办法在数据库级别强制执行使用此配置的同一员工(或供应商,或以后出现的任何父级)不能重复的电话号码(号码类型)?或者我会必须在应用层中处理这些限制?我宁愿不使用触发器或表非规范化(如在网站上的相关问题中所见,例如this one,它使用ID,而不是其他字段),但如果没有其他选择,我愿意这样做。我正在使用MySQL。谢谢你的关注。
答案 0 :(得分:0)
如果我理解正确,你只需要在连接表上有唯一的约束:
$("#order_form").submit(function(event){
if(! $("#firstName").val() ){
formSubmissionOK = false;
$("#firstNameError").text("Error: You have submited without inputting your name.");
}
if(formSubmissionOK == false){
event.preventDefault();
}
});
$("#flag").change(function(){
var productCost = $(this).data("cost");
var subtotal = productCost * $(this).val();
$("#flagTotal").text(subtotal);
});
$("#wine").change(function(){
var productCost = $(this).data("cost");
var subtotal = productCost * $(this).val();
$("#wineTotal").text(subtotal);
});
这将防止给定员工或(使用等效约束)供应商的重复。
如果您希望alter table employee_phone add constraint unq_employeephone_employee_phone unique (employee, phone);
表中的所有电话号码都是唯一的,那么只需在phone
上添加唯一约束/索引:
phone
(您可能也希望包含该类型)。
如果您尝试添加重复的手机,代码将返回错误。