三个表之间的MySQL唯一索引

时间:2017-10-15 02:03:05

标签: mysql sql database-design foreign-keys unique-index

我有以下表的架构:

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。谢谢你的回答。

0 个答案:

没有答案