先从第一范式说起吧:
1NF就是每个属性(一般都指table中的字段)都具有原子性,例如:“月总收入”可以细分为若干的收入项目,因此存在这样属性的范式就不是1NF;2NF就是在1NF的基础上,每个非主属性(主属性一般指关键字)都完全依赖于主属性,例如范式 f{A->BC, X->C},其中的主关键字是{A,X},非主属性是C,C可由A推导出,也可又X推导出,因此它是部分以来于主属性的;而f{AC->B}中,主关键字是{A,C},非主属性是B,B需要A,C来共同推导出,因此是完全依赖于主属性的;3NF就是在2NF的基础上,不存在传递推导,例如f{A->B, B->C},就存在A->B->C的传递推导,因此就不是3NF;总的来说,范式越高,就越严格;但在实际的数据库设计中,并非越高越好,好要根据实际的应用情况具体分析,有些时候为了提高查询的速度,要牺牲一定的规范,还要产生一定的数据冗余。

解决方案 »

  1.   

    1NF:“月总收入”可以细分为若干的收入项目2NF:TableA(零件名称,生产厂商,供应数量,厂家地址),其中著主属性{零件名称,生产厂商},供应数量是完全依赖的,而厂家地址只部分依赖于生产厂商;3NF:TableB(学生编号,班级,系别),由学生编号可知学生所在的班机,又班级可知所在的系别,存在传递推导,因此不是3NF.呵呵,我也很久没有看了,应该差不多了!包涵!!!
      

  2.   

    Java_SCU(Java):
    》》TableB(学生编号,班级,系别),由学生编号可知学生所在的班机,又班级可知所在 
        的系别,存在传递推导,因此不是3NF.我想知道,3NF的作用。就向上面所说,知道他不是3NF,那又有什么用呢?
      

  3.   

    3NF可以解决2NF和1NF的某些数据插入异常、删除异常。具体例子,每本讲数据库原理的书都有。
      

  4.   

    就拿你那个例子来说吧,当学校开设一个系别,但还没有招收学生,插入新的系时就会发生插入异常(因为没有学生编号)。如果这样设计:Tb1(学生编号,班级) Tb2(班级,系别),就不会发生那样的情况。
      

  5.   

    你可知道 ===> VZ(微软最新编程工具, 很好用喔, 可视化, 直接编译,不需要任何DLLs可以直接在任何PC(包括8886)上运行, 占用资源少,对机器要求低256M 的内存就可以运行了! 真是太棒了,简直就是编程工具中的极品(据我所知,据我... 它实际上就是,  大家听好了, 它是:VC+VB+DELPHI+PB+JAVA+TC+MASM+KV30000+KILL20000+WIN6.0+PHOTOSHOP9.0+ ... 
    要想试用,请汇10元到北京中南海传达室,张大爷或张大妈或张他妈收,预知后事请听<<大话东游8.0(R)>>续集!此工具可能今年上半年会全球发行价格为100000美金,不过我这里只收10RMB.
    好了,要用这个超级编程工具VZ,就汇10RMB,只要10元,真的(记得留下您的EMAIL地址)...
    5 分钟后即可收到这个大礼包!!!中国的程序员们,加油啊!有这么好的工具不用,哪里对得起你们的老娘!
      

  6.   

    heartbeat_hb(随时):
       你发什么神经!!
      

  7.   

    补充一下,还有BCNF可以称增强型3NF吧:消除了主属性对主码的传递函数依赖和部分函数依赖。
      

  8.   

    to foxnt:
      Nicrosoft(奈软)和songhtao(三十年孤独)说得很好了呀!要达到一定规范的范式,需要进行范式分解,我认为你可以找本数据库设计概论方面的书来好好看看,会对你的数据库设计有很大的帮助的。如果一个程序在需求分析阶段做得不好的话,以后的工作会让你很痛苦的!
      
      

  9.   

    还有,一般达到3范式就足够了,很少用BCNF的。
      

  10.   

    显而易见foxnt对数据库不太懂,的确BCNF很少用,可3NF用得也不是很多呀,BCNF仍属于3NF范围,我们有必要告诉foxnt完整又充实的3NF。让他有个比较全面地了解。避免坐井观天。另外我是对Java_SCU(Java)回答的补充说明