2012-05-14 22 views
1

如何以适当的方式订购下列结构用php:我有3个表规范化行的次序PHP

主表:domain相关text 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

我的问题是归一化的值:如果所述第一表命令字段的值是相同的,第二表的命令值时,行的顺序是不以适当的方式渲染。

好吧,不要用同样的position那么!

要利用DBMS执行一个text_module不可能有相同的positionproduct_module(同一domain_id),你可以使用继承来“解压”的position到一个公共表,并使其独特直接那张桌子。事情是这样的:

enter image description here

U1表示在{domain_id, position}的唯一约束。

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


在另一方面,继承带来了其自身的复杂性,所以你可能会考虑维持目前的表,执行下列操作之一:

  • 检查顺序是已经在两个表之前插入他们中的任何一个都有新的一排。但是在并发环境中,如果没有额外的锁定,这将无法正常工作。
  • 如果适用,请使用时间戳而不是position
+0

哇!!!非常感谢这个失败的回应。我会修改它来做一些选择。 – lgt