作者tonilin (小强)
看板Ajax
标题[问题] 资料库正规化的必要性
时间Mon Jan 4 02:19:58 2010
因为牵扯到JSON所以就来这个版问了
我现在做了一个问卷系统
可以自行增加问题
而问题有很多种type,每一种type的attibute数量都不同
譬如说..单选题需要"答案选项",但是如果是文字空格就不需要"答案选项",
我现在的作法是把每一题都视作一个物件,传进php的时候只需要用json stringfy
传进去,接着把整个stringfy过後的物件存进table里面,
而table只有两个栏位,一个是题号一个是stringfy过後的物件
这样的好处是,我从资料库拿出来或存进去都不用做非常复杂的分析
query的时候也非常的简单
存的时候整个丢进去就好了,要用的时候整个拿出来~
修改也只要覆盖原本的~
我的问题是,有需要把物件里面的元素拆成个别的attibute吗?
譬如说原本的table是
question_num question_obj
两栏而已
改成
question_num question_content question_notnull qustion_type .....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.233.166
※ 编辑: tonilin 来自: 122.116.233.166 (01/04 02:20)
1F:→ TonyQ:正规化不是铁则 , 你的问题应该是看你有没有需要对你的obj 01/04 09:03
2F:→ TonyQ:做sql层级的成员分析 , 有的话当然是要列出来, 否则不需要 01/04 09:03
3F:→ TonyQ:也就是你会不会对question_content question_notnull 查询 01/04 09:03
4F:推 zhengyao:我不懂干嘛这麽省table,集中在1个table的目的是??? 01/04 09:15
5F:→ TonyQ:楼上可以去查查反正规化的理由 XD 01/04 09:26
6F:→ TonyQ:通常不外乎是资料调用上的方便,效能上的需要,对资料关系 01/04 09:27
7F:→ TonyQ:比较不严谨的栏位的聚合等 01/04 09:28
8F:推 zhengyao:我觉得资料库还是能byte就不要str,除非是写给别人用的^^ 01/04 14:44
9F:推 zhengyao:这case我的正规化是题目和特殊答题方式分两个网页编辑... 01/04 15:06
10F:推 zhengyao:然後1样开这个table来加速select(不能忘本呀,交叉分析用) 01/04 16:03
11F:推 cassatte:我个人会用 serialize 来做储存 01/04 17:43
12F:→ cassatte:当然这适合小量问卷~ 01/04 17:43
13F:→ tonilin:嗯嗯我了解了..我大概会用原本的方式吧.. 01/04 17:58
14F:→ tonilin:毕竟要调用的时候方便多了 01/04 17:58
15F:→ tonilin:而且我不会单独拿一个问题出来做分析 01/04 18:07
16F:→ tonilin:要拿也是全部拿~所以查询直接用foreach就好 01/04 18:07
17F:推 Kelunyang:如果问卷资料人家填完之後就不能改,乾脆用档案记录算了 01/04 20:46
18F:→ Kelunyang:一堆select真的很浪费资源 01/04 20:46
19F:→ tonilin:没有,这是问卷设计~问卷资料还有别的table来存 01/04 22:22
20F:推 Kelunyang:那如果是纪录物件属性,serialize会比较方便吧? 01/04 23:44
21F:→ Kelunyang:这样可以随程式扩充XDDD 01/04 23:45
22F:推 Elly:2栏就够了呀,不管单选复选文字都放同一栏,复选可用位元运算记 01/05 18:23
23F:→ Elly:如果有其它选项,再让人填文字,也可以在文字前用符号标示 01/05 18:24
24F:推 zhengyao:连连看呢?有没有人有做过?要当做很多小项的单选或复选吗? 01/06 10:57
25F:推 shadowjohn:连连看小弟有做过~正解答案一栏,使用者的答案也一栏 01/06 16:18
26F:→ grence:收回来的问卷结果不用做分析吗? 01/06 21:48
27F:→ grence:都用 JavaScript在 client端跑?还是 server端也能parse 01/06 21:49
28F:推 cassatte:输出表格或是CVS,丢进Excel或是其他比较好用的软体 01/07 02:23
29F:推 Kelunyang:啊,那我要建议原po要记得在CSV的每一格都加上 " " 01/07 02:34
30F:→ tonilin:其实我问的只是"问卷的设计"~收回来的结果是放在别的tabl 01/07 04:43
31F:→ tonilin:e~就是一个问卷会产生一个table 01/07 04:43
32F:→ tonilin:这方法我是参考limesurvey的 01/07 04:44
33F:→ grence:「一个问卷会产生一个table」我觉得这很有问题 01/08 01:18
34F:→ tonilin:可以请教一下是什麽问题吗@@..因为我看limesurvey也是 01/08 01:25
35F:→ tonilin:这样做的 01/08 01:25
36F:→ TonyQ:看需要跟问题的回覆有没有标准化 , 不过基本上来讲是不会 01/08 09:22
37F:→ TonyQ:设计自动繁衍的table的... :3 01/08 09:22
38F:推 MonyemLi:以前sa规划过一个问卷一个table...table流水号命名 01/08 12:08
39F:推 Kelunyang:一个问卷不一个table大量select会不会很浪费资源啊@@? 01/08 13:42
40F:→ Kelunyang:不过我是建议原po既然问卷不会在你的系统里编辑 01/08 13:43
41F:→ Kelunyang:直接存成纯文字档,用append会比较省事一些吧 01/08 13:43
42F:→ TonyQ:楼上你先查查 index 是干嘛用的就知道了 XD 01/08 14:39
43F:→ TonyQ:良好索引的table 是不怕查的. 01/08 14:39