1

PHPで次の構造を適切な方法で注文する方法:3つのテーブルがあります

メイン テーブル: (外部キー f​​k_text_modules_domain_id ) および(外部キー f​​k_product_modules_domain_id) テーブルにdomain関連し、それぞれに行の順序をマークする順序フィールドがあります。データをフィルタリングするためにクエリを分離し、2 つの配列をマージした後です。私の問題は、最初のテーブルの順序フィールドの値が 2 番目のテーブルの順序の値と同じである場合、行の順序が適切な方法でレンダリングされていないことです。最良の結果を得るには、何を変更する必要がありますか、この問題にどのように対処する必要がありますか。text modulesproduct modules

+---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

私の問題は、最初のテーブルの順序フィールドの値が 2 番目のテーブルの順序の値と同じである場合、行の順序が適切な方法でレンダリングされていないことです。

さて、同じものを使用しないでくださいposition

DBMS を利用して a が a と同じになることは決してない (同じ に対して) ことを強制するには、継承text_moduleを使用して を共通テーブルに「抽出」し、そのテーブルで直接 UNIQUE にすることができます。このようなもの:positionproduct_moduledomain_idposition

ここに画像の説明を入力

は、のU1UNIQUE 制約を示します{domain_id, position}

ところで、自然キーの使用を検討してください (上記には示されていません) - InnoDB テーブルはクラスター化されており、セカンダリ インデックスは高価です。


一方、継承は独自の複雑さをもたらすため、現在のテーブルを保持し、次のいずれかを実行することを検討してください。

  • いずれかのテーブルに新しい行を挿入する前に、オーダーがすでにいずれかのテーブルにあるかどうかを確認してください。ただし、並行環境では、これは追加のロックなしでは機能しません。
  • position必要に応じて、の代わりにタイムスタンプを使用します。
于 2012-05-14T19:39:07.690 に答える