作者SHANGOYANYI (彥一)
看板Ajax
標題Re: [問題] 資料庫正規化的必要性
時間Sat Jan 9 03:48:09 2010
※ 引述《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
1F:推 tonilin:嗯嗯,這是我曾經想過的方法,但是感覺資料量會很龐大 01/09 04:10
2F:→ tonilin:譬如說有1000個問卷每個問卷100題1000個人填答 01/09 04:11
3F:→ tonilin:這樣就有10的八次方筆資料了..如果這系統永續經營下去 01/09 04:12
4F:→ tonilin:那資料量會很恐怖 01/09 04:12
5F:→ SHANGOYANYI:問題是照你規劃 那會變1000個table 100個field each 01/09 11:52
6F:→ SHANGOYANYI:若要考慮永續經營 你的table量是unlimited 01/09 11:52
7F:→ SHANGOYANYI:那是不對的用法阿 01/09 11:53
8F:推 buganini:這也不能算不對吧 照演算法上的手段 不相干的資料就該 01/09 13:14
9F:→ buganini:分割 速度才會快 看你怎麼用吧 01/09 13:14
10F:→ TonyQ:10^8 並不多啊 , 再說不同層級有不同數量的做法 , 01/09 15:52
11F:→ TonyQ:假設今天你有一千份只有一個問題的問卷每份只有一個人作答 , 01/09 15:53
12F:→ TonyQ:你就要為此付出1000個table的複雜層級的代價 01/09 15:53
13F:→ TonyQ:而且我不了解你們怎麼都沒考慮到索引的用途 , 索引的本意就 01/09 15:54
14F:→ TonyQ:是表格層級的資料切分啊 , 我沒有說不能設計自動繁衍的table 01/09 15:54
15F:→ TonyQ:只是我覺得要看你的目標規模有多大 , 設定自動繁衍的table 01/09 15:55
16F:→ TonyQ:在資料的描述 , 系統的維護上都會造成負擔 , 也不是萬靈丹. 01/09 15:56
17F:→ TonyQ:沒有什麼絕對對的路 , 都是要看目標去取捨 . 01/09 15:56
18F:推 buganini:index我是真的不太了解... 01/10 00:54
19F:→ TonyQ:index 分為 cluster 、 non-cluster 兩種 , 他們的用意都是 01/10 02:14
20F:→ TonyQ:在建立目錄 , 避免 full table scan , 其中cluster 是將資料 01/10 02:14
21F:→ TonyQ:依照key的順序分群 , 適用於key相似度較高的時候 , 01/10 02:15
22F:→ TonyQ:non-cluster 則反之 , 適用於內容值差異大, ex.身份證字號, 01/10 02:15
23F:→ TonyQ:一般來講一個table 通常只會有一個 non-cluster , 可以有多 01/10 02:16
24F:→ TonyQ:cluster index , 我們會用最常用的幾個 search sql 去對 01/10 02:16
25F:→ TonyQ:db 做針對這些 query 的 index , 01/10 02:16
26F:→ TonyQ:mysql / mssql 都有針對查詢的分析工具 , 有興趣再自己找資 01/10 02:17
27F:→ TonyQ:料 , db 版也曾經討論過索引跟效能的問題. 01/10 02:18
28F:→ TonyQ:有興趣討論可以再往那邊發展. 01/10 02:18
29F:推 cjoe:cluster index 是一個還是可以多個?我查到的是一個。 01/10 10:54
30F:→ TonyQ:昨天應該太想睡了 , 我把cluster跟non-cluster 講反了-_-;; 01/10 12:39