【问题标题】:What are useful architectures for storing user settings?存储用户设置的有用架构是什么?
【发布时间】:2015-12-18 06:17:35
【问题描述】:

我想存储一些用户设置,我想到了 3 个选项,因为这是我的第一个项目,我想以正确的方式开始它,我不知道哪种方式是最佳方式..

  1. 将单个设置直接存储在用户表的列中

  2. 拥有一个 user_settings 表,其中包含 setting_name、setting_value 和 user_id 列

  3. 在用户表中存储一个 JSON 字符串,在名为“user_settings_json”的列中

在设计分析中,我注意到 wordpress 将其存储在单独的表中,但我不确定每个应用程序都需要这样做(因为我的用户设置没有 wp 那么多)

我正在使用 Laravel、PHP、javascript/jquery。

在设计、可维护性和性能方面,你们认为哪个最有用、总体上更好?

【问题讨论】:

  • 当然是选项 1!想想 ACID 和标准化的好处
  • 这是“个人偏好”和“可搜索性”的混合体。您是否要查找具有特定设置的用户(例如,通过电子邮件“选择退出”或“选择加入”)?这几乎消除了选项 3。您是否有很多设置可能会更改,或者可能与某些用户无关?那砍掉了第 1 点。您使用的是不能轻松处理连接或数据透视表的 ORM 吗?这样就去掉了 2 号。就我个人而言,2 号是我的偏好,但这确实取决于具体情况。
  • @bub 选项 1 一旦您有足够的设置(或者这些设置不适用于所有用户),就会变得很糟糕。我宁愿没有一个有 100 多列的表,这些列是半空的。
  • @samlev 如果您有 100 个设置并且不想只有 1 个表,则生成 5 个 20 列的表
  • @bub - 我真的希望你在讽刺。

标签: php database-design laravel-5


【解决方案1】:

存储一个 JSON 字符串?不!

您希望能够隔离设置,只需查询您需要的内容。因此,请将其放在单独的列中!

至于是否必须制作单独的表格的问题,不,您不必这样做。当您刚刚获得一些简单的设置时,您可以将列添加到现有的用户表中。请注意此处的限制。如果您确实需要高级设置,我建议您使用单独的表格。最好过早做。并非每个设置都可能适用于每个用户。例如,当您拥有可以进行更多设置的高级帐户时。所以,把它分开是我会做的。

顺便说一句,如果列已经在名称中包含“setting”的单独表中,我不会让这些列以“setting_”开头。

结论:选项 2 :)

【讨论】:

  • 我会在此说明,根据用户数量(我说的是几十万)和速度,一些设置适合提升到列具体行动。
  • 课程设置与彼此高度相关可以连接成一个字符串或一些。
  • @bub ,为什么会这样?我们谈论的意义有多大?您可能不需要一次完成所有设置..
  • 当然,这取决于存储的数据量,想象一下当您查询一组具有相似设置的用户时非常常见但特殊的情况。
  • 好的,让我们以比较用户之间的设置为例。连接的字符串可能有不同的顺序,很难标记。您将不得不反序列化,这也需要时间.. 对吗?
猜你喜欢
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
相关资源
最近更新 更多