我有以下表的架构:
CREATE TABLE IF NOT EXISTS `depts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`deptName` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `deptUniq` (`deptName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `sub_depts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dept_id` int(11) NOT NULL,
`subDeptName` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `subDeptNameUniq` (`subDeptName`),
KEY `keyDept` (`dept_id`),
CONSTRAINT `keyDept` FOREIGN KEY (`dept_id`) REFERENCES `depts` (`id`) ON DELETE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `objects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sub_depts_id` int(11) NOT NULL,
`objName` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `objNameUniq` (`objName`),
KEY `keySubDept` (`sub_depts_id`),
CONSTRAINT `keySubDept` FOREIGN KEY (`sub_depts_id`) REFERENCES `sub_depts` (`id`) ON DELETE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表sub_depts和depts之间的关系是多对一的 表对象和sub_depts之间的关系是多对一的 表对象和depts之间的关系必须是一对一的
如果表对象和depts是一个表,则一个简单的UNIQUE索引(objName,deptName)可以工作 但需要将三个表分开
示例数据:
depts
1 dept1
2 dept2
sub_depts
1 1 subDept1
2 1 subDept2
3 2 subDept3
objects
1 1 obj1
执行下一行后:
INSERT INTO `objects` (`sub_depts_id`, `objName`) VALUES (2, "obj1");
必定是错误,因为不是唯一数据
执行下一行后:
INSERT INTO `objects` (`sub_depts_id`, `objName`) VALUES (3, "obj1");
成功
请问你能帮我更新表的架构吗? 我使用的是最新版本的MySQL。谢谢你的回答。