0

所以我在数据库设置中有几个表,我想知道做某事的最佳方法是什么。

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

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

这里有什么意义?

例子:

类字符包含项目[]

字符 1 在他的项目列表中有以下条目:

1、2、5、10、11、12

角色 2 在他的项目列表中有以下条目:

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

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

谢谢,

4

1 回答 1

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演示

于 2013-08-16T06:40:31.333 回答