各アイテムが複数の属性を持つことができるアイテムのデータベースを作成しようとしています。コンテナのテーブルもあります (コンテナはアイテムを保持できます)。各コンテナーには複数の必須属性があります。アイテムがコンテナに収まるには、アイテム属性がコンテナ属性の要件を満たしている必要があります。
注: 新しい属性はいつでも追加できます。
Example:
Item 1 Attributes
Color: Red
Material: Aluminum
Length: 100
Width: 200
Rating: 4
Container 1 Required Attributes:
Color=Red
Material=Aluminum
Length<105
Width<300
Rating=4
コンテナに収まるすべてのアイテムを検索したい。Container Required Attributes テーブルにコンパレータ用のフィールドがある場合、コンテナ 1 に必要なすべての属性を取得し、コンパレータ フィールドに基づいてクエリを動的に生成できます。私はデータベースの専門家ではありませんが、これは良い設計ではないようです。
もう 1 つのオプションは、複数の Container Required Attributes テーブルを用意することです。1 つは最大値、1 つは最小値、1 つは等しい値の数値、もう 1 つは等しい値の文字列などです。
Example:
Container 1 Maximum Attributes
Length: 105
Width: 300
Container 1 Minimum Attributes
<none>
Container 1 Equal Attributes (Float)
Rating: 4
Container 1 Equal Attributes (String)
Color: Red
Material: Aluminum
この場合、クエリを動的に生成する必要はありませんが、最終的には >= および <= のテーブルが必要になるため、これが最善の解決策とは思えません。
より良いデザインの提案はありますか?