2010-12-05 76 views
1

我有一个MySQL表与我的用户...每个用户有像Verified(是/否),成员(是/否)等各种属性..我不需要解释更多。 。是一个很常见的情况......Mysql体系结构最佳实践:用户属性

我一直alwasy使用来构建我的单排这样的,也许对lazyness或仅仅是因为我从来没有建立大DB到目前为止表...

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

您可能想要熟悉[数据库规范化](http://en.wikipedia.org/wiki/Database_normalization) – khachik 2010-12-05 18:28:46

回答

4

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

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

+0

好极了,实际上就是我所做的,现在我明白了......谢谢! – Francesco 2010-12-06 16:40:49

2

做它的第一种方式,它消耗更少的空间,并且只要它是1:1关系,它的速度也可以提高。

0

分离的关键是允许一对多,多对一或多对多的记录。只要你的数据字段都不可能包含相同的信息,平坦的表就是首选。

0

我可能会简化一点。由于没有指示成员/验证的标志是有价值的。表分离为你做。另外,你不需要在每个表中都有userId。您可能有一个UserMember表,它包含用户和成员的身份。所以建立这种关系就足够了。另外,如果你有1:1的关系,你也可以在同一张表中放置标志。具有1:x关系对于标准化更具有适用性。