我正在尝试创建通讯录。并取得了我的表是这样的:帮助我的表结构
CREATE TABLE `list_`.`contacts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` tinyint(11) NOT NULL,
`group` varchar(128) NOT NULL,
`first_name` varchar(128) NOT NULL,
`last_name` varchar(128) NOT NULL,
`address` varchar(128) NOT NULL,
`city` varchar(128) NOT NULL,
`state` varchar(2) NOT NULL,
`zip` int(5) NOT NULL,
`phone_number` varchar(16) NOT NULL,
`cell_number` varchar(16) NOT NULL,
`work_number` varchar(16) NOT NULL,
`fax_number` varchar(16) NOT NULL,
`email` varchar(128) NOT NULL,
`company` varchar(55) NOT NULL,
`title` varchar(56) NOT NULL,
`notes` text NOT NULL,
`date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`,`user_id`),
KEY `user_id` (`user_id`),
KEY `group` (`group`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
CREATE TABLE `list_`.`groups` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` tinyint(11) NOT NULL,
`position` int(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(128) NOT NULL,
`date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`,`user_id`),
KEY `user_id` (`user_id`),
KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 AUTO_INCREMENT=32 ;
我在这里的逻辑是,我在contacts
表中的所有联系人,从那里我有一个叫group
,我用它来筛选联系人到组列。
然后我有一张名为groups
的表格,我将使用该表格来跟踪由特定用户创建的组,并填写这些组以便他们可以移动联系人。
当组被删除,我会扔回去不会再让如果组包含接触它被删除的错误。我大概可以查询联系人以查看他们属于哪个组,并且如果他们属于被删除的组,那么我会将他们移动到一个名为Uncategorized或其他组的组中。
但如果他们选择接受和删除组内的所有联系人,然后继续前进,删除组和属于该组的所有子行。
我无法在contacts
表格制作我Foreing键。无论索引和键的组合如何,我仍然无法使其工作。
--
-- Constraints for table `contacts`
--
ALTER TABLE `list_`.`contacts`
ADD CONSTRAINT `contacts_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
ADD CONSTRAINT `contacts_ibfk_2` FOREIGN KEY (`group`) REFERENCES `groups` (`name`) ON UPDATE CASCADE;
--
-- Constraints for table `groups`
--
ALTER TABLE `list_`.`groups`
ADD CONSTRAINT `group_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);
此外,有人可以帮我删除时和更新。为了帮我找出我如何可以删除所有的子行,在groups
是的,对你最后一个问题。虽然我的问题是,当我运行的代码时,我不断收到错误,说:无法添加或更新子行:外键约束失败('list_'。,CONSTRAINT 'contacts_ibfk_2' FOREIGN KEY('group')REFERENCES'groups'('name')ON DELETE CASCADE) –
Eli
2010-10-11 03:18:20
不,我是说最后两条语句是反对的。您如何防止删除拥有联系人的群组,并删除群组中的所有联系人?该组必须首先没有联系人被删除。当你得到那个特定的错误时,你运行什么查询? – 2010-10-11 03:20:24
正是我在我原来的职位,我确实有其他表已经在我的分贝因为user_id是用户的外键.id – Eli 2010-10-11 03:25:19