作者tonilin (小強)
看板Ajax
標題[問題] 資料庫正規化的必要性
時間Mon Jan 4 02:19:58 2010
因為牽扯到JSON所以就來這個版問了
我現在做了一個問卷系統
可以自行增加問題
而問題有很多種type,每一種type的attibute數量都不同
譬如說..單選題需要"答案選項",但是如果是文字空格就不需要"答案選項",
我現在的作法是把每一題都視作一個物件,傳進php的時候只需要用json stringfy
傳進去,接著把整個stringfy過後的物件存進table裡面,
而table只有兩個欄位,一個是題號一個是stringfy過後的物件
這樣的好處是,我從資料庫拿出來或存進去都不用做非常複雜的分析
query的時候也非常的簡單
存的時候整個丟進去就好了,要用的時候整個拿出來~
修改也只要覆蓋原本的~
我的問題是,有需要把物件裡面的元素拆成個別的attibute嗎?
譬如說原本的table是
question_num question_obj
兩欄而已
改成
question_num question_content question_notnull qustion_type .....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.233.166
※ 編輯: tonilin 來自: 122.116.233.166 (01/04 02:20)
1F:→ TonyQ:正規化不是鐵則 , 你的問題應該是看你有沒有需要對你的obj 01/04 09:03
2F:→ TonyQ:做sql層級的成員分析 , 有的話當然是要列出來, 否則不需要 01/04 09:03
3F:→ TonyQ:也就是你會不會對question_content question_notnull 查詢 01/04 09:03
4F:推 zhengyao:我不懂幹嘛這麼省table,集中在1個table的目的是??? 01/04 09:15
5F:→ TonyQ:樓上可以去查查反正規化的理由 XD 01/04 09:26
6F:→ TonyQ:通常不外乎是資料調用上的方便,效能上的需要,對資料關係 01/04 09:27
7F:→ TonyQ:比較不嚴謹的欄位的聚合等 01/04 09:28
8F:推 zhengyao:我覺得資料庫還是能byte就不要str,除非是寫給別人用的^^ 01/04 14:44
9F:推 zhengyao:這case我的正規化是題目和特殊答題方式分兩個網頁編輯... 01/04 15:06
10F:推 zhengyao:然後1樣開這個table來加速select(不能忘本呀,交叉分析用) 01/04 16:03
11F:推 cassatte:我個人會用 serialize 來做儲存 01/04 17:43
12F:→ cassatte:當然這適合小量問卷~ 01/04 17:43
13F:→ tonilin:嗯嗯我瞭解了..我大概會用原本的方式吧.. 01/04 17:58
14F:→ tonilin:畢竟要調用的時候方便多了 01/04 17:58
15F:→ tonilin:而且我不會單獨拿一個問題出來做分析 01/04 18:07
16F:→ tonilin:要拿也是全部拿~所以查詢直接用foreach就好 01/04 18:07
17F:推 Kelunyang:如果問卷資料人家填完之後就不能改,乾脆用檔案記錄算了 01/04 20:46
18F:→ Kelunyang:一堆select真的很浪費資源 01/04 20:46
19F:→ tonilin:沒有,這是問卷設計~問卷資料還有別的table來存 01/04 22:22
20F:推 Kelunyang:那如果是紀錄物件屬性,serialize會比較方便吧? 01/04 23:44
21F:→ Kelunyang:這樣可以隨程式擴充XDDD 01/04 23:45
22F:推 Elly:2欄就夠了呀,不管單選複選文字都放同一欄,複選可用位元運算記 01/05 18:23
23F:→ Elly:如果有其它選項,再讓人填文字,也可以在文字前用符號標示 01/05 18:24
24F:推 zhengyao:連連看呢?有沒有人有做過?要當做很多小項的單選或複選嗎? 01/06 10:57
25F:推 shadowjohn:連連看小弟有做過~正解答案一欄,使用者的答案也一欄 01/06 16:18
26F:→ grence:收回來的問卷結果不用做分析嗎? 01/06 21:48
27F:→ grence:都用 JavaScript在 client端跑?還是 server端也能parse 01/06 21:49
28F:推 cassatte:輸出表格或是CVS,丟進Excel或是其他比較好用的軟體 01/07 02:23
29F:推 Kelunyang:啊,那我要建議原po要記得在CSV的每一格都加上 " " 01/07 02:34
30F:→ tonilin:其實我問的只是"問卷的設計"~收回來的結果是放在別的tabl 01/07 04:43
31F:→ tonilin:e~就是一個問卷會產生一個table 01/07 04:43
32F:→ tonilin:這方法我是參考limesurvey的 01/07 04:44
33F:→ grence:「一個問卷會產生一個table」我覺得這很有問題 01/08 01:18
34F:→ tonilin:可以請教一下是什麼問題嗎@@..因為我看limesurvey也是 01/08 01:25
35F:→ tonilin:這樣做的 01/08 01:25
36F:→ TonyQ:看需要跟問題的回覆有沒有標準化 , 不過基本上來講是不會 01/08 09:22
37F:→ TonyQ:設計自動繁衍的table的... :3 01/08 09:22
38F:推 MonyemLi:以前sa規劃過一個問卷一個table...table流水號命名 01/08 12:08
39F:推 Kelunyang:一個問卷不一個table大量select會不會很浪費資源啊@@? 01/08 13:42
40F:→ Kelunyang:不過我是建議原po既然問卷不會在你的系統裡編輯 01/08 13:43
41F:→ Kelunyang:直接存成純文字檔,用append會比較省事一些吧 01/08 13:43
42F:→ TonyQ:樓上你先查查 index 是幹嘛用的就知道了 XD 01/08 14:39
43F:→ TonyQ:良好索引的table 是不怕查的. 01/08 14:39