Re: [問題] 資料庫正規化的必要性
※ 引述《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
→
01/10 16:38, , 1F
01/10 16:38, 1F
→
01/10 16:38, , 2F
01/10 16:38, 2F
推
01/10 17:10, , 3F
01/10 17:10, 3F
→
01/10 19:07, , 4F
01/10 19:07, 4F
→
01/10 19:08, , 5F
01/10 19:08, 5F
推
01/11 15:23, , 6F
01/11 15:23, 6F
→
01/11 15:23, , 7F
01/11 15:23, 7F
→
01/11 15:23, , 8F
01/11 15:23, 8F
討論串 (同標題文章)