您认为在 MySQL 数据库的记录中存储一些图像 ID 的更好方法是什么?它只是用于从不同库中获取图像的图像 ID。
我是在 1#4#7#9#10#12 之类的记录中内爆 id,还是只是序列化数组并存储它?使用其中一个而不是另一个有任何性能优势吗?稳定性偏好?
我只是一直使用内爆和爆炸,从来没有真正考虑过。谢谢。
您认为在 MySQL 数据库的记录中存储一些图像 ID 的更好方法是什么?它只是用于从不同库中获取图像的图像 ID。
我是在 1#4#7#9#10#12 之类的记录中内爆 id,还是只是序列化数组并存储它?使用其中一个而不是另一个有任何性能优势吗?稳定性偏好?
我只是一直使用内爆和爆炸,从来没有真正考虑过。谢谢。
如果您不想(过度?)规范化您的表,并且您真的只想存储一个 id 列表,那么我建议使用一个简单的逗号分隔列表,因为 MySQL 已经有一些可以直接处理逗号的函数-分隔的字符串值:
FIND_IN_SET
:
http ://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set
SELECT FIND_IN_SET('b','a,b,c,d'); --> 2
CONCAT_WS
:http ://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws
SELECT CONCAT_WS(',','First name',NULL,'Last Name'); --> 'First name,Last Name'
当然,您将无法执行 SQL JOIN,但它仍然会有所帮助。
我更喜欢序列化或 JSON 编码。
它更灵活,例如允许您在未来添加图像标题和其他详细信息......
据我所知,在这种情况下没有显着差异,但implode()
速度有点快,因为它假定一个数组并且serialize()
不知道你传递给它的内容。
根据 OP 的评论进行编辑:
好吧,所有图像都存储在一个单独的库表中,其中包含标题和描述之类的东西。但是,是的,我明白你的意思。
在这种情况下不是一个好主意,因此将多个 ID 序列化到一个字段中。您需要的是 2 个表之间的 *-to-Many 关系。这是表示多值字段的正确方法:
+----------------------+
| USER |
+---------+------+-----+
| user_id | name | ... |
+---------+------+-----+
+----------------------+
| USER_PICTURE |
+---------+------------+
| user_id | picture_id |
+---------+------------+
+--------------------------+
| PICTURE |
+------------+-------+-----+
| picture_id | title | ... |
+------------+-------+-----+
我的朋友,序列化是获取对象状态的字符串表示。即使它有效,我也不认为是做你想做的最好的方法。我更愿意用 id 存储一个 json 对象。因为 json 对象是多平台的,是一个字符串,并且很容易被人类阅读,我认为这是一个好方法。