糟糕的MySQL数据库设计?

时间:2017-01-22 21:49:49

标签: mysql sql database database-design

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

enter image description here

我的目标是在一个查询中获取项目和数量的数据。我试过这样的事情:

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

结果:

enter image description here

它有点工作......但如果我选择项目号。 2最后一列是quantity2。而且我不需要quantityX列,但需要普遍的东西,比如'数量'。所以查询不是问题,而是数据库本身。但是我很高兴这个!真的不知道如何解决这个问题。有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

数据库不像大多数编程语言那样具有列表的概念。只要您需要许多关系,它就必须是一个表格。

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

台式设备

  • id_acc:int(10)
  • id_item:smallint(5)
  • 数量:tinyint(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

答案 1 :(得分:0)

如何创建关联表item_quantity?

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));

然后您可以使用item_quantity表选择信息,如:

    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