我想实现一个关注/最喜欢的系统。我可以想到两种实现数据库/表格结构的方式,但我不确定要实施哪一种。哪一个将被视为最佳实践,最重要的是为什么?关注者的MySQL数据库结构
我把所有的追随者都放在一个字符串中。通过将所有追随者放入单个字符串中,可以减少冗余行的数量。
Ex。
id(1)|| user_id(1)|| follower_ids(2,3,45)
'CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
'CREATE TABLE `follow` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`follower_ids` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
OR
我把各自独立follow_id但由具有对于相同的USER_ID 3行添加冗余。
Ex。
id(1)|| user_id(1)|| follower_id(2)
id(2)|| user_id(1)|| follower_id(3)
id(3)|| user_id(1)|| follower_id(45)
'CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
'CREATE TABLE `follow` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`follower_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1';
非他们。他们都错过了索引,可能是最重要的。 – 2013-02-28 23:11:32