【问题标题】:When is it bad to store a user setting or information in the main users table?什么时候在主用户表中存储用户设置或信息是不好的?
【发布时间】:2017-02-11 08:23:06
【问题描述】:

我仍在扩展和开发我的应用程序。

我目前有一个包含 35 列的用户表。我搜索了我的问题,但如果我做对了还是错了,我仍然有点困惑。有人说用户表,有人说做关系。

在用户表中,除了 id、用户名、电子邮件和密码,我还存储每个用户拥有的真实姓名、完整地址、年龄、个人资料图像名称、国家、社交网址、高级帐户(开/关)等

在我的应用程序中,每个用户都有一个个人资料页面,我通过用户名(唯一)查询用户表以查看用户是否存在,如果是,我从用户表中获取我想要的内容,而不是加入和建立关系表等

我应该保持原样还是更好地将用户表拆分为关系前。 user_details(简历、图片名称、国家等)和 user_settings(高级、电子邮件通知等)?

我与我的应用程序的其他部分有关系,但你我似乎无法理解为什么有些人更喜欢做一个关系表来存储用户国家和其他相关信息。任何想法将不胜感激。

【问题讨论】:

  • 没有正确或错误的答案,这是一个设计问题,您的设计应该反映您自己的业务需求。
  • 35 列是可以接受的,我想说的是,您应该在必要时开始将信息拆分到新表中。在您的示例中,我可能会将“社交网址”存储在另一个具有 1-N 关系的表中,仅此而已。那是因为一个用户可以有很多社交网址
  • 表格是否“大”(例如,简历、图片)?快速变化(喜欢)?
  • 就用户而言,这些表都不是很大,但是是的,我在用户表中存储了一个图片名称,bio。我用于个人资料查看的一般信息。至于社交链接,这些链接是固定的,因此用户此时无法添加更多。

标签: mysql database-design


【解决方案1】:

如果每个用户只有一个这些数据项,那么我认为打破它的唯一原因就是性能。就像您在每条用户记录中塞满了 50k 的数据,并且 90% 的情况下您唯一使用的就是名称和密码,那么这可能会减慢对这些记录的操作。

一般来说,我认为出于性能原因对数据库进行非规范化是一个坏主意,除非您发现在实际实践中存在性能问题,或者有充分的理由相信会出现问题。许多数据库因“性能改进”而遭到严重破坏,而这些“性能改进”是不必要的,或者并没有真正提高性能。

出于人类理解的原因,我有时很想打破记录,以减少混乱。是的,如果字段较少,则更容易掌握记录中的内容。但是您必须知道还有这些其他“附加”记录,并且当您确实关心它们时,是否必须拖入两条记录。所以总的来说我认为这是一个坏主意,但我不会排除它。

【讨论】:

  • 我认为由于我的用户数据库很低,所以我不应该拆分成关系。谢谢
【解决方案2】:

根据我的经验,您应该在连接的表中分开很多那些(如果您的表将有很多记录)。

例如,您应该多一张用于地址信息的表格和一张用于联系信息(电子邮件、电话、传真等)的表格,这样您就可以在这些表格中保存用户更改的历史记录,并且如果您不了解这些信息,则可以节省内存。只需要来自用户的原始数据(id、用户名、名称),因此您不必从一个表中加载所有数据。

您不需要拥有历史记录的其他设置(如活动/非活动、阻止、某些用户偏好),您可以保留在用户表中以便于访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 2020-03-17
    • 1970-01-01
    • 2014-06-06
    • 2019-04-01
    • 1970-01-01
    • 2015-12-18
    • 2022-01-25
    相关资源
    最近更新 更多