我的mysql表上的每一行代表一个不同的项目。
每个项目都有一个属性used_by_classes
,该属性可以是包含多个元素且最多为9个的列表,例如"Scout,Spy,Pyro"
我想知道存储这些信息的最佳方式是什么。
我将它作为上面的列表存储在表used_by_classes
上并用php进行爆炸。
$classes= explode(",", $used_by_classes);
但这只是不可靠而且可能很愚蠢。创建9个单独的列是另一种选择,但进一步复杂化了。你会怎么处理这个?
答案 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}
类似这样