Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 以有效的方式将昵称和psswrd存储在DBMS中_Database Design - Fatal编程技术网

Database design 以有效的方式将昵称和psswrd存储在DBMS中

Database design 以有效的方式将昵称和psswrd存储在DBMS中,database-design,Database Design,您会选择以下两个选项中的哪一个,为什么 备选案文1: Customer -> CustomerID_PK, DateOfBirth, Address, Username, Password 备选案文2: Customer -> CustomerID_PK, DateOfBirth, Address CustomerInfos -> CustomerID_PK, Username, Password 您不知道经理存储每个客户以前的所有用户名和密码是否重要。您只需知道,每个客户

您会选择以下两个选项中的哪一个,为什么

备选案文1:

Customer -> CustomerID_PK, DateOfBirth, Address, Username, Password
备选案文2:

Customer -> CustomerID_PK, DateOfBirth, Address
CustomerInfos -> CustomerID_PK, Username, Password

您不知道经理存储每个客户以前的所有用户名和密码是否重要。您只需知道,每个客户都可以随时更改其密码和昵称。不管安全方面如何,您会采用哪种方法?

设计良好的数据库是物理世界的良好模型。所以,在决定像你这样的问题时,想想世界上发生了什么

你的顾客来了。客户应该具备哪些属性?每个客户固有的属性是什么?客户是自然人,因此他们每个人都有一个独特的出生日期。在您的系统中,每个客户只有一个用户名和密码。这些是显而易见的特征

  • 用户名
  • 密码
  • 出生日期
您还可以决定您的客户只能有一个地址。或者,根据您的业务规则(家庭、办公室?),客户可能有多个地址。如果您选择“恰好一个地址”业务规则,则该地址也是客户实体的一个属性。如果没有,您将有一个单独的实体,名为Address,看起来像这样。(类型为“家”、“办公室”等)

如果需要为客户存储以前的用户名/密码组合,则需要单独的凭据实体。每个客户都有一个或多个凭据。所以凭证表看起来像这样

(credential_id PK, customer_id FK, username, password, effective_date)
无论如何,为了数据工程的清晰性,您应该使用一个表来存储一个实体。因此,我建议选择1

这是一个切实可行的建议。随着时间的推移,模式只会得到更多的表,所以避免额外的表是很好的。包含具有相同代理项(自动递增)主键的多个表的模式更难理解和维护,并且这些额外的表是不必要的

例外情况:您已经有数百万客户,需要添加更多属性,但您无法承受重新组织表和添加列的停机时间。

您应该询问“您不知道”。
(credential_id PK, customer_id FK, username, password, effective_date)