2009-07-17 30 views
1

我有一個非常長的具有整數值的行程項目列表。我正在考慮創建一個數據庫,每個項目都有50列,但看起來有點冗長,而且行程可能會改變。有沒有更好的方法來將這些name =>值對存儲在數據庫中?序列化似乎有點粗糙,我正在考慮創建一個帶有名稱,值列的itinerary_items數據庫並將數據粘貼在那裏。什麼是最好的解決方案?在數據庫中存儲大型數組

回答

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   | 

問題與使用此類型的解決方案是的做法數據往往更不易於人類閱讀,並且如果對象上有多個屬性,則會有大量額外的聯接。

+0

這是我的想法,我不確定這是否是最好的解決方案,但... – brndnmg 2009-07-17 07:40:24

+0

如果您添加一個額外的鍵來跟蹤實例,也許添加第二個(主)表來跟蹤的這些實例,甚至可能會命名每個實例。 – 2009-07-17 07:55:28

2

正如你所提到的,你幾乎都有一個關鍵的列和一個值的列,並插入記錄。

2

如果您存儲的數據不用於搜索數據庫,並且只在應用程序代碼中更新,那麼我會傾向於將其存儲爲blob。如果您很可能會更新其中的部分內容,而無需讀取完整的數據集以進行有意義的更新,那麼帶有id,user_id,key,value等列的單獨表格就可以順利完成。

0

寫出一個for循環來創建INSERT語句,然後執行查詢以將數組保存到具有鍵和值列的表中。要重新創建數組,請從表中檢索並使用另一個for循環將值重新插入到數組中。

我在這種設置中可以看到的唯一問題是,如果您計劃有多個數組實例並且必須保存所有這些實例,因爲數據庫表只能表示數組的一個實例。

如果計劃擁有多個實例,最好的方法是序列化並存儲在BLOB或TEXT列中。

3

你有多少條記錄?數百?成千上萬的?

如果你的記錄數低於500,那麼我認爲你根本不應該拿起數據庫。您可以將其存儲在XML文件中。這些是NoSQL :)的時間。

不是我支持這個動作,而是一個數據庫看起來像你的需求的超速。

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/

0

你最好的,最簡單的方法是使用連載。

相關問題