【问题标题】:store and query json in mysql table在mysql表中存储和查询json
【发布时间】:2012-11-06 14:09:38
【问题描述】:

我试图避免项目中的反模式,我必须允许用户创建、修改和删除表字段。所以我正在寻找在表中存储 JSON 数据。例如我有餐桌产品:

Products
----------------
id,
user_id,
created,
modified,
price,
_custom <-- there will be stored additional columns for each product needs
        {"adjustment":0.13, "weight":14.60, "have_some_individual_label":"value"}

但我看不出如何在查询中包含_column 参数。例如,如何查询user_id = 1 AND have_some_individual_label = value 所在的所有产品。第二个参数可以是一个或多个(它将用于过滤器和分析)。如果这是一种不好的方法 - 什么会更好?谢谢!

【问题讨论】:

    标签: mysql sql database database-design data-modeling


    【解决方案1】:

    如果这是一种不好的方法 - 更好的方法是什么?

    Entity–attribute–value model 模型:

    CREATE TABLE `ProductInfo` (
      `ProductID` BIGINT UNSIGNED NOT NULL,
      `AttributeKey` VARCHAR(20) NOT NULL,
      `AttributeVal` VARCHAR(20),
      PRIMARY KEY (`ProductID`, `AttributeKey`),
      FOREIGN KEY (`ProductID`) REFERENCES `Products` (`id`)
    );
    
    INSERT INTO ProductInfo
      (`ProductID`, `AttributeKey`              , `AttributeVal`)
    VALUES
      (         1 , 'adjustment'                ,         '0.13'),
      (         1 , 'weight'                    ,        '14.60'),
      (         1 , 'have_some_individual_label',        'value')
    ;
    

    【讨论】:

      【解决方案2】:

      您建议的 JSON 方法可能适用于您只想比较等价的情况。我宁愿建议将额外的单个属性存储在单独的表中,并通过其 ID 将其链接到 Products 表。

      CREATE TABLE custom_attrs(prodID int, customAttr varchar(32),
             customValue varchar(32));
      

      这可能是一种更好的方法,尽管它会给表格带来一些复杂性。

      【讨论】:

        猜你喜欢
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 2015-03-09
        • 1970-01-01
        • 2012-08-19
        • 2012-01-07
        • 2013-06-28
        • 2020-02-25
        相关资源
        最近更新 更多