【问题标题】:Storing lots of user information into one MySQL table?将大量用户信息存储到一个 MySQL 表中?
【发布时间】:2011-10-27 21:37:27
【问题描述】:

我正在开发一个应用程序,每个用户都必须为自己填写一份详尽的个人资料。

用户资料的第一部分由大约 25 个左右的一般信息字段组成

用户资料的下一部分是他们根据一组标准列表评估自己的部分。即,“评价你的烹饪水平”,然后他们在一个单选框中打勾,从 1 到 5,还有一个复选框,可以检查他们是否对自己评价的活动/主题“特别感兴趣”。

其中大约有 40 个是他们自己评价的。

所以我的问题是,我应该如何存储这些信息,我的用户表中是否应该有每个字段和项目的列?这将是近 70 个字段

或者我应该为 user_profile 和 user_self_evaluation 设置一个表,并在其中设置每个列并与用户建立一对一的关系?

【问题讨论】:

    标签: mysql forms relational-database normalization


    【解决方案1】:

    使用单独的表格。这样当你只更新自我评价时,就不需要更新user_profile表了。这里的想法是将经常更新的字段分隔在另一个表中,将很少更新的字段留在另一个位置。如果表变大,并且用户名/密码在单独的表中,则通过用户名/用户名查找的性能不会受到大量更新查询的影响,如果更改则不会导致整个站点崩溃self_evaluation 表。

    但如果您打算添加新的评估,我建议您采用不同的设计: 具有 25 个配置文件字段的 user_profile 表 self_evaluations 表,带有 id 和 name,以及有关问题的任何元信息;每次评估有 1 条记录 user_profile_evaluation with userid、evaluationid、score、extra - 对用户的每次评估都有一条记录。

    这样您的架构将更加灵活,您无需更改表即可添加另一个评估。

    【讨论】:

    • +1 用于三表解决方案 - 与 user_profile_evaluation 作为 user_profile 和 self_evaluations 之间的链接表的多对多关系。
    【解决方案2】:

    或者我应该为 user_profile 和 user_self_evaluation 设置一个表, 并在其中有每个列并具有一对一的关系 与用户?

    是的,如果您知道以后不会扩展表格,您应该这样做。另一个选项太糟糕了。


    如果您认为将来会扩展评估,那么您可以这样做:

    user_self_evaluation

    user_id | evaluation_type | evaluation_value
    1       | cooking         | 5
    1       | singing         | 3
    2       | cooking         | 2
    2       | singing         | 5
    

    使组合列(user_id、evaluation_type、evaluation_value)成为唯一的或主要的。

    【讨论】:

      【解决方案3】:

      我认为后者更好,一个有 70 列的表格真的很难看,如果你尝试管理它会变得更糟。

      当每个问题都是多项选择时,您还可以在一个字段中为每个答案添加数字。

      假设您有四个问题,有 4 个选项:

      您可以将它们保存为 1433 在名为 answerers 的一列中,(第一个问题是答案 1,第二个答案是 4,第三个答案是 3,最后但并非最不重要的问题 4 是答案 3)

      这里只是给你一些选择。

      但如果我必须在一对一关系和一张表之间进行选择,我会选择一对一关系,因为以后更容易管理。

      【讨论】:

      • 单个表中的 70 列并不是特别大 - 这里的问题是每个用户与其评估答案之间存在一对多的关系。此外,所有答案值的名为 answerrs 的单列违反了第一范式。
      • 复习我5年前的回答,我还是个菜鸟哈哈
      猜你喜欢
      • 1970-01-01
      • 2020-10-08
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 2013-01-05
      • 2021-08-26
      • 2016-10-07
      相关资源
      最近更新 更多