MySQL 使用多列还是用 JSON 列

现有 project 项目 和 order 订单两个表。1个 project 可能会有 n 个 orderproject 中的参数可以修改,订单在生成时要保存 project 中的配置(类似快照),后续如果 project 发生变更,确保对已生成的订单不会产生影响。

问题来了,请问我是把项目表中的配置字段全部照搬在订单表里加一遍,还是搞个新的 JSON 字段统一存起来(JSON字段中的数据不会变更,仅用于查询,可能需要做虚拟列,函数索引)?

我未曾珍惜的,我不再拥有?‍?️
讨论数量: 3
yangweijie

几个字段 就单独加 很多就 JSON

1年前 评论

配置字段是否重要?需不需要知道project中配置字段每次修改的变更记录,后续是否需要回溯? 1、如果只是配置字段本省,不用回溯,那就json 2、如果需要类似回溯,最好是单独设计一张变更记录副表

1年前 评论

楼上的方案比较好,搞一个订单附表。

CREATE TABLE `orders_append` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `orders_id` bigint(20) unsigned NOT NULL COMMENT '总订单id',
  `order_key` varchar(255) NOT NULL COMMENT '订单属性键',
  `order_value` varchar(2048) NOT NULL DEFAULT '' COMMENT '订单属性值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='订单附表'

然后适当的设置key的前缀。
例如 product_name ,表示下单时项目的名称。
这样,和该订单的与peoject无关的项,区分开来。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!