【MySQL】替换件需求

先上个表结构吧:

CREATE TABLE `tm_part_replace` (
  `ITEM_ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `OWNER_CODE` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '-1' COMMENT '经销商代码',
  `PART_NO` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '配件代码(原始)',
  `OPTION_PART_NO` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '替换件代码',
  `SHIFT_DIRECT` int(8) DEFAULT NULL COMMENT '替换方向 10041001单向 10041002双向',
  `IS_DELETED` tinyint(4) DEFAULT NULL COMMENT '逻辑删除 0否 1是',
  `CREATE_AT` datetime DEFAULT NULL COMMENT '创建时间',
  `CREATE_BY` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
  `UPDATE_AT` datetime DEFAULT NULL COMMENT '更新时间',
  `UPDATE_BY` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人',
  `RECORD_VERSION` int(11) DEFAULT NULL COMMENT '乐观锁记录',
  PRIMARY KEY (`ITEM_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='配件替换件表(确认)';

配件存在着一些替换关系

就是配件B可以代替配件A去使用,在需要使用配件A的情况没有配件A,可以使用配件B来代替

这是一种情况,还有一种情况是,配件A可以替换配件B,配件B也可以替换配件A使用

那这种替换是双向的,所以就是两种替换情况,单向的和双向的

零件主表存储了各种零件记录,只取零件代码作为关键字段存储

替换件和配件存储都是主表的零件代码字段来构成替换关系。

如果是单向,就只存储一条记录(A -> B)

如果是双向,就要存储两条记录,表示B也是A的替换件(A -> B + B -> A)

单向10041001

双向10041002

字典数据表示

导入的数据:

样本数据用例:

mysql> SELECT * FROM tm_part_replace;
+---------+------------+-----------------+-----------------+--------------+------------+-----------+-----------+-----------+-----------+----------------+
| ITEM_ID | OWNER_CODE | PART_NO         | OPTION_PART_NO  | SHIFT_DIRECT | IS_DELETED | CREATE_AT | CREATE_BY | UPDATE_AT | UPDATE_BY | RECORD_VERSION |
+---------+------------+-----------------+-----------------+--------------+------------+-----------+-----------+-----------+-----------+----------------+
|       1 | -1         | TEST-PART-NO-06 | TEST-PART-NO-04 |     10041001 | NULL       | NULL      | NULL      | NULL      | NULL      | NULL           |
|       2 | -1         | TEST-PART-NO-06 | TEST-PART-NO-03 |     10041002 | NULL       | NULL      | NULL      | NULL      | NULL      | NULL           |
|       3 | -1         | TEST-PART-NO-03 | TEST-PART-NO-06 |     10041002 | NULL       | NULL      | NULL      | NULL      | NULL      | NULL           |
|       4 | -1         | TEST-PART-NO-05 | TEST-PART-NO-04 |     10041001 | NULL       | NULL      | NULL      | NULL      | NULL      | NULL           |
|       5 | -1         | TEST-PART-NO-03 | TEST-PART-NO-04 |     10041002 | NULL       | NULL      | NULL      | NULL      | NULL      | NULL           |
|       6 | -1         | TEST-PART-NO-04 | TEST-PART-NO-03 |     10041002 | NULL       | NULL      | NULL      | NULL      | NULL      | NULL           |
+---------+------------+-----------------+-----------------+--------------+------------+-----------+-----------+-----------+-----------+----------------+
6 rows in set (0.03 sec)
原文地址:https://www.cnblogs.com/mindzone/p/15503661.html