基本的には、ユーザーが階層モデルを定義できるようにしたいが、ユーザーが定義したモデル内にデータを格納できるようにする必要がある。これは理にかなっていますか?したがって、ユーザーは新しい「ユニットタイプ」を作成して階層的に編成することができ、これらのタイプのユニットの編成方法を決めることができます。簡単な例:私の仮説的なインターフェースでは、ユーザーは3つのユニットタイプ、トランク、ブランチ、リーフを作成します。ユーザーは、それらの間の関係を定義します。リーフは階層内の任意のポイントに存在することができ、ブランチには親としてトランクが必要です。ユーザーは、これらのユニットタイプのインスタンスを(ユニットとして)作成し、そのモデルで定義されたルールに従ってそれらを整理することができます。データベースでこれを行うには良い方法がありますか?データベースでユーザー定義の階層関係をモデル化する最適な方法は何ですか?
答えて
これは非常に幅広い質問ですが、正しい方向に指摘することがあります。リレーションシップルールはデータベースにのみ保存できることに注意してください。それらを強制することはあなたのクライアントコードに依存します。あなたはその後、
unit id
が、それは説明していますユニットに関する..次のようにあなたのユニットの関係テーブルを使用することができます
unit:
unit id,
name,
unit relationship:
unit id,
foreign unit id
..サイズのためにこれをしてみてください。 foreign unit id
はnull可能である必要があります。
unit
関係レコードは、階層のルートにのみ存在できます。foreign unit id
を有するunit
は、その親として他の任意のunit
を有することができる。そうでない場合、unit
は親として別のunit
を持たなければならず、そのタイプは関係レコードに定義されているタイプの1つでなければなりません。単純明快であるべき自分自身のインスタンスを格納するよう
..
instance:
instance id,
unit id,
parent instance_id
私はあなたが(例えば、名前を)必要があると思い、他のフィールドが存在することになると確信しているが、私はあなたが得ると仮定ドリフト。
- 「ユニット型」とその許可団体
- 階層
- これらの概念は、多かれ少なかれを共存させることができ、実際の単位
:あなたは3つのコンセプトを実装する必要が
モデルでは独立していますが、一緒に働きます。
create table unittype
(
id int;
name varchar(20);
)
create table unitrelationship
(
id int;
parent_id int;
)
あなたは自己参照テーブルとして階層構造をモデル化することができます:
create table hierarchy
(
id int;
parent_id int;
unit_type_id int;
unit_id int;
)
あなたはその後、1つまたは複数のテーブルにあなたのユニットのインスタンスを持っていて、説明したものを彼らと行うことができます。
create table unit
{
id int;
....
}
良いニュースは、あなたが許可されたタイプのすべての既存のユニットのリストから親を選ぶことにより、例えば簡単にユーザーインターフェイスに強制することができる唯一の許可親タイプを、制約されていることです。
複数の階層(1組の子、複数の階層ビュー)をサポートする必要がありますが、私は同様の問題に取り組んでいます。私はジョーCelkoの "スマイリーのためのSQLの木と階層"(ISBN:1558609202)が便利であることを発見しました。私はまだこの問題に取り組んでいますが、このトピックについて議論するときには、それが言及するのが適切であるように思われることがよくあります。
- 1. テーブル階層をモデル化する方法
- 2. OpenCL-Haskellライブラリに最適な階層モジュールパスは何ですか?
- 3. couchdbでfreindship関係をモデル化する最良の方法
- 4. 変更時に階層モデルを更新する適切な方法は何ですか?
- 5. 階層関係のサブグリッドにボタン+を追加する方法は?
- 6. プラグイン内で定義されているモデルをオーバーライドする最適な方法は何ですか?
- 7. 最適化階層問合せ
- 8. ユーザーの場所を特定する最適な方法は何ですか?
- 9. Rails - 適切な関係モデルは何ですか
- 10. SQL Serverでこの恐ろしい非効率なユーザー定義関数を最適化する方法08
- 11. JPAを使用して階層をモデル化する方法
- 12. は階層関係を表します
- 13. 階層関係のSQL
- 14. RavenDBのドキュメントでこの関係をモデル化する方法は?
- 15. PHP:データベース関係をモデル化する方法がわからない
- 16. スキーマで1対1の関係をモデル化する方法は?
- 17. 階層的で継承可能な設定に最適なPerlモジュールは何ですか?
- 18. MongoDB(MySQLユーザーの場合)で多対多の関係をモデル化する方法
- 19. Railsモデルでフィールドを「オーバーロードする」最適な方法は何ですか?
- 20. 階層構造のデータベースをツリービューで表示する方法は?
- 21. これらのデータベースの関連付けをモデル化する最良の方法は何ですか?
- 22. オブジェクト階層のWebSphere階層は何ですか?
- 23. EDMXで非標準関係をモデル化する方法は?
- 24. 複数のantビルドファイル間の依存関係を定義する最良の方法は何ですか?
- 25. Railsアプリケーションでモデルを定義する一般的な方法は何ですか?
- 26. ROLAPとMOLAPの両方でSSASの荒れた階層をモデル化する最良の方法は何ですか?
- 27. ウェブサイトのユーザー写真を管理する最適な方法は何ですか?
- 28. Java 7で階層化されたコンパイルは何ですか?
- 29. 別のデータベースからのSQLでユーザー定義関数を使用する方法
- 30. 異なるエンティティでユーザーの「友情」をモデル化する最良の方法は?
これは「隣接リスト」と呼ばれるものですか? – ninesided
いいえ、これは下から上に向かって定義されたツリー構造です(言い換えれば、親に子のリストを示すのではなく、子を親に示すことによって子を定義します)。隣接関係リストは周期的な接続を可能にしますが、ツリーは循環接続を許可しません。 –
そのようなツリーを構築するには、各ノードに親を決定するためのクエリは必要ありませんか?それともRDBMSに依存するでしょうか?私は、ツリーウォーキングのためにOracleでCONNECT_BY_PRIORが使用されていると思っています。 – ninesided