我的用户有一个mysql表...每个用户都有各种属性,如已验证(是/否),成员(是/否)等。我不需要解释更多..这是一个非常常见的情况。 ..
我一直在使用像这样的单行来构建我的表,可能是为了懒惰,或者仅仅因为我从未构建过大数据库...
userId | userName | Verified | Member
---------------------------------------
3213 | Jon | 1 | 0
但我想知道将它构建到单独的表中是否有任何好处,并在以后创建关系,如
用户表
userId | userName |
-------------------
3213 | Jon |
会员资格表
memberId | userId | Member |
--------------------------------
555748 | 3213 | 0 |
验证表
memberId | userId | Verified |
----------------------------------
555748 | 3213 | 1 |
第二种选择的真正好处是什么?
答案 0 :(得分:4)
这里没有真正的优势,只有缺点。表之间存在1:1的关系,现在您必须加入这两个表才能获得用户的验证状态。此外,现在还有更多可能的情况:可以验证用户(1)未验证(0)或记录可能不存在。
除非存在1对多的关系,否则最好将这些额外字段放在同一个表中。例如,用户可以拥有您存储在单独表格中的帖子,朋友,图片,因为您不知道需要保存多少。
答案 1 :(得分:2)
第一种方式,它占用的空间更少,只要是1:1的关系,也可能更快。
答案 2 :(得分:0)
分离点是允许一对多,多对一或多对多的记录。只要您的数据字段中没有一个可能包含相同的信息,就首选平面表。
答案 3 :(得分:0)
我可能会稍微简化一下。由于具有指示成员资格/验证的标志没有价值。表格分离适合您。此外,您不需要在每个表中都有userId。您可能有一个UserMember表,其中包含用户和成员的身份。所以建立这种关系就足够了。
此外,如果你有一个1:1的关系,你也可以在同一个表中拥有该标志。拥有1:x的关系更适合规范化。