我正在尝试找到最快/不太复杂的方法来获得以下问题的结果。
我有一个(例如)乐高套件的数据库,其中每个套件都有一个描述和所需的乐高部件列表以及它们的数量。用户可以插入他的乐高积木集合,然后询问他可以用他的积木构建什么套件,如果他购买其他积木,他还可以积木什么(也许第一个限制是他只能购买一种类型的积木)。
我所拥有的大致是这样的:
LegoDesign
- id
- name
LegoBlock
- id
- type
- weight
- description
LegoBlockForDesign
- LegoDesign.id
- LegoBlock.id
- numberOfPiecesNeeded
Collection
(- User.id)
- LegoBlock.id
- quantityAvailable
例如,数据库包含用于 StarWar 的死星的 LegoDesign。LegoBlock 包含一长串“2x2 黑色方块”或“小轮子”等。LegoBlockForDesign 将 LegoBlocks 分配给死星的 LegoDesign(例如 1000 个“2x2 黑色方块”)。Table 集合包含用户拥有的部分。现在这里的问题是我必须使用用户拥有的部件查询设计,这意味着首先检查 LegoBlock.id 然后检查 numberOfPiecesNeeded 因为我可以有一些 2x2 黑色方块但不足以构建死亡星星。这是第一个查询。第二个应该检查包含我拥有的块以及我的收藏中没有的一些块的设计。这意味着我应该检查我拥有但数量少于正确数量的乐高积木,以及没有我拥有的积木的设计。后者需要一个可以手动设置的限制。我正在考虑让用户在购买件数的限制(即最多 30 件)或件件的难度限制(即没有“特殊块”可购买,例如仅存在一些特殊的轮子或角色)之间进行选择在特定的设计中(例如星球大战的角色)。
我不完全确定它可以在 SQL 中完成,特别是因为我必须检查数量而不仅仅是块的存在。
编辑:我添加了 LegoBlock.type 和 LegoBlock.weight。这样我可以定义 type = common,rare,unique 来定义普通或特定的部分(比如可以定义为稀有的星球大战角色。我不想购买这些作品,因为它们只能用于星球大战'设计)。重量可以用来优先考虑(我喜欢蓝色,所以我更愿意看到我必须购买蓝色件的设计)。