小编Jos*_*hua的帖子

双向关系的数据库设计

我正在使用关系表对用户之间的双向关系进行建模。每个关系涉及两个且仅两个用户。关系的每个方向都允许 3 种不同的状态(待定、阻止、允许)。

为了减少内存开销,我决定使用以下系统来保留由单行而不是每个方向一行表示的整个关系。

较小的 user_id 始终存储为 user_a,较大的 user_id 存储为 user_b,因此不存在错误风险。

我正在寻求关于是否应该用单列(3x3 个选项)或两个水平列(各有 3 个选项)来表示两个方向的反馈。

IE

... | status_a_b

A_Pending_B_Pending
A_Pending_B_Blocked
A_Pending_B_Allowed
A_Blocked_B_Pending
A_Blocked_B_Blocked
A_Blocked_B_Allowed
A_Allowed_B_Pending
A_Allowed_B_Blocked
A_Allowed_B_Allowed
Run Code Online (Sandbox Code Playgroud)

... | status_a | status_b

Pending | Pending
Blocked | Blocked
Allowed | Allowed
Run Code Online (Sandbox Code Playgroud)

谢谢你!

database-design

5
推荐指数
1
解决办法
2470
查看次数

标签 统计

database-design ×1