1

経験を積むために、動物界に関する質問に答えることができるエキスパート システムを作ろうとしています。ただし、ドメインのモデリングで問題が発生しました。私は当初、動物界のヒエラルキーは次のように描かれると考えていました。

-animal
  -bird
    -carnivore
     -hawk
    -herbivore
     -bluejay
  -mammals
   -carnivores
   -herbivores

これにより、「すべての鳥をください」のようなクエリを簡単に作成できると考えましたが、「すべての肉食動物を提供してください」と言うにははるかにコストがかかるため、階層を次のように書き直しました。

-animal
  -carnivore
    -birds
     -hawk
    -mammals
     -xyz
  -herbivores
   -birds
     -bluejay
   -mammals

しかし、"give me all birds" をクエリするのはずっと遅くなります。

これはもちろん単純な例ですが、上記のようにクエリに応答するエキスパート システムを作成するコンテキストで、本質的にそれほど厳密に階層化されていない複雑な関係をモデル化する方法がよくわからないということを考えさせられました。有向循環グラフは数学的に問題を解決できるように思えますが、これをリレーショナル データベースに格納して維持する (更新する) ことは、私には悪夢のように思えます。人々がそのようなものを通常どのようにモデル化するかを知りたいです。さらに読むためのリソースへの説明またはポインタは受け入れられ、高く評価されます。

4

3 に答える 3

1

分類法に関する問題の 1 つに出くわしました (実際には、唯一の問題ではなく、最悪の問題でもありません)。 概念的なツールとしての多重継承は、タクソノミーに関する多くの問題を回避します。別の言い方をすれば、タクソノミーはツリーを定義し、MI ベースの分類スキームはより一般的な有向非巡回グラフを定義するため、あなたのモデリング。

リレーショナル データベースのアプローチは異なりますが (特に階層や継承を考えていません)、「多重継承」とほぼ同じ概念上の結果になります: 「クラス」(リンネの門/クラス/順序/家族/属/ の意味で)種) はレコードの 1 つのフィールドであり、食事 (肉食動物、草食動物、雑食動物) は別個のものです。

タクソノミー (AKA ツリー、単一継承など) に制限するツールを使用してモデル化することを余儀なくされた場合、それらが引き起こす苦痛を (適度に) 軽減するためのいくつかのトリックがありますが、それらは各ツールの特定の制限に依存します。したがって、一般化することは困難です。

于 2010-06-15T04:29:34.003 に答える
0

グラフ データベースバックエンドで同様の問題を使用して、ユーザー ロールの例を作成しました。私が使用する例は、もともとこのSQL ベースの例から来ています。最近では、この種の問題に SQL を使用することさえ試みません。それはとても苦痛です。(免責事項: 私はNeo4j graphdb チームに所属しています)

于 2010-06-15T15:19:16.700 に答える
0

Using Multikeys to Simulate a Large Number of Indexesに関する MongoDB マニュアル ページを見ると、MongoDB では、あらゆる種類の情報を含む各動物のデータベースに 1 つの「ドキュメント」を作成できることがわかります。

{
  _id: "hawk",
  attribs: [
   {diet: 'carnivore'},
   {kingdom: 'animal'},
   {class: 'Aves'},
   {order: 'Accipitriformes'},
   {locomotion: 'flight'}
  ]
}

次に、必要な属性の任意の組み合わせで検索できます。

于 2010-06-15T04:29:14.287 に答える