次の問題の結果を得るために、最速で複雑でない方法を見つけようとしています。
私は (たとえば) レゴ キットの DB を持っています。各キットには説明と、必要なレゴ ピースのリストとその数が含まれています。ユーザーは、自分のレゴ ピースのコレクションを挿入し、自分のピースでどのキットを構築できるか、他のピースを購入した場合に他に何が構築できるかを尋ねることができます (最初の制限は、1 種類のピースしか購入できないことです)。
私が持っているのはおおよそこれです:
LegoDesign
- id
- name
LegoBlock
- id
- type
- weight
- description
LegoBlockForDesign
- LegoDesign.id
- LegoBlock.id
- numberOfPiecesNeeded
Collection
(- User.id)
- LegoBlock.id
- quantityAvailable
たとえば、DB には StarWar の Death Star の LegoDesign が含まれています。LegoBlock には、「2x2 黒四角」や「小さな車輪」などのピースの長いリストが含まれています。LegoBlockForDesign は、LegoBlocks をデス スターの LegoDesign に割り当てます (たとえば、「2x2 黒四角」の 1000 個のピース)。Table コレクションには、ユーザーが持っているピースが含まれています。ここでの問題は、ユーザーが持っているピースでデザインを照会する必要があることです。これは、最初に LegoBlock.id をチェックし、次に numberOfPiecesNeeded をチェックすることを意味します。星。これが最初のクエリです。2 つ目は、私が持っているブロックとコレクションにないブロックを含むデザインをチェックする必要があります。これは、所有しているが適切な量よりも少ないレゴブロックと、所有していないブロックを含むデザインを確認する必要があることを意味します。後者には、手動で設定できる制限が必要です。購入するピースの数の制限 (つまり、最大 30 ピース) またはピースの難易度の制限 (つまり、購入する「特別なブロック」がない、特別なホイールやキャラクターのみが存在するなど) の間でユーザーが選択できるようにすることを考えていました。特定のデザイン (スターウォーズのキャラクターなど)。
特に、ブロックの存在だけでなく数量もチェックする必要があるため、SQL で実行できるかどうかは完全にはわかりません。
編集: LegoBlock.type と LegoBlock.weight を追加しました。このようにして、type = common,rare,unique を定義して、通常のピースまたは特定のピース (レアと定義できるスター ウォーズのキャラクターなど) を定義できます。デザイン)。代わりに重量を使用して優先順位を付けることができます (私は青が好きなので、青のピースを購入しなければならないデザインを見たいと思います)。