抱歉,不确定问题标题是否反映了真实的问题,但可以这样做:
我设计的系统具有标准订单表,但具有其他上一列和下一列。

问题是哪种外键方法更好



在这里,我有一个基本表,其中包含以下各列(上一列,下一列),它们是自引用外键。该表的问题在于,第一个下达的订单没有上一个和下一个字段,因此它们留空了,所以如果我说1万条记录,其中30%的列为空,那是3000行,这是很多的我认为,我也希望数字会增长。因此,在一年的时间里,它可以达到30000行且列为空,我不确定这是否可以。



我提供的解决方案是将主表与其他2个具有该表外键的表一起使用。在这种情况下,这两个额外的表用于标识表,仅此而已,不再有带有空列的行。

因此问题是,考虑到查询速度,表优化和常见的良好做法,哪种解决方案更好,或者还有我不知道的更好解决方案? (请注意,我在InnoDB引擎上使用mysql)。

最佳答案

如果您的目标是进行订单设置,则可以为此添加一个新表,并在订单表中仅将一列作为该表的外键。
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)
);


然后插入新订单意味着更新同一集合中所有其他后续订单的排名(如果有)。

同样,对于分组查询,比必须遵循上一个和下一个链接要容易得多。我敢肯定,您将需要这些查询,并且这样做的性能会更好。

08-07 17:14