2012-04-09 135 views
2

如果我在InnoDB引擎上设计数据库,并且我有3个表,我无法删除,因为每个表示“外键约束失败” - 是否意味着设计错误?圆形外键约束失败mysql

请参阅下面的结构:

CREATE TABLE IF NOT EXISTS `account` (
    `account_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`account_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 


CREATE TABLE IF NOT EXISTS `identity` (
    `identity_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `user_id` int(10) unsigned DEFAULT NULL, 
    `account_id` smallint(5) unsigned DEFAULT NULL, 
    PRIMARY KEY (`identity_id`), 
    KEY `fk_details1` (`user_id`), 
    KEY `fk_account1` (`account_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 


CREATE TABLE IF NOT EXISTS `user` (
    `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `login` varchar(64) NOT NULL DEFAULT '', 
    `password` varchar(32) NOT NULL DEFAULT '', 
    `default_identity_id` int(10) unsigned DEFAULT NULL, 
    PRIMARY KEY (`user_id`), 
    UNIQUE KEY `login_UNIQUE` (`login`), 
    KEY `fk_identity1` (`default_identity_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

-- 
-- Constraints for table `identity` 
-- 
ALTER TABLE `identity` 
    ADD CONSTRAINT `fk_details1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `fk_account1` FOREIGN KEY (`account_id`) REFERENCES `account` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE; 

-- 
-- Constraints for table `user` 
-- 
ALTER TABLE `user` 
    ADD CONSTRAINT `fk_identity1` FOREIGN KEY (`default_identity_id`) REFERENCES `identity` (`identity_id`) ON DELETE CASCADE ON UPDATE CASCADE; 

我怀疑问题是default_identity_id ...我将它作为一个标志,标识表?

请指教!

+2

循环引用很难处理。您可以将'default_identity_id'作为标志移动到'identity table',或者您可以添加另一个'default_identity'表。看到类似的问题:[MySQL数据库设计。插入1to1表中的行](http://stackoverflow.com/questions/6691366/mysql-database-design-inserting-rows-in-1to1-tables/6692054#6692054)(阅读那些Parent-Child-BestChild作为User- Identity-DefaultIdentity) – 2012-04-09 10:57:15

+1

非常好。而已。请让它成为答案,以便我可以接受它:)。 – RandomWhiteTrash 2012-04-09 11:00:46

+0

我的MySQL 5.5.15.0似乎是'删除循环相关的数据就好了。您能否发布重现问题的测试数据? – 2012-04-10 06:32:43

回答