2

我试图避免项目中的反模式,我必须允许用户创建、修改和删除表字段。所以我正在寻找在表中存储 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 = 1AND的所有产品have_some_individual_label = value。第二个参数可以是一个或多个(它将用于过滤器和分析)。如果这是一种不好的方法 - 什么会更好?谢谢!

4

2 回答 2

1

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

实体-属性-价值模型模型:

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')
;
于 2012-11-18T13:30:41.860 回答
0

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

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

这可能是一种更好的方法,即使它给表格带来了一些复杂性。

于 2012-11-18T13:33:53.617 回答