在数据库中存储大型数组

时间:2009-07-17 07:12:12

标签: php database cakephp

我有一长串带有整数值的行程项目。我正在考虑创建一个数据库,每个项目都有五十列,但这似乎有点啰嗦,行程可能会改变。是否有更好的方法来存储这些名称=>数据库中的值对?序列化看起来有点粗糙,我正在考虑创建一个带有名称,值列的itinerary_items数据库并将数据粘贴在那里。什么是最好的解决方案?

7 个答案:

答案 0 :(得分:5)

为什么不像表格中的属性一样保存它们。

| id| name       | value        |
+---+------------+--------------+
| 1 | array_key  | array_value  |
| 2 | array_key2 | array_value2 |

如果想要多个数组实例,可以随时添加一个额外的密钥来跟踪实例:

| id| name       | value        | instance_key |
+---+------------+--------------+--------------+
| 1 | array_key  | array_value  | 1            |
| 2 | array_key2 | array_value2 | 1            |
| 3 | array_key  | array_value  | 2            |
| 4 | array_key2 | array_value2 | 2            |

使用这种解决方案的方法存在的问题是,如果对象上有多个属性,数据往往更不易被人类阅读,并且会有很多额外的连接。

答案 1 :(得分:3)

你有多少条记录?数百?成千上万的?

如果您的记录数低于500,那么我认为您根本不应该选择数据库。您可以将其存储在XML文件中。这些是NoSQL:)的时间。

并非我支持这项运动,但数据库似乎过于符合您的要求。

答案 2 :(得分:2)

你几乎有一个关键字列和一个值列,并按照你的提及插入记录。

答案 3 :(得分:2)

如果您存储的数据不用于搜索数据库,并且仅在应用程序代码中更新,那么我倾向于将其存储为blob。如果您可能更新部分数据并且不需要读取整个数据集来进行有意义的更新,那么将使用包含id,user_id,key,value等列的单独表格。

答案 4 :(得分:0)

写出一个for循环来创建INSERT语句,然后执行查询以将数组保存到包含键和值列的表中。要重新创建数组,请从表中检索它并使用另一个for循环将值重新插入数组。

我在这种设置中只能看到的问题是,如果您打算拥有该阵列的多个实例,并且必须保存所有这些实例,因为数据库表只能代表该阵列的一个实例。

如果计划拥有多个实例,最好的方法是在blob或TEXT列中序列化和存储。

答案 5 :(得分:0)

我过去使用过JSON来使用PHP5的 json_encode() json_decode()函数:http://uk.php.net/json_encode

您需要做的就是在数据库中有一个文本字段,并将JSON编码的数组插入其中。如果不需要搜索您正在存储的数据,那么这是一种非常有效的数据存储方式,因为您可以轻松快速地将JSON字符串转换回PHP数组并根据需要输出。

您也可以查看YAML,虽然PHP似乎还没有用于解析YAML的内置函数集,因此需要外部类:http://railsforphp.com/2008/01/08/php-meet-yaml/ http://railsforphp.com/2008/01/08/php-meet-yaml/

答案 6 :(得分:0)

您最好最简单的方法是使用序列化。