糟糕的MySQL数据库设计?

糟糕的MySQL数据库设计?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正在为浏览器游戏创建一个数据库。到目前为止,我一直做得很好(我猜),直到我决定让物品可以堆叠。因此,我创建了“数量表”。这是我的简化数据库: 我的目标是在一个查询中获得一个项目和数量的数据。我试过这样的方法: SELECT items.*, quantity_table.quantity1 FROM items JOIN quantity_table WHERE id_item = 3 AND id_quant = 1 结果: 有点奏效了。。。但如果我选择第2项,最后一列将是quant

我正在为浏览器游戏创建一个数据库。到目前为止,我一直做得很好(我猜),直到我决定让物品可以堆叠。因此,我创建了“数量表”。这是我的简化数据库:

我的目标是在一个查询中获得一个项目和数量的数据。我试过这样的方法:

SELECT items.*, quantity_table.quantity1 FROM items JOIN quantity_table WHERE id_item = 3 AND id_quant = 1 
结果:


有点奏效了。。。但如果我选择第2项,最后一列将是quantity2。我不需要quantityX列,而是一些通用的东西,比如“数量”。所以问题不在于查询,而在于数据库本身。但我永远都会被困在这里!真的不知道如何解决这个问题。有人能帮我吗?

数据库不像大多数编程语言那样有列表的概念。任何时候你需要很多关系,它必须是一张桌子

在此使用该概念,您的设备表应如下所示:

台式设备
  • id_acc:int(10)
  • id_项目:smallint(5)
  • 数量:锡(3)
要获取用户1的所有项目,请执行以下操作:

select i.id_item as item_id, name as item_name, type as item_type, qty as item_qty
from accounts as a 
inner join equipment as e 
  on a.id_acc = e.id_acc 
inner join items as i
  on e.id_item = i.id_item
where a.id_acc = 1

创建关联表项目数量如何

CREATE TABLE item_quantity(
id_item INT NOT NULL,
id_quant INT NOT NULL,
CONSTRAINT id_item_quantity PRIMARY KEY (id_item,id_quant),
CONSTRAINT fk_id_item FOREIGN KEY (id_item)
    REFERENCES items(id_item),
CONSTRAINT fk_id_quant FOREIGN KEY (id_quant)
    REFERENCES quantity_table(id_quant));
然后,您可以使用项目数量表选择信息,如:

    SELECT items.id_item,items.name,quantity_table.quantity FROM item_quantity Inner Join items ON item_quantity.fk_id_item = items.id_item Inner Join quantity_table ON item_quantity.fk_id_quant = quantity_table.id_quant

列名中有数字总是一个糟糕设计的标志。我听说过《为凡人设计数据库》这本书的优点。我不同意你到目前为止的好观点。当你想要在列之间显示一个值数组时,请尝试创建另一个表,每行一项。是否可以将quantity_表更改为只有两列:id_quant,quantity?