抱歉,不确定问题标题是否反映了真正的问题,但是这里有: 我设计的系统有标准订单表,但有附加的上一列和下一列。
问题是外键的哪种方法更好
这里我有基本表,其中包含以下列(上一页,下一页),它们是自引用外键。这个表的问题在于,第一个放置的订单没有前一个和下一个字段,所以它们没有空,所以如果我说10 000个记录,其中30%的列将这些列清空,那就是3000行列这是我认为的很多,而且我期望数字增长。所以,让我们说一年的时间段,它可以达到30000行,空列,我不确定它是否正常。
我带来的解决方案是主表和其他2个表,这些表具有该表的外键。在这种情况下,这2个额外的表是识别表而已,而且不再有空列的行。
所以问题是在考虑查询速度,表格优化和常见的良好实践时哪种解决方案更好,或者可能还有更好的我不知道的解决方案? (P.s.我在InnoDB引擎中使用mysql)。
答案 0 :(得分:0)
如果你的目标是做订单集,你可以简单地为它添加一个新表,并且只需要一个列作为订单表中该表的外键。
orders
还可以包含rank
列,以指示属于同一组的订单来自哪个订单。
create table order_sets (
id not null auto_increment,
-- customer related data, etc...
primary key(id)
);
create table orders (
id int not null auto_increment,
name varchar,
quantity int,
set_id foreign key (order_set),
set_rank int,
primary key(id)
);
然后插入新订单意味着更新同一组中所有其他订单的等级(如果有)。
同样,对于分组查询,事情比遵循上一个和下一个链接更容易。我很确定你会需要这些查询,而且表现会更好。