【问题标题】:Designing the schema for an inventory system...should I calculate quantity or keep track of it?为库存系统设计架构...我应该计算数量还是跟踪它?
【发布时间】:2010-09-12 13:56:28
【问题描述】:
我正在为一个游戏做一个清单,就像一个 FF 风格的游戏。我有两个设计,想知道哪个更好
以字段形式跟踪数量;架构将是:
item ( <item_id>, <character_id>, quantity )。如果一个角色装备了一件物品,或者从他的库存中移除了一件物品,我需要确保数量字段是正确的。
每个项目占据一个单独的行。我将使用 GROUP BY 来计算每种物品的数量(按 item_id)。装备和移除物品变得更加简单,但如果角色有十个治疗药水,他们将占据十行。
目前没有空间限制或编程限制(使用 MySQL)。从长远来看,哪个系统更好?
【问题讨论】:
标签:
mysql
language-agnostic
database-design
【解决方案1】:
听起来某处的角色和物品之间存在一对多的关系。
我建议使用 GROUP BY 从数量作为派生项目开始。如果性能成为问题,我只会更改它。
我不喜欢项目必须跟踪其数量的设计,但如果您必须这样做,您可以使用 MySQL 中的触发器来完成它,以便在 INSERT、UPDATE 或 DELETE 时自动更新数量。
【解决方案2】:
数据库的设计取决于需要执行的查询类型。
在这种情况下,如果您只需要为字符 x 获取项目 x 的数量,那么选项一将起作用,但如果您需要:
物品x的数量
谁的 item_attribute1 = x
AND item_attribute2 = X
AND character_attribute1 = x
AND character_attribute2 = x
您需要选择选项 2。
在选项 1 中,所有物品和所有角色都共享相同的数量,尽管它们具有不同的属性。