ホームページ  >  に質問  >  本文

MySQL - 複雑な階層関係 - 複数の M:N?

d3.js ツリー/樹状図の階層 JSON を構築するために PHP で使用する MySQL クエリがあります。

スキーマと既存のクエリを表示するための Fiddle です。

私は現在、プログラム結果データ O とユニット データ U および開発レベル データ の間に追加のデータ関係 D を追加する方法を検討しています。これらの間には複数のペアがあり、多くの関係があります。 。

#D には、次の図に示すように 3 種類しかありません。

必要なコンセプト マップ:

U は、各 O の 1 つの D のみに関連しています (明確にするために、1 つの O 分岐のみが示されています)。

したがって、U は

D の子孫であり、O の孫である必要があります。同じ U は、他の O ブランチに対して同じタイプの D を持つことも、異なるタイプの D

を持つこともできます。

フィドルでわかるように、OU の関係は現在、ルックアップ/関係テーブル program_outcome_unit_lookup

を介して実装されています。

また、ルックアップ テーブルを変更して、program_outcome_unit_lookup

テーブルの代わりに 2 つのルックアップ テーブルを作成することもできます。これは機能する可能性があります。

O -> U

D -> U

これを実現する方法はありますか?

クエリ後の PHP (データベース フィドルではありません...) は次のとおりですが、解決策には関係ない可能性があります。これは本質的にデータベースの問題です。

リーリー 更新

2 つの分岐を含む展開された概念図を表示します: ###
P粉354948724P粉354948724203日前422

全員に返信(1)返信します

  • P粉427877676

    P粉4278776762024-03-30 12:45:05

    あなたのモデルは次のようになります: 各 (一意の) タプル (O, U) には必須の値 D が割り当てられます。

    このモデルを実装するには、D 列を program_outcome_unit_lookup テーブルに追加します。 リーリー

    (program_outcome_fk,unit_fk) を主キーにすることもできますが、いずれにしても一意である必要があります (現在、この制約は適用されていません)。

    ここで、各

    U は任意の数の O のメンバーになれますが、要件に従って、「各 U はそれぞれの U にのみ関連付けられます」 D

    アソシエーション」。

    たとえば、更新されたチャートから U1 (O1-D2-U1 および O2-D1-U1) を保存するには、値を変更できます。 ((1,2,1),(2,1, 1))。必要に応じて、一意の制約に違反するため、O2-D2-U1

    などを追加することはまだできません。

    D の新しいテーブルも追加する必要があります。すべての O がすべての D の使用を許可されていない場合 (例: O2 ブランチが D1 の使用を許可されていない場合)、さらに 1 つテーブル (O, D)

    。それ以外の場合は必要ありません。 ###

    返事
    0
  • キャンセル返事