我正在構建調查構建系統,並且不確定如何最好地存儲數據。這兩個選擇我可以看到我有有:要序列化數組或不序列化數組:如何存儲調查
- 要使用串行化陣列,或
- 向每個元件,存儲作爲一個單獨的行中的相關表
例如通過使用首先,我將存儲像下面的序列化數組:
Array
(
[name] => Survey
[sections] => Array
(
[0] => Array
(
[name] => Introduction
[pages] => Array
(
[0] => Array
(
[text] => Please answer the following questions.
[questions] => Array
(
[0] => Array
(
[text] => Are you male or female?
[answers] => Array
(
[0] => Male
[1] => Female
)
)
)
)
)
)
)
)
的好處我認爲這是:
- 它是集中的,並且
這是很容易使用簡單的查詢類的腳本中編輯:
UPDATE surveys SET data = '$serialized_array'
主要缺點我看到的情況是:
- 腳本以外的編輯很困難(例如使用Navicat時)
我也聽說將數據存儲爲序列化數組是不好的做法。雖然我認爲這完全取決於上下文(或者我聽到這個錯誤的人)。
通過使用第二(存儲每個元素作爲在相關表中的單獨的行),我想有一個數據庫結構是這樣的:
調查
id name
1 Survey
部分
id name survey_id index
1 Introduction 1 0
頁面個
id text section_id index
1 Please answer these questions. 1 0
問題
id text page_id index
1 Are you male or female? 1 0
回答
id text question_id index
1 Male 1 0
2 Female 1 1
我看到這樣做的好處是:
- 有內容的更好的分離,
- 它更容易之外編輯腳本(使用Navicat的時候一樣,例如)
主要缺點我看到的情況是:
- 這是比較難的腳本中編輯(許多查詢複雜的邏輯來處理重新排序的元素或重新結構化的答案)
我給你的問題是:這兩種方法中的哪一種(如果確實是這兩種方法)更適合手頭的任務?我很想將數據作爲序列化數組存儲,因爲構建起來更容易,而且更容易控制。雖然我可以看到... 優雅 ...將數據存儲爲相關表中的單獨行。
如果它有任何相關性,那麼現在使用JavaScript構建調查問卷:使用(特別是)jQuery添加,刪除和重新排序HTML元素,然後以表單形式提交完成的產品(使用$_POST
數組就是我上面給出的例子)。
如果你願意考慮不同的數據庫,如文檔存儲如MongoDB的問題可能會變得毫無意義。 – cmbuckley 2012-04-22 11:31:51
看起來很有趣。儘管我並不是僅僅爲我自己的用途建立這個調查系統,而是爲了任何人和每個人下載和實施自己,所以最好不要依賴不太常用的第三方軟件 – MichaelRushton 2012-04-22 11:36:50