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

看板Ajax作者 (彥一)時間14年前 (2010/01/09 03:48), 編輯推噓4(4026)
留言30則, 5人參與, 最新討論串4/7 (看更多)
※ 引述《tonilin (小強)》之銘言: : 我講一下我為什麼要一個問卷放一個table好了 : 因為每份問卷都不一樣 : --- : 問卷一 : 問題一答案一 問題一答案二 問題一答案三 問題二答案一 : 第一份回覆 1 0 1 0 : 第二份回覆 0 0 1 1 : . : . : . : --- : 而其他問卷不一定長這樣,因為問卷是使用者自由設計的 : 這樣做的好處是要統計資料的時候很方便,去特定的table,query要的答案 : 要看一份問卷的其中一份結果就是那個table的一個row,很直觀 : 不過如果要把全部的問卷都塞在同一個table : 那我還不知道要怎麼設計才會漂亮@@ : 那時候找到別的問卷系統的這種設計方法突然豁然開朗 : 因為這種方法簡單又直接 : 可是現在又疑惑了@@.. : 資料庫有限定table數嗎?為什麼不能做會自動延伸的table? 其實不就兩個table嗎... table_1 問卷 欄位包括{問卷id,題號,題目,答案,題目類型(依需求,需要才加)}  ̄ ̄ ̄ ̄ ̄ pk table_2 作答結果 {使用者id,問卷id,題號,答案}  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ pk 要撈問卷的時候就去table_1撈問卷id ,sort by題號 使用者回答完就寫到table_2 有幾題就會建立幾個record 要撈某A對問卷1的作答 就撈使用者id = 'A' AND 問卷id = '1' sort by題號 這樣是否比較簡單XD -- ˋ(′~‵")ˊ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.105.1

01/09 04:10, , 1F
嗯嗯,這是我曾經想過的方法,但是感覺資料量會很龐大
01/09 04:10, 1F

01/09 04:11, , 2F
譬如說有1000個問卷每個問卷100題1000個人填答
01/09 04:11, 2F

01/09 04:12, , 3F
這樣就有10的八次方筆資料了..如果這系統永續經營下去
01/09 04:12, 3F

01/09 04:12, , 4F
那資料量會很恐怖
01/09 04:12, 4F

01/09 11:52, , 5F
問題是照你規劃 那會變1000個table 100個field each
01/09 11:52, 5F

01/09 11:52, , 6F
若要考慮永續經營 你的table量是unlimited
01/09 11:52, 6F

01/09 11:53, , 7F
那是不對的用法阿
01/09 11:53, 7F

01/09 13:14, , 8F
這也不能算不對吧 照演算法上的手段 不相干的資料就該
01/09 13:14, 8F

01/09 13:14, , 9F
分割 速度才會快 看你怎麼用吧
01/09 13:14, 9F

01/09 15:52, , 10F
10^8 並不多啊 , 再說不同層級有不同數量的做法 ,
01/09 15:52, 10F

01/09 15:53, , 11F
假設今天你有一千份只有一個問題的問卷每份只有一個人作答 ,
01/09 15:53, 11F

01/09 15:53, , 12F
你就要為此付出1000個table的複雜層級的代價
01/09 15:53, 12F

01/09 15:54, , 13F
而且我不了解你們怎麼都沒考慮到索引的用途 , 索引的本意就
01/09 15:54, 13F

01/09 15:54, , 14F
是表格層級的資料切分啊 , 我沒有說不能設計自動繁衍的table
01/09 15:54, 14F

01/09 15:55, , 15F
只是我覺得要看你的目標規模有多大 , 設定自動繁衍的table
01/09 15:55, 15F

01/09 15:56, , 16F
在資料的描述 , 系統的維護上都會造成負擔 , 也不是萬靈丹.
01/09 15:56, 16F

01/09 15:56, , 17F
沒有什麼絕對對的路 , 都是要看目標去取捨 .
01/09 15:56, 17F

01/10 00:54, , 18F
index我是真的不太了解...
01/10 00:54, 18F

01/10 02:14, , 19F
index 分為 cluster 、 non-cluster 兩種 , 他們的用意都是
01/10 02:14, 19F

01/10 02:14, , 20F
在建立目錄 , 避免 full table scan , 其中cluster 是將資料
01/10 02:14, 20F

01/10 02:15, , 21F
依照key的順序分群 , 適用於key相似度較高的時候 ,
01/10 02:15, 21F

01/10 02:15, , 22F
non-cluster 則反之 , 適用於內容值差異大, ex.身份證字號,
01/10 02:15, 22F

01/10 02:16, , 23F
一般來講一個table 通常只會有一個 non-cluster , 可以有多
01/10 02:16, 23F

01/10 02:16, , 24F
cluster index , 我們會用最常用的幾個 search sql 去對
01/10 02:16, 24F

01/10 02:16, , 25F
db 做針對這些 query 的 index ,
01/10 02:16, 25F

01/10 02:17, , 26F
mysql / mssql 都有針對查詢的分析工具 , 有興趣再自己找資
01/10 02:17, 26F

01/10 02:18, , 27F
料 , db 版也曾經討論過索引跟效能的問題.
01/10 02:18, 27F

01/10 02:18, , 28F
有興趣討論可以再往那邊發展.
01/10 02:18, 28F

01/10 10:54, , 29F
cluster index 是一個還是可以多個?我查到的是一個。
01/10 10:54, 29F

01/10 12:39, , 30F
昨天應該太想睡了 , 我把cluster跟non-cluster 講反了-_-;;
01/10 12:39, 30F
文章代碼(AID): #1BHuly0p (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1BHuly0p (Ajax)