Re: [問題] 資料庫正規化的必要性

看板Ajax作者 (TeA)時間14年前 (2010/01/10 16:21), 編輯推噓2(206)
留言8則, 4人參與, 最新討論串6/7 (看更多)
※ 引述《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>&nbsp;</td> <DIV><DIV><DIV>&nbsp;</DIV><DIV>&nbsp; </tr><tr><td>&nbsp;</td> </DIV><DIV>&nbsp;</DIV><DIV>&nbsp;</DIV> </tr><tr><td>&nbsp;</td> </DIV></DIV><DIV><DIV><DIV>&nbsp;</DIV> </tr></table><table><tr> <DIV>&nbsp;</DIV><DIV>&nbsp;</DIV><DIV> <td>&nbsp;</td></tr><tr><td> &nbsp;</DIV></DIV></DIV><DIV>&nbsp;</DIV> &nbsp;</td></tr><tr><td>&nbsp; 問題,往往不是在DIV或是TABLE... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.181.191

01/10 16:38, , 1F
另外,推一下原PO,很有心在討論!
01/10 16:38, 1F

01/10 16:38, , 2F
我是說原PO T大
01/10 16:38, 2F

01/10 17:10, , 3F
對啊,乍看還以為到了DB板XD 這個討論真的可以學很多
01/10 17:10, 3F

01/10 19:07, , 4F
而且如果資料是排序過後的 << 應該說資料是索引過的
01/10 19:07, 4F

01/10 19:08, , 5F
cluster-index 就像是 hash function一樣 , 可以快速到位.
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
文章代碼(AID): #1BIOu1Ox (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1BIOu1Ox (Ajax)