您认为在MySQL数据库中的记录中存储一些图像ID的更好方法是什么?它只是图像ID,用于从不同的库中获取图像。
我是否会像1#4#7#9#10#12那样在记录中内爆id或者我只是序列化数组并存储它?使用一个而不是另一个是否有任何性能优势?稳定性偏好?
我一直使用内爆和爆炸,从来没有真正考虑过。 感谢。
答案 0 :(得分:7)
如果你不想(超过?)规范化你的表,而你真的只想存储一个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,但它仍然可以提供帮助。
答案 1 :(得分:2)
我更喜欢序列化或JSON_encode 更灵活,例如,您可以在此处添加图片标题和其他详细信息......
答案 2 :(得分:2)
据我所知,在这种情况下没有显着差异,但implode()
有点快,因为它假设一个数组而serialize()
不知道你传递给它的是什么。
编辑基于OP的评论:
所有图像都存储在一个单独的库表中,其中包含标题和描述以及类似的内容。但是,我明白你的观点。
在这种情况下不是一个好主意,所以将几个ID序列化到一个字段中。您需要的是两个表之间的* -to-Many关系。这是表示多值字段的正确方法:
+----------------------+
| USER |
+---------+------+-----+
| user_id | name | ... |
+---------+------+-----+
+----------------------+
| USER_PICTURE |
+---------+------------+
| user_id | picture_id |
+---------+------------+
+--------------------------+
| PICTURE |
+------------+-------+-----+
| picture_id | title | ... |
+------------+-------+-----+
答案 3 :(得分:0)
我的朋友,序列化是获取对象状态的字符串表示。即使它有效,我也不认为这是做你想做的最好的方法。我更喜欢用id存储一个json对象。因为json对象是多平台的,所以是一个字符串并且很容易被人类读取,我认为这是一种很好的方法。
答案 4 :(得分:0)
对于您的用例而言,内爆比JSON和序列化要好,这不仅是因为它不仅速度更快,而且因为您不需要存储密钥,所以在案例中存储密钥很浪费。