Mysql架构最佳实践:用户属性

时间:2010-12-05 18:20:35

标签: mysql architecture

我的用户有一个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          |

第二种选择的真正好处是什么?

4 个答案:

答案 0 :(得分:4)

这里没有真正的优势,只有缺点。表之间存在1:1的关系,现在您必须加入这两个表才能获得用户的验证状态。此外,现在还有更多可能的情况:可以验证用户(1)未验证(0)或记录可能不存在。

除非存在1对多的关系,否则最好将这些额外字段放在同一个表中。例如,用户可以拥有您存储在单独表格中的帖子,朋友,图片,因为您不知道需要保存多少。

答案 1 :(得分:2)

第一种方式,它占用的空间更少,只要是1:1的关系,也可能更快。

答案 2 :(得分:0)

分离点是允许一对多,多对一或多对多的记录。只要您的数据字段中没有一个可能包含相同的信息,就首选平面表。

答案 3 :(得分:0)

我可能会稍微简化一下。由于具有指示成员资格/验证的标志没有价值。表格分离适合您。此外,您不需要在每个表中都有userId。您可能有一个UserMember表,其中包含用户和成员的身份。所以建立这种关系就足够了。

此外,如果你有一个1:1的关系,你也可以在同一个表中拥有该标志。拥有1:x的关系更适合规范化。