请教:有关范式的问题。
很白痴,第一范式到底是什么样子的?
如果表中有一个字段如下
0411000300000001,其中0411为地区编码,0003为行业编码,00000001为用户号,这种结构到底符不符合第一范式?
问题点数:100、回复次数:19Top
1 楼IronPromises(铁诺)回复于 2001-11-13 12:49:11 得分 0
当然是不符合.每个属性的值唯一,不具有多义性;
http://www.math.pku.edu.cn/teachers/zsy/gljy4.htm
/***************************************************/
铁的承诺,风的回忆.
永远的亚特兰蒂斯,永远的炎龙骑士团.
/***************************************************/
Top
2 楼runmin()回复于 2001-11-13 13:25:19 得分 0
可悲呀~唉
如果我单纯的看他做一种编码方式呢?比如
0411000300000001代表一个用户
0411000300000002代表另一个用户
我看它也不具有多义性呀,它的意义就是一个用户号,
首先这么说,我认为它不对,但是找不出反驳它的理由。Top
3 楼icevi(按钮工厂)回复于 2001-11-13 13:31:02 得分 10
这样进行编码设计不好,还是不要在编码中加上地区、行业等信息。
因为地区、行业的划分有可能会转变的,到时可就不好改了。
从结构上来说,我倒不觉得是违反了第一范式,因为这只是一个用户编号,编码规则本来就是可以按分类来编的。只是觉得这样编码不是太好。Top
4 楼Haiwer(海阔天空)回复于 2001-11-13 13:34:28 得分 10
这要看你的应用了,如果你不以地区编码、行业编码来设计软件,那可以看作只是编码方法,就符合范式了,反之,那可就是设计问题了!Top
5 楼KingSunSha(弱水三千)回复于 2001-11-13 13:42:41 得分 0
我会把这个字段拆开为几个字段,如果经常需要查询这个格式,再加一个冗余字段存储为这种格式.
当然冗余字段肯定是不符合范式的,但是合理的使用能大大提高效率.Top
6 楼SE1()回复于 2001-11-13 13:55:32 得分 25
这实际上是编码是否要有规则的问题。
Haiwer(海阔天空)说的对,主要是看你的应用,也就是说,在你的应用里,如果只是单纯的把0411000300000001作为编码,0411并不代表地区,0003也不代表行业编码,则符合范式,否则就是违反了第一范式。(例如,如0411代表地区,那么当0411000300000001这个用户离开0411这个地区,那你怎么办?改不改编码?不改,他已经不在0411了;改,则可能有大量的表要修改,可能造成不一致)
不过,这样编码的时比较多的,实际上,产生编码时可以按照这个原则进行(如身份证号),但使用时则不认为前4位代表地区就行了--当然,需要别的属性描述地区、行业等。
也就是说:“编码有规则,使用无规则”Top
7 楼runmin()回复于 2001-11-13 13:57:55 得分 0
TO:icevi(按钮工厂)
但是实际上我觉得这个码已经成为数据的载体了,因为在数据表中不存在地区编码和行业编码两个字段,用户不可能没有地区和行业信息的,跟Haiwer(海阔天空)说的正好相反,某种程度上是以这个地区编码代表了用户所在的地区,这样做法应该是不对的吧,(可以再分)?如果考虑加上地区字段和行业字段,这个码中的前8位数据又成了数据冗余,这样同样也不符合范式理论。
不知道这样反驳可不可以:),谢谢咯。
TO:楼上,我也喜欢把它拆开,可是这个表不是我做的:(,做程序的好可怜。Top
8 楼runmin()回复于 2001-11-13 14:03:55 得分 0
也就是说:“编码有规则,使用无规则”
这句话好。这么说来,只要是使用有规则了,必定违反范式了,但是,当我为一个用户生成编码的时候,已经需要用户手工选择自己所在的地区了,这样算不算是“使用有规则”了呢?使用有了规则,肯定是违反范式了吧。Top
9 楼Haiwer(海阔天空)回复于 2001-11-13 14:09:49 得分 10
不赞同“编码有规则,使用无规则” 这句话,这是很危险的思想,结果一定是乱作一团!
必须 "编码有规则,使用也有规则",宁可如KingSunSha(弱水三千) 所说加冗余字段,不符合范式理论,也不能在使用规则上有任何疑义!
Top
10 楼runmin()回复于 2001-11-13 14:21:29 得分 0
看来我还没有了解使用规则是什么意思,楼上,给我讲讲使用有无规则是什么意思,:),笨~Top
11 楼Haiwer(海阔天空)回复于 2001-11-13 14:29:05 得分 10
我的意思是"使用无规则"这句话很容易给人可以顺便使用的印象,拿这个编码来说,如果几个开发组,拿了编码后理解不一样,有的给拆成地区编码、行业编码来使用,有的不拆开使用,那结果一定是乱作一团!
Top
12 楼Haiwer(海阔天空)回复于 2001-11-13 14:31:31 得分 0
一个编码,使用前一定要有详细的说明,这方面我有过教训,很深!
Top
13 楼runmin()回复于 2001-11-13 14:46:27 得分 0
是呀,我也感触呀,我们的数据表里很多这样的,而且是主键,还没有人给我说怎么理解,我晕倒,自己猜咯,但愿没猜错咯。Top
14 楼steve_zp_(路人乙)回复于 2001-11-13 14:48:32 得分 10
所谓第一范式,就是指一个关系中所有的域都是简单域.从以上三个域来看无论是地区编号,还是行业编号,还是职工编号,因为他们都是编号所以都是简单域,所以我觉得这样一个关系是符合第一范式的.Top
15 楼Haiwer(海阔天空)回复于 2001-11-13 14:55:34 得分 0
冗余不怕,加字段!Top
16 楼icevi(按钮工厂)回复于 2001-11-13 14:57:46 得分 25
我是很不同意只在编码中反映地区、行业等信息的。如果是我来做,我会分成三个字段来做:
用户编号 行业代码 地区代码
这样的设计,即使在用户编号这个字段中有反映用户行业和地区的信息,也是没有违反第一范式的,毕竟用户编号只是个代码,其中的信息只是方便记忆,而不是用来进行查询统计和维护用。查询和维护是用后两个字段来实现的。(当然我还是不认同这种编码方式,不过在实际应用中如在产品编码中加入产品类别、规格型号则是很合理的)。
关于编码规则的问题,我不反对在其中带上有意义的代码段,实际应用时也有很多情况下都是这样来做编码的。毕竟编码设计还要考虑易于记忆等问题。但在数据库中不应该只有这个编码就够了,在表中还是应该加上字段来反映产品类别、规格等。在编码中加入适当的冗余也不是不可以。这样的冗余我不认为是冗余。
Top
17 楼KingSunSha(弱水三千)回复于 2001-11-13 15:07:31 得分 0
按钮的说法总是深得我心.:-)Top
18 楼runmin()回复于 2001-11-13 16:10:13 得分 0
不说了,开始给分了:)Top
19 楼skt985(傻问天)回复于 2002-01-11 12:05:08 得分 0
42398关注!Top




