作者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