我有一个关于在数据库中存储数据的简单但重要的问题。
假设一个网站有 100,000 个用户 。这些用户可以互相成为 friend 。
哪种存储方法是理想的
方法 A:
friends
字段。类型:文本 ,
连接它们。示例:用户 1 的 friend :2,3,4,5,6,... ,
分隔符分隔这个字段,这需要一些过程。 方法 B:
friendship
表+------+---------------------+
| uid | friend_id |
+------+---------------------+
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
+------+---------------------+
这两种方法哪个好?性能和优化。
提前致谢。
最佳答案
根据 normalization theory 的说法,首选方法 B 。
方法 将有以下问题:
而这只是问题的冰山一角。如果用户表位于数据库模式的中间(因为它经常发生),它将导致总数据库速度变慢。我的意思是,如果它将链接到许多其他表。
您可以从 方法 B 轻松恢复 方法 A 表示:
SELECT
`User`.`uid` as `user`,
GROUP_CONCAT(`Friendship`.`friend_id`) as `friends`
FROM
`User` LEFT JOIN `Friendship` ON `User`.`uid` = `Friendship`.`uid`
GROUP BY
`User`.`uid`
但是,从 方法 A 开始,获得 方法 B 表示可能是一项复杂的任务。考虑一下。
关于php - 哪种方法更好地将相关数据存储在表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19549372/