mysql - friend 表最好的方法

标签 mysql database database-design

+-----------------------------------+
| fID | personA | personB | fStatus |
|-----------------------------------|
|  1  |  u1ID   |   u2ID  |    1    |
|  2  |  u3ID   |   u4ID  |    0    |
|  3  |  u1ID   |   u3ID  |    1    |
+-----------------------------------+

Status Column Codes:
0: Pending (personA wants to be friends with personB)
1: Friends (personA with personB)

* On removal request by either side > delete the corresponding row

我想要一个简单的 MySQL 表,通过它我可以在我的网站上实现一个友谊选项。做 friend 与否就是它所需要的全部。

现在我想知道实现此目的的最佳方法,以及我是否遗漏了什么。我想查询每个用户的好友,用户应该能够在他们的好友列表中添加或删除彼此。

最佳答案

由于每个人都可以成为另一个人的 friend ,因此您需要实现 NxM(多对多)关系。就像您所做的那样,在关系数据库管理系统中,在另一个表中转换为“连接”。

http://weblogs.asp.net/zeeshanhirani/archive/2008/08/21/many-to-many-mappings-in-entity-framework.aspx

在您的示例中,也许您可​​能想添加一列以了解谁向其他人请求了友谊。

编辑:我可能会删除 fId 列并创建列(外键)personA 和 personB 的组合主键。这样,数据库将避免对同一个人有多个请求,也可以避免 personA 向 personB 和 personB 请求友谊,而不是仅仅接受它,向 personA 请求友谊,从而产生两条记录!

edit2:您可以使用状态字段来存储友谊请求“所有者”:

0: pending, A asked to B
1: pending, B asked to A
2: friends

edit3:你不需要过期时间(request_date 列)吗?如果好友请求在 3 个月内未得到答复,则该请求将过期并被删除。

关于mysql - friend 表最好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9175942/

相关文章:

c# - 使用 C# 在 Mysql 上出现死锁 - "Lock wait timeout exceeded; try restarting transaction"

mysql - 对列进行限制的建模数据库

sql - 具有多个多对多关系的数据库建模

php - 基于用户的网站的 mySQL 表结构

java - 如何将两个 java.sql.Date s 存储到数据库表中,当它们被截断时?

MySQL 数据库,带有用户创建的带有自定义列号的表

php - 从多个表中检索多行

php - 与名称中包含撇号的名称匹配

mysql - 与 "Create TABLE as"类似的功能,但要添加更多信息

mysql - 应该索引什么来提高性能?