【问题标题】:Creating several database tables for user data?为用户数据创建多个数据库表?
【发布时间】:2011-12-16 05:01:33
【问题描述】:

我需要在数据库中有很多用户数据。现在,我一直在考虑创建两个表,users 只有 idusernamepassword > 和另一个表 userData,其中包含 namelastname 等其他所有内容。

这是首选方法吗?

【问题讨论】:

  • "这是首选方法吗?"首选什么?复杂?缓慢?隐私?
  • 我不会使用 id 和用户名存储密码,因为密码可以(并且应该)更改 - 您可能希望将它们存储在单独的表中,以便您可以存储密码历史记录,加密该表等等。取决于你的复杂性。

标签: database database-design


【解决方案1】:

最简单的设计是将所有字段放在一个表中。但是,从那时起,您可能需要考虑将这些信息拆分为多个表的原因有很多。根据您的描述,我无法判断是否有任何正当理由这样做。

如果您从一个表开始,您可能会发现拆分数据是有利的,原因如下:

  • 标准化。
  • 减少争用(应用的不同部分更新不同的信息)
  • 真正庞大的列列表(查看数据库的限制)
  • 其他?? (也许您将如何维护您的应用?)

简而言之,如果你走这条路,我会尝试从简单开始,并有理由选择更复杂的设计。

【讨论】:

    【解决方案2】:

    恕我直言,该设计没有任何问题。您可以拥有一个users 表并将其链接到具有附加信息的users_custom 表。只要与您的设计一致。请记住,为了获得任何其他用户信息,您将始终需要 JOIN 来获取该数据。

    对我来说,这是一个偏好问题,如果您认为此表会随着时间的推移而增长,请考虑您的设计,如果不只是将其全部保存在一个表中并正确索引您认为必要的列。

    您可以通过UserLog 表进一步构建价值变化的历史视图。

    【讨论】:

      【解决方案3】:

      是的 :) 理论上存在所谓的“范式”(3NF BCnF 等...)。使用它们,意味着将表格分成更小的表格:)

      【讨论】:

        【解决方案4】:

        我认为将所有内容放在一张桌子上可能会更好。假设您将强制使用唯一的用户名,所有字段(密码、名字和姓氏)都对用户名有功能依赖。因此,您可以将它们全部放在同一个表中,并且仍然具有规范化的数据库。

        虽然您当然可以将 first_name 和 last_name 分开到他们自己的表中,但如果您将所有这些字段保存在一个表中,查询会变得容易得多(更少的 JOIN)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-28
          • 1970-01-01
          • 1970-01-01
          • 2019-05-21
          • 1970-01-01
          • 2012-02-17
          相关资源
          最近更新 更多