用户拥有mysql数据库中的多个项目

时间:2013-08-16 04:47:10

标签: mysql database-design

所以我在数据库设置中有几张表,我想知道最好的办法是什么。

基本上我有一对多的关系,其中单个用户可以“拥有”多个项目,这由php中的数组表示,这可能会返回项目的唯一项目编号,类型和值。我如何将其存储在MySql表中?

是否最好有一个每个项目的查找表及其ID和现在的所有者?将一个行项目放在用户表中是否更有意义,该行项目具有每个玩家拥有的每个项目的csv列表(这将是索引的噩梦?)

这里有什么意义?

示例:

类字符包含项目[]

字符1在其项目列表中包含以下条目:

1,2,5,10,11,12

字符2在其项目列表中包含以下条目:

3,4,6,7,8,9,13

存储这些数据的好方法是什么?

谢谢,

1 个答案:

答案 0 :(得分:1)

永远不要将分隔的字符串值存储在数据库中。通过创建多对多表来规范化数据。这样,您就可以正常查询数据。

据说你的架构看起来像

CREATE TABLE characters 
(
    char_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(32),
    ...
) ENGINE = InnoDB;
CREATE TABLE items
(
    item_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(6),
    ...
) ENGINE = InnoDB;
CREATE TABLE item_list
(
    char_id INT NOT NULL, 
    item_id INT NOT NULL,
    PRIMARY KEY (char_id, item_id),
    FOREIGN KEY (char_id) REFERENCES characters (char_id),
    FOREIGN KEY (item_id) REFERENCES items (item_id)
) ENGINE = InnoDB;

如果您以后需要为每个字符生成一个分隔的项目列表,以便在迭代结果集时可以explode这个值,则可以使用这样的查询

SELECT char_id, GROUP_CONCAT(item_id) items
  FROM item_list
-- WHERE ...
 GROUP BY char_id

这是 SQLFiddle 演示