2

您认为在 MySQL 数据库的记录中存储一些图像 ID 的更好方法是什么?它只是用于从不同库中获取图像的图像 ID。

我是在 1#4#7#9#10#12 之类的记录中内爆 id,还是只是序列化数组并存储它?使用其中一个而不是另一个有任何性能优势吗?稳定性偏好?

我只是一直使用内爆和爆炸,从来没有真正考虑过。谢谢。

4

4 回答 4

7

如果您不想(过度?)规范化您的表,并且您真的只想存储一个 id 列表,那么我建议使用一个简单的逗号分隔列表,因为 MySQL 已经有一些可以直接处理逗号的函数-分隔的字符串值:

FIND_IN_SEThttp ://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_WShttp ://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,但它仍然会有所帮助。

于 2012-11-02T14:35:51.990 回答
2

我更喜欢序列化或 JSON 编码。
更灵活,例如允许您在未来添加图像标题和其他详细信息......

于 2012-11-02T14:32:08.413 回答
2

据我所知,在这种情况下没有显着差异,但implode()速度有点快,因为它假定一个数组并且serialize()不知道你传递给它的内容。

根据 OP 的评论进行编辑:

好吧,所有图像都存储在一个单独的库表中,其中包含标题和描述之类的东西。但是,是的,我明白你的意思。

在这种情况下不是一个好主意,因此将多个 ID 序列化到一个字段中。您需要的是 2 个表之间的 *-to-Many 关系。这是表示多值字段的正确方法:

+----------------------+
|  USER                |
+---------+------+-----+
| user_id | name | ... |
+---------+------+-----+

+----------------------+
|  USER_PICTURE        |
+---------+------------+
| user_id | picture_id |
+---------+------------+

+--------------------------+
|  PICTURE                 |
+------------+-------+-----+
| picture_id | title | ... |
+------------+-------+-----+
于 2012-11-02T14:33:11.130 回答
0

我的朋友,序列化是获取对象状态的字符串表示。即使它有效,我也不认为是做你想做的最好的方法。我更愿意用 id 存储一个 json 对象。因为 json 对象是多平台的,是一个字符串,并且很容易被人类阅读,我认为这是一个好方法。

于 2012-11-02T14:34:10.303 回答