我有一张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行。现在,为了识别单个订单,我给出了一个number字段,它将保存单个订单的唯一订单编号(序列号),即它将按number字段对order_id进行分组。下面的表格演示了如何将数据存储在表中。

将有许多表将从该父表扩展。虽然一切都是正确的,但我看到的问题是number列一次又一次地重复该值,考虑到我有200产品要列出一个订单,我将不得不在所有200行中一次又一次地重复number列值,这给我带来了一些丑陋的感觉。
现在解决此危机的方法是将订单number存储在不同的表中(虽然重复不可避免,但这不是问题)。例如,如何从ai_order表中删除number列并以这种方式存储它。
CREATE TABLE `ai_order_number`(
`order_id` INT(11) NOT NULL,
`number` VARCHAR(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;我想知道你是如何处理这种方法的?你会选哪一个?第一个还是后一个?任何关于改进的建议都将不胜感激。
谢谢。
发布于 2011-09-20 12:54:33
我不认为像您建议的那样保留一个单独的表是一个好主意,因为order_number与订单直接相关。
如果您仍打算保留一个不同的表,请将“add_date”与number一起使用。我发现'add_date‘比订单号更难看。
如果添加顺序的确切时间不是很有用(通常就是这种情况),您可以保留一个单独的表,其中将包含customer_id、order_number(主键)、order_date
发布于 2011-09-20 12:37:56
我会采用第一种方法,因为重复该表中的订单号没有错,因此不需要创建第二个表来重复该订单号。
相反,我要做的可能是去掉id列,并使number成为表的主键,因为您更有可能按序号而不是id列执行搜索、连接等操作。number列也可以自动生成,所以这不是问题。
https://stackoverflow.com/questions/7480166
复制相似问题