mysql - 在mysql表中存储和查询json

标签 mysql sql database database-design data-modeling

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

最佳答案

If this is bad approach - what would be better one?

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')
;

关于mysql - 在mysql表中存储和查询json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440504/

相关文章:

php - 使用 JS 或 PHP 显示文件夹中的随机图像而不重复

python - Django 中的原始 SQL 查询

mysql - 为什么 Mysql 允许我插入没有具有 NOT NULL 约束的字段的记录?

java - Hibernate Projection 将结果返回为对象

database - 如何列出每个 EC2 实例的使用时间

java - 我应该如何使用 java servlet、JSP 和 Tomcat 管理与数据库的连接

php - Laravel 中不能有多个身份验证表,我想在数据库中使用链接表,需要有关创建链接表的建议

sql - 我应该在哪些列上创建索引

sql-server - 为什么长时间运行的查询的连接数不断增加?

mysql - Mysql安全安装所需信息