我想實現一個關注/最喜歡的系統。我可以想到兩種實現數據庫/表格結構的方式,但我不確定要實施哪一種。哪一個將被視爲最佳實踐,最重要的是爲什麼?關注者的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