2012-05-14 57 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