我有一张ai_order
表。
CREATE TABLE `ai_order`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`product_id` INT(11) NOT NULL,
`quantity` INT(11) NOT NULL,
`number` VARCHAR(20) NOT NULL,
`addDate` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `orderProduct`(`product_id`,`number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
由于来自客户的订单包含许多数量的产品,这意味着为单个订单插入多行,例如订单包含50个产品,导致在ai_order
表中创建50行。现在要识别一个单独的订单,我已经给出了一个数字字段,该字段将保存单个订单的唯一订单号(序列号),即它将order_id
字段分组number
。下面是演示如何将数据存储在表格中的表格。
将有许多表将从此父表扩展。虽然一切都是正确的,我看到的问题是number
列一次又一次地重复该值,考虑到我要将200
产品列为一个订单,我将不得不重复number
列在所有200
行中一次又一次地重视,这给我带来了一些难看的感觉。
现在解决这一危机的方法是将订单number
存储在另一个表中。(尽管重复是无法避免的,但不是问题)。例如,如何从number
表中删除ai_order
列并以这种方式存储。
CREATE TABLE `ai_order_number`(
`order_id` INT(11) NOT NULL,
`number` VARCHAR(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我想了解如何处理这种方法?你会选哪一个。第一个还是后一个?任何有关改进的建议都将受到赞赏。
谢谢。答案 0 :(得分:1)
我会选择第一种方法,因为重复该表中的订单号没有任何问题,因此无需创建第二个表,无论如何都会重复订单号。
我会做的是,可能会从id
列中删除并使number
成为表的主键,因为您更有可能按顺序执行搜索,联接等数字而不是id
列。 number
列也可以自动生成,因此不会出现问题。
答案 1 :(得分:1)
我认为保留一个单独的表不是一个好主意,因为order_number与订单直接相关。
如果您仍然打算保留不同的表格,请将“add_date
”与数字一起使用。我发现'add_date
'比订单号更加丑陋。
如果添加订单的确切时间无效(通常情况属实),您可以保留一个单独的表格,其中包含customer_id
,order_number
(主键),order_date