【问题标题】:Is it bad design to use json_encode data instead of creating new table?使用 json_encode 数据而不是创建新表是不好的设计吗?
【发布时间】:2015-03-17 20:29:32
【问题描述】:

我有一个订单,每个订单都有一些与之相关的产品。我想保存每个产品的名称、价格和简短描述。

我知道正常的做法是创建两个表ordersproducts,但是如果我不需要专门查询产品怎么办?json_encode产品可以吗?用 PHP 在 order 对象上保存并保存为 mysql 中 orders 表上的列?

【问题讨论】:

  • 想象一下,如果你以后想查询产品......
  • 看不到产品的人如何下订单?
  • 对于 RDBMS(旨在处理信息),唯一真正“不错”的情况是它是真正不透明的数据(想想二进制文件的内容)——也就是说,它从不被搜索,从不被部分更新/读取,从不参与任何关系.它仅作为不透明的数据块(不是信息)存在。在这种特殊情况下,因为那些“从不”是想要的东西,所以它“不好”——例如。您想要 DRI 关系,您想要 能够查询。所以只要正确使用 RDBM 并继续前进..
  • Is it okay? 是非常主观和有条件的。你有没有尝试过?结果如何?有缺点吗?
  • 考虑其他用途,您将使用单独的表格:每个订单的平均商品数量、特定商品需要订购的库存数量等。有许多用于在他们自己的表中拥有订单的产品。唯一不这样做的原因是试图让代码更容易(这最终会导致更多问题)。

标签: php mysql database database-design


【解决方案1】:

如果数据结构一致(听起来确实如此),您应该创建一个表。

JSON 或其他序列化格式适用于不一致的数据。

将产品信息直接存储在订单上很方便(这是 NoSQL 数据库吸引力的一部分),但除非产品之间的数据结构不同,否则您最好遵循在关系中创建数据的标准方式。


JSON 有用的用例:

假设您正在跟踪一个包含结帐前事件信息的事件流。您可能想要存储不一致存储的数据。您可以将以下内容存储到orders 表的order_analytics 列中。

{
    type: "page_visited",
    data: {
        url: "/example/1",
        title: "Example Page"
    }
},
{
    type: "added_to_cart",
    data: {
        product_id: 4,
        product_name: "Example Product"
    }
},
{
    type: "removed_from_cart",
    data: {
        product_id: 4,
        product_name: "Example Product"
    }
}

【讨论】:

    【解决方案2】:

    当您声明“不需要查询产品”时,您可以serialize() 您的数据和unserialize() 读取它,这是非常常见的用法和完全有效的做法。它不会是 JSON,但您可以在 unserialize() 之后轻松将其转换为 JSON。

    【讨论】:

    • 这只是 json-encoding 的替代方案,但这不是他要问的问题。他在问将数据序列化并将其存储在单个列中而不是将其存储在第二个表中是否有意义。
    • 实际上他在问是否可以将数据存储为纯 JSON 字符串格式,如果他愿意,他也可以。如果该数据是静态的并且永远不会改变,我不明白为什么不这样做。对吗?
    • 他当然可以。不过,他特别说“这是糟糕的设计吗”,表示他问的是这是否是最佳实践,而不是是否可能。
    • 他问了,没有说。这不是一个糟糕的设计,您可以将 JSON 字符串存储在一个 blob 中并根据需要使用它,它是完全有效的,并且是存储已处理且永远不会更改的数据的好方法。
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多