あなたが記述されているパターンは、しばしば「と呼ばれる部品の爆発」や「部品表。」これは、データ構造の研究におけるグラフとツリー部分の一部です。ソリューションの本質は、特定の「製品」を他の「製品」で構成できることを認識することです。次に、設計は、Product
他の製品で構成されているかどうかに関係なく、Product Component
各製品の行があるテーブルと、他の製品で構成されている各製品の行を持つテーブルがあるネットワーク構造です。その製品のコンポーネントである、対応する各製品。あなたの場合、各製品には価格があります。だからあなたはこのようなものを持っているでしょう
Product
-----------------------------------
|Name |Price |
-----------------------------------
|Orange |1 |
|Apple |1.20 |
|Fruit Package |3.80 |
-----------------------------------
Product Component
----------------------------------------------------------
|Product |Contains |Quantity|
----------------------------------------------------------
|Fruit Package |Orange |2 |
|Fruit Package |Apple |2 |
----------------------------------------------------------
この設計は、実際には2つのエンティティタイプ(ノードとリンク)を明確に分離するため、再帰的な関連付けを持つ単一のテーブルよりも望ましいです。この場合、製品はノードであり、製品コンポーネントはリンクです。
ネットワーク設計は一般的な構造ですが、完全に満たされたときに深さが変化する再帰的な構造であるため、クエリを実行するのは問題です。OracleやSQL Serverなどの産業用のDBMSには、クエリを宣言的にするのに役立つ特別な言語要素(OracleのCONNECT BYおよびSQL Serverの再帰CTE)があります。私があまり知らないFile Maker Proを使用しているとすると、そのような言語構成体が役に立たなかったり、ネットワークを横断する手順コードを記述しなければならない場合があります。ただし、ネットワークの深さが決まっている場合、すべての製品にコンポーネントがないか、1つのレベルのコンポーネントがある場合、この問題は緩和できます。データベース設計のネットワーク構造に関する参考資料を次に示します。
- データベース管理の実用的問題 - ファビアンパスカル。第7章は、私が見つけた最良かつ最も理解しやすい説明を提供します。
- Joe CelkoのSQL for Smartiesのツリーと階層、第2版。これは、SQL標準に固有のトピックに関する本全体です。
- エンタープライズモデルパターン - デビッドヘイ。すべての組織に共通するパターンに関する本(残念ながらER図はUMLで表示されますが、克服できます)には、ネットワーク構造の例がいくつかあります。