使用json_encode数据而不是创建新表是不好的设计?

时间:2015-03-17 20:29:33

标签: php mysql database database-design

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

我知道正常方法是创建两个表ordersproducts,但是如果我不需要专门查询产品会怎么样?是否可以带有PHP的订单对象上的json_encode个产品,并将其保存为mysql中orders表的一列?

2 个答案:

答案 0 :(得分:1)

如果数据结构一致(听起来像是这样),你应该创建一个表。

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

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


JSON有用的用例:

假设您在结帐前跟踪的事件流中包含有关事件的信息。您可能希望存储未一致存储的数据。您可以将以下内容存储在order_analytics表的orders列中。

{
    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"
    }
}

答案 1 :(得分:-3)

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