首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RDBMS,外键合并还是分表?

RDBMS,外键合并还是分表?
EN

Stack Overflow用户
提问于 2011-09-20 12:31:49
回答 2查看 179关注 0票数 0

我有一张ai_order桌子。

代码语言:javascript
复制
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列并以这种方式存储它。

代码语言:javascript
复制
CREATE TABLE `ai_order_number`(
    `order_id` INT(11) NOT NULL,
    `number` VARCHAR(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我想知道你是如何处理这种方法的?你会选哪一个?第一个还是后一个?任何关于改进的建议都将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-20 12:54:33

我不认为像您建议的那样保留一个单独的表是一个好主意,因为order_number与订单直接相关。

如果您仍打算保留一个不同的表,请将“add_date”与number一起使用。我发现'add_date‘比订单号更难看。

如果添加顺序的确切时间不是很有用(通常就是这种情况),您可以保留一个单独的表,其中将包含customer_idorder_number(主键)、order_date

票数 1
EN

Stack Overflow用户

发布于 2011-09-20 12:37:56

我会采用第一种方法,因为重复该表中的订单号没有错,因此不需要创建第二个表来重复该订单号。

相反,我要做的可能是去掉id列,并使number成为表的主键,因为您更有可能按序号而不是id列执行搜索、连接等操作。number列也可以自动生成,所以这不是问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7480166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档