【发布时间】:2018-10-22 19:49:14
【问题描述】:
所以我的项目有一个“朋友列表”,并且在 MySQL 数据库中我创建了一个表:
名字A
名字B
主键(nameA,nameB)
这会导致很多条目,但是为了确保我的数据库是规范化的,我不知道还有什么方法可以做到这一点?
我的项目也使用 Redis。我可以将它们存储在那里。
当一个人加入服务器时,我必须搜索所有条目,看看他们的名字是nameA还是nameB,然后将这两个名字放在一起作为朋友,这也可能是低效的。
干杯。
【问题讨论】:
-
A 可能认为 B 是朋友,而 B 认为 A 只是熟人。您要考虑这一点(即每个用户都可以选择他们的朋友)还是只存储对(A-B = B-A)?
-
我不会使用名称作为主键。当两个名叫 John Smith 的人加入时会发生什么?为每个用户创建一个唯一 ID,将其用作您的主键。然后,您需要另一个将两个用户 ID 存储为一条记录的表来显示关系。
-
@ThorstenKettner B 必须接受 A 的友谊才能被放入数据库,基本上,每个人都需要一个朋友列表。不知道如何将它放入数据库,这是我想出的。
-
但是B可以接受A的友谊,而拒绝C的友谊吗?如果 B 拒绝了 C 的友谊,C 还能称 B 为朋友吗?这是你必须决定的事情。 A|B 是否应该与 B|A 有其他含义?
-
这和你需要的差不多。希望能帮助到你。 stackoverflow.com/questions/379236/…