表设计用户的信息以及登录凭据?

时间:2010-06-29 00:27:32

标签: database performance database-design information-schema

最初我想请你忘记散列密码或与密码相关的w / e,这个问题与保护密码等无关,我知道/了解应该如何做。

考虑读/写性能 - 构建一个或多个表时,存储相关数据的最佳方法是什么?

单个表格,例如:

  

表用户:id,用户名,密码,哈希,电子邮件,   团体,访问,地址,电话,   父母,ts_created,ts_update

多个表格,例如:

  

表用户:id,用户名,密码,   哈希,电子邮件,组,访问,   ts_created,ts_update

     

表用户的信息:id,user_id,   地址,电话,父母,ts_created,   ts_update

如果您的用户的信息字段可能随着时间的推移而增长怎么办? - 您应该如何处理它?<​​/ p>

  

例如新字段:   birthday_date,评论,情况

有两个表在查询上比单个表慢吗?

如果在这种情况下有多个表只是为了保持一个包含分离数据的好设计,那么这是否意味着由于性能原因它根本没用?

如果你想要真正的sql示例,请告诉我,我会废弃一些内容来更新。

2 个答案:

答案 0 :(得分:5)

根据您要存储的数据,您可能需要更多表格:

  1. 如果您使用密码策略该怎么办? 用户无法重复使用的未来 以前用过的密码?
  2. 用户可以有多个电子邮件吗?
  3. 用户可以属于多个组吗?
  4. 用户可以拥有多个电话号码吗?
  5. 只有一位家长?还是两个?是系统中的父级吗?您存储了关于父母的哪些信息?
  6. 存储认为这样可能值得存储在自己的单独表中,这意味着将来它应该更容易维护。您需要考虑系统将如何变化。至于性能,如前所述,只要您创建正确的索引并正确使用数据库,它就不应该成为问题。

答案 1 :(得分:4)

您的多表设计看起来很合理 - 一个表包含有关用户的数据,另一个表包含有关此人的数据;如果您只需要用户数据(例如,用于检查访问权限),则人员数据无关紧要。

您建议的新字段可能会作为新列进入人员表。

使用2个(或更多)表并将它们连接在一起不会显着减慢你的速度 - 它甚至可以提高性能(具有良好的索引 - user_id上的唯一索引将是一个良好的开端):

  • 在SELECT上,速度差异可以忽略不计
  • 在INSERT / UPDATE上,在大多数情况下,这将比单个表更好(例如,如果“users”表有很多读取,对人的写入不会阻止它们 - 而对于一个表,它可能会发生)< / LI>

另外,我个人发现使用两个较窄的表而不是单个宽表更容易(在代码和数据库管理中)。