抱歉,不确定问题标题是否反映了真实的问题,但可以这样做:
我设计的系统具有标准订单表,但具有其他上一列和下一列。
问题是哪种外键方法更好
在这里,我有一个基本表,其中包含以下各列(上一列,下一列),它们是自引用外键。该表的问题在于,第一个下达的订单没有上一个和下一个字段,因此它们留空了,所以如果我说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)
);
然后插入新订单意味着更新同一集合中所有其他后续订单的排名(如果有)。
同样,对于分组查询,比必须遵循上一个和下一个链接要容易得多。我敢肯定,您将需要这些查询,并且这样做的性能会更好。