1

如何使用 php 以正确的方式订购以下结构:我有 3 个表

主表:domaintext modules(外键 fk_text_modules_domain_id)和product modules(外键 fk_product_modules_domain_id)表相关,每个表都有顺序字段来标记行的顺序。我正在分离查询以过滤数据,并在合并 2 个数组之后。我的问题是:如果第一个表 order 字段值与第二个表 order 值相同,则行的顺序不会以正确的方式呈现。我应该改变什么,我应该如何解决这个问题以获得最佳结果。

+---domain----+

id   name 

1    example


+----text_modules----+

id   name     domain_id  position
1    example  1          1

+----text_modules-----+

1    example  1          1

如何标准化位置列中的值

4

1 回答 1

1

我的问题是:如果第一个表 order 字段值与第二个表 order 值相同,则行的顺序没有以正确的方式呈现。

好吧,那就不要使用相同的position

要利用 DBMS 强制 atext_module永远不能与positiona相同product_module(对于相同的domain_id),您可以使用继承将其“提取”position到一个公共表中,并直接在该表上使其成为唯一。像这样的东西:

在此处输入图像描述

表示U1UNIQUE 约束。{domain_id, position}

顺便说一句,考虑使用自然键(上面未显示)- InnoDB 表是聚集的,二级索引很昂贵。


另一方面,继承带来了其自身的复杂性,因此您可以考虑保留当前表并执行以下操作之一:

  • 在任一表中插入新行之前,检查订单是否已在任一表中。但是,在并发环境中,如果没有额外的锁定,这将无法工作。
  • position如果合适,请使用时间戳而不是。
于 2012-05-14T19:39:07.690 回答