作者cjoe (TeA)
看板Ajax
标题Re: [问题] 资料库正规化的必要性
时间Sun Jan 10 16:21:13 2010
※ 引述《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> </td> <DIV><DIV><DIV> </DIV><DIV>
</tr><tr><td> </td> </DIV><DIV> </DIV><DIV> </DIV>
</tr><tr><td> </td> </DIV></DIV><DIV><DIV><DIV> </DIV>
</tr></table><table><tr> <DIV> </DIV><DIV> </DIV><DIV>
<td> </td></tr><tr><td> </DIV></DIV></DIV><DIV> </DIV>
</td></tr><tr><td> 问题,往往不是在DIV或是TABLE...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.181.191
1F:→ cjoe:另外,推一下原PO,很有心在讨论! 01/10 16:38
2F:→ cjoe:我是说原PO T大 01/10 16:38
3F:推 Kelunyang:对啊,乍看还以为到了DB板XD 这个讨论真的可以学很多 01/10 17:10
4F:→ TonyQ:而且如果资料是排序过後的 << 应该说资料是索引过的 01/10 19:07
5F:→ TonyQ:cluster-index 就像是 hash function一样 , 可以快速到位. 01/10 19:08
6F:推 tonilin:嗯嗯!我会想看看如何用正规化的方法做, 01/11 15:23
7F:→ tonilin:如果有想出来,而且很漂亮的话,我应该会采用正规化的方法 01/11 15:23
8F:→ tonilin:毕竟比较好管理 01/11 15:23