规范化行顺序php

时间:2012-05-14 18:45:46

标签: php mysql database-design

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

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

+---domain----+

id   name 

1    example


+----text_modules----+

id   name     domain_id  position
1    example  1          1

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

1    example  1          1

如何规范化位置列中的值

1 个答案:

答案 0 :(得分:1)

  

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

那么,不要使用相同的position

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

enter image description here

U1表示{domain_id, position}上的UNIQUE约束。

BTW,考虑使用自然键(上面未显示) - InnoDB表是clustered,二级索引很贵。


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

  • 在其中任何一个中插入新行之前,检查任一表中是否已有订单。但是,在并发环境中,如果没有额外的锁定,这将无法工作。
  • 如果合适,请使用时间戳而不是position