d3.js ツリー/樹状図の階層 JSON を構築するために PHP で使用する MySQL クエリがあります。
スキーマと既存のクエリを表示するための Fiddle です。
私は現在、プログラム結果データ O とユニット データ U および開発レベル データ の間に追加のデータ関係 D を追加する方法を検討しています。これらの間には複数のペアがあり、多くの関係があります。 。
#D には、次の図に示すように 3 種類しかありません。
必要なコンセプト マップ:各
U は、各 O の 1 つの D のみに関連しています (明確にするために、1 つの O 分岐のみが示されています)。
したがって、U はD の子孫であり、O の孫である必要があります。同じ U は、他の O ブランチに対して同じタイプの D を持つことも、異なるタイプの D
を持つこともできます。
フィドルでわかるように、O と U の関係は現在、ルックアップ/関係テーブル
program_outcome_unit_lookup
また、ルックアップ テーブルを変更して、
program_outcome_unit_lookup
O -> U
D -> U
これを実現する方法はありますか?
クエリ後の PHP (データベース フィドルではありません...) は次のとおりですが、解決策には関係ない可能性があります。これは本質的にデータベースの問題です。
リーリー 更新
2 つの分岐を含む展開された概念図を表示します: ###
あなたのモデルは次のようになります: 各 (一意の) タプル
(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-U1D
の新しいテーブルも追加する必要があります。すべての
Oがすべての
Dの使用を許可されていない場合 (例:
O2ブランチが
D1の使用を許可されていない場合)、さらに 1 つテーブル
(O, D)