CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请教:有关范式的问题。

楼主runmin()2001-11-13 12:40:34 在 MS-SQL Server / 基础类 提问

很白痴,第一范式到底是什么样子的?  
   
  如果表中有一个字段如下  
   
  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

相关问题

  • 请教有关范式的概念,及其应用
  • 第三范式
  • 关于BC范式
  • 数据范式请教
  • 几个范式的解释
  • 菜鸟发问:关于范式
  • 求数据库范式的规范
  • 关于数据库范式的问题
  • 请教数据库的范式问题
  • 关系数据库范式的例子

关键词

  • 编码
  • 范式
  • 字段
  • 行业
  • 用户
  • 代码
  • 应用
  • 数据
  • 信息
  • 规则

得分解答快速导航

  • 帖主:runmin
  • icevi
  • Haiwer
  • SE1
  • Haiwer
  • Haiwer
  • steve_zp_
  • icevi

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo