【问题标题】:Database design for user data用户数据的数据库设计
【发布时间】:2011-10-21 03:03:32
【问题描述】:

我正处于一个新项目的早期阶段。由于我们正在迭代且相对较快地开发(在进行时设计产品),有时可能会更难为某件事选择“正确”的设计。我们倾向于选择一些东西并在必要时进行重构。

现在我正在研究用户数据模型。我的方法是基本上有 2 个表:一个包含基本登录类型数据(用户名、创建日期、凭据等),另一个表用于存储我们需要与用户关联的 Key、Value 数据。

这使我们能够在早期阶段非常灵活地处理我们与用户存储的数据。假设我们不需要对数据进行复杂的查询(我们现在还不需要),这可以实现良好的可扩展性。

这也是我以前用过的一种模式。

我最大的问题是,为什么从长远来看这是一个糟糕的设计?

【问题讨论】:

    标签: database-design entity-attribute-value


    【解决方案1】:

    你应该问的问题是:

    • 我们能否在设计应用程序时预测所有键?
    • 我们的应用程序是否对不同的 Key 有任何不同的处理方式(即,您的代码中是否有与 if (Key=="something") 等效的位置)?

    如果您可以提前为所有可能的键设计应用程序,并且您的应用程序以特定方式处理它们,那么您应该在“主”表中添加适当的列并完全停止使用“键值”表.

    如果您可以预测所有键,但您对其中一些键进行通用处理,则可以保留您的结构,或者您可以将您特别处理的键移到“主”表的列中,并将其余键留在“键-值”表。

    如果您无法预测所有可能的键(即用户将能够添加自己的键),甚至那些您可以始终以通用方式处理的键,请保留当前结构。

    【讨论】:

      【解决方案2】:

      正如你自己所说:

      “如果我们不需要对数据进行复杂的查询(我们现在还不需要),这可以实现良好的可扩展性。”

      因此,一旦您需要“复杂”的查询,这将变得低效,无论是在经过的时间方面,还是在正确编写查询本身所需的时间方面。

      也许您可以逐步解决这个问题,并在给定子集“在野外”使用足以保证其稳定后立即将一些键值对迁移到实际表字段?

      一般来说,关系模型有其优势,管理大量键值“伪字段”不是其中之一。为此,您可能想使用 NOSQL 产品。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 2012-04-29
        • 2012-09-17
        • 2017-01-04
        • 2018-01-03
        相关资源
        最近更新 更多