Mysql数据库空列值与附加标识表

时间:2014-07-01 09:59:08

标签: mysql database foreign-keys

抱歉,不确定问题标题是否反映了真正的问题,但是这里有: 我设计的系统有标准订单表,但有附加的上一列和下一列。

问题是外键的哪种方法更好

enter image description here

这里我有基本表,其中包含以下列(上一页,下一页),它们是自引用外键。这个表的问题在于,第一个放置的订单没有前一个和下一个字段,所以它们没有空,所以如果我说10 000个记录,其中30%的列将这些列清空,那就是3000行列这是我认为的很多,而且我期望数字增长。所以,让我们说一年的时间段,它可以达到30000行,空列,我不确定它是否正常。

enter image description here

我带来的解决方案是主表和其他2个表,这些表具有该表的外键。在这种情况下,这2个额外的表是识别表而已,而且不再有空列的行。

所以问题是在考虑查询速度,表格优化和常见的良好实践时哪种解决方案更好,或者可能还有更好的我不知道的解决方案? (P.s.我在InnoDB引擎中使用mysql)。

1 个答案:

答案 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)
);

然后插入新订单意味着更新同一组中所有其他订单的等级(如果有)。

同样,对于分组查询,事情比遵循上一个和下一个链接更容易。我很确定你会需要这些查询,而且表现会更好。