[英]Storing list in mysql column
我的mysql表上的每一行代表一个不同的项目。 每个项目都有一个used_by_classes
属性,该属性可以是包含多个元素且最多9个元素的列表,例如"Scout,Spy,Pyro"
我想知道什么是存储该信息的最佳方法。
我将其存储为如上表中的used_by_classes
并用php进行used_by_classes
。
$classes= explode(",", $used_by_classes);
但这就是不可靠的,可能很愚蠢。 创建9个单独的列是另一种选择,但会使事情进一步复杂化。 您将如何处理?
对于多值属性,规范模式是创建第二个表。 新表中的每一行将存储该属性的一个值。
如果第一个表是
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
我认为您也可以在存储它们时序列化该数据。 当您获取记录时,您可以全部取消序列化。
item
id name used_by_class
--- ----- ---------------
11 Cake {scout:Spy:pyro}
像这样
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.