2017-06-29 4 views
1

非常に多様な一連の相互接続されたオブジェクトのデータモデルを開発しようとしています。アプリケーションが成熟するにつれて、サポートされるオブジェクトのタイプが大幅に増加します。新しいオブジェクト型が追加されるたびに、モデル/スキーマを変更する必要はありません。柔軟なオブジェクトの関係

単純な例として、私が人と建物のモデルから始めているとしましょう。建物には複数の所有者がいます。人は複数の建物を所有することができます。人は家に住んでオフィスで働くことができます...将来のバージョンでは車や企業が増えるかもしれません。自動車は所有者を所有することができ、企業は自動車を製造することができ、人々は企業などのために働くことができる。多くの関係は多対多であり、一部は一対多であり、少数は一対一である。

「所有者」、「雇用者」、「製造」などの概念は「建物」、「法人」、「車」オブジェクトのプロパティと考えることができますが、データモデルを再定義する必要はありません。新しいプロパティタイプをサポートします。

私の現在のアイデアは、これをグラフと同様にモデル化することです。グラフの各データは独自のノードです。ノードオブジェクトは非常に簡単になります:

  • 一意の識別子
  • 名前(人間の表現)
  • ノードタイプ
  • 関係前の例を拡張

、可能なノードタイプは次のようになり:

  • カー
  • 会社
  • ビル

関係は次のようになります。

  • ノードA
  • ノードB
  • 関係タイプ - 用途、所有している、持っている、され、等

私はいくつかの質問があります:

  • このアプローチには何らかの欠点がありますか?
  • これを説明する既存のパターンまたはモデルはありますか?
  • より良いアプローチがありますか?

答えて

1

これを説明する既存のパターンまたはモデルはありますか?

あなたの記述は、ネットワークデータモデルのように聞こえる、オブジェクトまたはオブジェクト指向のデータモデルとも呼ばれます。

このアプローチには何らかの欠点がありますか?

お使いのモデルは、3項以上の関係をサポートしていません。また、ノード間の固定アクセス・パスも作成されますが、これはノード間のナビゲーションをサポートしますが、多くの照会を複雑にすることがあります。私はまた、サブタイプ化のためのサポートを見ません。

複合決定因子を使用しないと、モデル化や照会が困難な状況があります。 (Object, Language) -> Name(または(Company, Role) -> Personなど)のような述語はサポートしていません。 1つの方法は特別なリレーションシップタイプを作成することですが、モデルは非対称でクエリが複雑になります。

もっと良いアプローチがありますか?

データのリレーショナル・モデルは、オブジェクト型/ドメイン間のn項関係を処理し、複雑な述語の表現を可能にします。 N-ary関係はオブジェクトハイパーグラフをサポートし、ユーザー定義結合はアドホックアクセスパスを意味します。複合行列式がサポートされており、ほとんどの実装ではさまざまな整合性制約がサポートされています。

特に、オブジェクトロールモデル(http://www.orm.nethttps://www.ormfoundation.org)を見てください。

新しいオブジェクトタイプが追加されるたびに、モデル/スキーマを変更する必要はありません。

「知識表現のためのユニバーサルスキーマ」のWeb検索を試してください。世界に関する事実は、「John SmithにはSpotという名前の犬がいる」のような単純な原子の観測に限られていません。私たちは、「A社は、その製品は、成分EまたはFが含まれている場合は、日付Dの後に点Cの100キロ以内の地域で製品Bを配布することは許されない」のような事実に対処する必要があります。私たちがこれまで持っている最も強力な知識表現は自然言語であり、私の知る限りでは、我々はまだその構造の単純なモデルを持っていません。

私は現在、Ologs: A Categorical Framework For Knowledge Representationを読んでいます。おそらく、これはあなたにとっても興味深いでしょう。

関連する問題