在mysql列中存储列表

时间:2014-04-14 18:05:53

标签: php mysql list

我的mysql表上的每一行代表一个不同的项目。 每个项目都有一个属性used_by_classes,该属性可以是包含多个元素且最多为9个的列表,例如"Scout,Spy,Pyro"

我想知道存储这些信息的最佳方式是什么。

我将它作为上面的列表存储在表used_by_classes上并用php进行爆炸。

$classes= explode(",", $used_by_classes);

但这只是不可靠而且可能很愚蠢。创建9个单独的列是另一种选择,但进一步复杂化了。你会怎么处理这个?

2 个答案:

答案 0 :(得分:1)

对于多值属性,规范模式是创建第二个表。新表中的每一行都将存储一个属性值。

如果第一个表是

item (id int unsigned primary key, ...)

第二个表格如下:

item_class
( id            INT UNSIGNED PRIMARY KEY
, item_id       INT UNSIGNED NOT NULL COMMENT 'FK ref item.id'
, used_by_class VARCHAR(20)  NOT NULL

我们可能会在(item_id, used_by_class)元组上添加一个唯一约束。使用InnoDB,我们创建一个引用项目表的FOREIGN KEY约束。

item
 id name 
--- -----
 11 Cake

item_class
 id item_id used_by_class
--- ------- ------------- 
412      11 Scout
413      11 Spy
414      11 Pyro
415      11 Demoman

答案 1 :(得分:1)

我认为你也可以在存储它们时序列化这些数据。当你获取记录时,你可以将它们全部取消序列化。

item
id  name   used_by_class
--- ----- ---------------
11  Cake   {scout:Spy:pyro}

类似这样