2013-06-20 59 views
0

假设我想创建一个数据库来存储帐号和用户的个人细节,然后我应该创建一个表我应该使用外键或不

Only One table Table User 
Username(varchar255)|User_id(int)|Name(varchar255)|Sex(0,1,2)|DOB(Date)|Password(char64)| 

OR 两条表与外键

Table User_Login 

    User_id(int)|Username(varchar255)|Password(char64)| 

and table User_Detail 

    User_id(int)|Name(varchar255)|Sex(0,1,2)|DOB(Date)| 
+3

什的读你是否想 - 为什么? –

+0

我不是db专家,所以我发表我的意见在评论:如果你有一个1-1关系,我认为做一个外键是没有意义的,因为你需要做一些无用的连接。 –

+2

如果你想在用户转型时支持用户性别的历史记录,并进入证人保护计划并获得多个出生日期,那么通过一切手段使用2表结构。 –

回答

1

问自己这些问题。

用户是否有一个或多个用户名?

用户是否有一个或多个密码?这包括以前的密码,如果你想在一段时间内检查唯一的密码。

用户是否有一个或多个名字?

用户是否有一个或多个性别?

用户是否有一个或多个出生日期?

如果问题的答案是“one”,那么该列属于用户表。

如果问题的答案是“多于一个”,那么该列属于不同的表格。

该过程被称为database normalization的第一范式。

+1

根据您的回答,从来没有任何理由需要1-1表,如果您想避免NULL列(实际需要对于“更高”的正常形式) – landons

+0

@landons:你正在描述第四种正常形式。我们先来看看第一,第二和第三。 :-) –

+0

不够公平;)。有人对上面的评论感到有点惊讶,说1-1是毫无意义的。 – landons

0

我认为如何定义一个表,3NF和BNCF(他们将有据可查)的两种流行方式。

的规则是:

  • 应该没有dulicate列(容易的)
  • 删除不完全依赖于主键(看属性和它们是否有意义站立时列独自那么他们应该是在一个单独的表(类似的东西)

其相当难以把握第一次这么有1NF,2NF,3NF和BNCF

相关问题