作者cjoe (TeA)
看板Ajax
標題Re: [問題] 資料庫正規化的必要性
時間Sun Jan 10 16:21:13 2010
※ 引述《tonilin (小強)》之銘言:
: 推文太多
: 用回覆的好了
: 謝謝大家的回答
: 稍微整理一下好了
: 全部塞在同一個table的好處是好管理,可以設foreign key
: 讓問卷刪除的時候有關連的資料也跟著刪除,不會造成redundancy
: 個別建造table的好處是很直觀,不用做複雜的query,
: 但是如果問卷刪除,還得在php那邊drop table,
: 那如果是刪除使用者,也得判斷個別的問卷table有沒有刪掉
: 得做很多檢查才能避免redundancy
: 不知道我的理解有沒有錯誤的地方
: 不過老實說,如果無限的製造table不會對mysql出現錯誤的話
: 我寧願在php多做幾層檢查,因為接下來要做問卷分析之類的工作,
: 對單一個table query比起對多個table query效率應該比較好
: 而且不用寫複雜的query,
: 也可以很簡單得把table轉成csv讓使用者下載
: 不過前提是無限製造table不會爆炸
: 我有去google可是都不找不到類似的問題Orz
: 而limesurvey也非常多人在用,
: 也沒人提出這個問題
小弟在這邊發表一下自己的愚見,如果有錯誤,望請大家指正。
原PO的問題,在很久以前我也想過。以前自己手工打造一個論壇
程式的時候,我也在思考究竟是要一個討論區一張Table還是不要
這樣做比較好?當初想到的好處跟原PO所想的差不多,不過現在
有別的觀點提供原PO參考一下。
每個問卷一張table,且欄位不固定。
----------------------------------------
一般我們會希望把資料邏輯跟程式邏輯給拆開。過去資料邏輯是被寫在程式裡面的
所以在處理上,想看懂資料邏輯就必須去把程式給搞懂,後來人們認為在管理上不好
因此現在發產出觸發、預儲程序來協助把這兩個東西給拆開,讓程式歸程式,資料
歸資料。
如果照原PO的方法,我想勢必在資料處理上,可能會在需多一道工在處理建置table
,在query的時候,須先另外判斷欄位長度多長。這樣的話,人來看,可能很好理解資料
但是對系統來看,好像複雜度多了一點。
另外,如果突然要多一個欄位或少一個欄位,在處理上可能會造成你的麻煩,
這點要注意。
如果問卷允許,而且空值很多,這樣似乎又顯得更加浪費空間了?
原PO本來擔心正規化後效能會不彰,基本上應該還好查尋次數上應該落在log(n)那邊
而且如果資料是排序過後的,也不會每筆資料都在那邊log(n)。
但是我也覺的原PO的方法也不是說不可行,你自己要權衡所有狀況。
我覺的在實務上並沒有所謂的真理,只有by case,如果原PO實驗結果
真的是每張問卷一個table,系統跑起來會快很多,並且這個才能符合
你的需求,那就這樣做也沒問題呀!
最後在提醒一點
寧可有好的資料結構,也不要聰明的程式碼(教堂與市集)
by Eric S. Raymond
最後...我發現我真的不太會打文章,許多篇我都想回文,但是常常打到一半我就放棄了
:(
--
<table><tr><td> </td> <DIV><DIV><DIV> </DIV><DIV>
</tr><tr><td> </td> </DIV><DIV> </DIV><DIV> </DIV>
</tr><tr><td> </td> </DIV></DIV><DIV><DIV><DIV> </DIV>
</tr></table><table><tr> <DIV> </DIV><DIV> </DIV><DIV>
<td> </td></tr><tr><td> </DIV></DIV></DIV><DIV> </DIV>
</td></tr><tr><td> 問題,往往不是在DIV或是TABLE...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.164.181.191
1F:→ cjoe:另外,推一下原PO,很有心在討論! 01/10 16:38
2F:→ cjoe:我是說原PO T大 01/10 16:38
3F:推 Kelunyang:對啊,乍看還以為到了DB板XD 這個討論真的可以學很多 01/10 17:10
4F:→ TonyQ:而且如果資料是排序過後的 << 應該說資料是索引過的 01/10 19:07
5F:→ TonyQ:cluster-index 就像是 hash function一樣 , 可以快速到位. 01/10 19:08
6F:推 tonilin:嗯嗯!我會想看看如何用正規化的方法做, 01/11 15:23
7F:→ tonilin:如果有想出來,而且很漂亮的話,我應該會採用正規化的方法 01/11 15:23
8F:→ tonilin:畢竟比較好管理 01/11 15:23