精华内容
下载资源
问答
  • 数据库三范式是什么? 第一范式:最基本要求,表中的每一列必须保证原子性,列不可在分割。 如有一个列,年级班级。然后存储数据为,一年级一班,一年级二班。那么这是错误的,应该年级和班级分开为单独列。 ...
  • 数据库三范式 & 事务

    2020-12-14 16:09:10
    数据库三范式具体如下: 1、 第一范式(1st NF -列都是不可再分) 第一范式的目标是确保每列的原子性: 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF) 2、第二范式(2nd NF -...
  • 数据库三范式

    2012-12-15 12:29:13
    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
  • 数据库 三范式最简单最易记的解释,整理一下方便大家记忆。
  • 数据库三范式(浅显易懂)

    千次阅读 多人点赞 2021-03-24 14:32:23
    1.第一范式(1NF):列不可再分 1.每一列属性都是不可再分的属性值,确保每一列的原子性 2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据 例: 有一个学生表,假设有两个字段分别是 ...

    1.第一范式1NF:列不可再分

    1.每一列属性都是不可再分的属性值,确保每一列的原子性

    2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据

     

    例:

    有一个学生表,假设有两个字段分别是 name,address,而address内容写的是:江苏省南京市浦口区xxx街道xxx小区。如果这时来一个需求,需要按省市区分类,显然不符需求,这样的表结构也不是符合第一范式的。

    应该设计成  name,province(省),city(市),area(区),address

     

    2.第二范式(2NF)属性完全依赖于主键


    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

    第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键

    每一行的数据只能与其中一列相关,即一行数据只做一件事,只要数据列中出现重复的数据,那么就要把表拆分开来。

    例:

    有一个订单表如下:

    orderId(订单编号),roomId(房间号), name(联系人), phone(联系电话),idn(身份证)

    如果这时候一个人同时订了好几个房间,就会变成一个订单编号对应多条数据,这样子联系人都是重复的,就会造成数据冗余,这时我们应该把拆分开来。

    如:

    订单表:

    orderId(订单编号),roomId(房间号), peoId(联系人编号)

    联系人表:

    peoId(联系人编号),name(联系人), phone(联系电话),idn(身份证)

     

    3.第三范式(3NF)属性不依赖于其它非主属性    属性直接依赖于主键

    第二范式(3NF)是在第一范式(2NF)的基础上建立起来的,即满足第三范式(3NF)必须先满足第二范式(2NF)。

    简单点意思就是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

    例:

    假设有一个员工(employee)表,它有九个属性:id(员工编号)、name(员工名称)、mobile(电话)、zip(邮编)、province(省份)、city(城市)、district(区县)、deptNo(所属部门编号)、deptName(所属部门名称)

    员工表的province、city、district依赖于zip,而zip依赖于id,换句话说,province、city、district传递依赖于id,违反了 3NF 规则。为了满足第三范式的条件,可以将这个表拆分成employee和zip两个表,如下

    employee

    idnamezip
    101张三100001
    102李四200001
    103王五510001

    地区表area

    zipprovincecitydistrict
    100001北京北京海淀区
    200001上海上海静安区
    51000广东省广州白云区

     

    为什么需要范式

    数据库范式为数据库的设计、开发提供了一个可参考的典范,在许多教学材料中也是作为关键的课程内容。
    那么范式的提出是为了解决什么问题?

    • 第一范式,要求将列尽可能最小的分割,希望消除某个列存储多个值的冗余的行为
      比如用户表中的地址信息,拆分为省、市这种明确的字段,可以按独立的字段检索、查询
    • 第二范式,要求唯一的主键,且不存在对主键的部分依赖,希望消除表中存在冗余(多余)的列
      比如订单表中的商品分类、详情信息,只需要由商品信息表存储一份即可。
    • 第三范式,要求没有间接依赖于主键的列,即仍然是希望消除表中冗余的列
      比如用户表中不需要存储额外的 其所在城市的人口、城市特点等信息。

    很明显,这些范式大都是为了消除冗余而提出的,即尽可能的减少存储成本。

     


    没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

     

     

     

    展开全文
  • 数据库三范式理解

    万次阅读 多人点赞 2019-03-19 21:05:20
    一般来说的数据库三范式都是指的关系型数据库范式指的就是规范的意思,三范式指的就是利用关系型数据库进行建表时候普遍需要遵循的个规范(即1NF,2NF,3NF); 1NF:建表时要保证列的原子性(即不可分割性);...

    一般来说的数据库三范式都是指的关系型数据库,范式指的就是规范的意思,三范式指的就是利用关系型数据库进行建表时候普遍需要遵循的三个规范(即1NF,2NF,3NF);

    1NF:建表时要保证列的原子性(即不可分割性);打个比方:电话这个字段有可能是座机,也有可能是手机,具有可分割性,所以不符合1NF;应该改成:这样就符合列的不可分割性,即第一范式;

    2NF:第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。-------百度百科          是不是发现看不懂?没关系,可以看一个简单的例子:如果一个客户定了多个房间,那么那么相当于后面的联系人、联系人电话、身份证号这三个字段就会重复出现在每一行数据中,造成数据的冗余,不符合第二范式(2NF);所以第二范式要符合所有字段要和主键有直接的依赖关系,不然会造成数据的冗余;应该改成一对多的形式,这样就能解决冗余的问题:  订单表: 

    客户表:

    3NF:第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。------百度百科        再来看个简单的例子:比如说现在有个Student表,如果把表设计成这个样子的话,那么所在院校、院校地址、院校电话这三个字段的信息就会有大量的重复,不符合第三范式(3NF);应该改成这个样子:

    学生表:                                                     院校表:

    展开全文
  • 数据库设计过程中不仅要考虑遵循第三范式,还要考虑是否冗余 很多数据库设计书籍都强调数据库设计三范式,而三范式的一个重要工作就是消除冗余,可以消除冗余在大多数情况下是正确的。当在实际的业务模型中,处理...

    数据库设计过程中不仅要考虑遵循第三范式,还要考虑是否冗余

    很多数据库设计书籍都强调数据库设计三范式,而三范式的一个重要工作就是消除冗余,可以消除冗余在大多数情况下是正确的。当在实际的业务模型中,处理复杂的业务时有时冗余某些信息是更好的。

    一、业务需求

    值班排班业务:
    1、可以设置值班人员;
    2、可以设置值班班次;
    3、可以进行值班编排;

    二、概念结构设计

    1、需求分析;

    (略过)

    2、画用例图;

    progress(略过)

    3、画E-R图:

    1)、定义实体:组织成员、值班成员、班次、排班
    2)、组织成员是组织中的全部成员
    3)、值班成员依赖于组织成员
    4)、排班依赖于班次和值班成员
    5)、当前时间已经超过给值班人员排的班次的值班时间时,排班记录自动成为排班历史记录

    简单写一下几个实体中的属性
    值班成员 shift_contactor_setting(id,…)
    班次 shift_setting(id,time,…);
    排班 shift_arrange(id,shift_setting_id,shift_contactor_setting_id,date,…)

    首先是满足了第三范式,都是我们继续看,当排班记录成为历史时,排班记录应该是不可变的。都是由于我们的排班表是依赖于班次表的,当修改班次记录时,排班历史也可能关联变化了
    这里考虑两种解决办法:

    第一种

    把班次的time冗余到排班表中: shift_arrange(id,shift_setting_id,shift_contactor_setting_id,date,time…)
    新增排班时将班次表的time赋值给排班表的time

    第二种

    不做冗余,而是每次修改班次时,将旧的班次逻辑删除,然后增加一条新的班次记录;然后还需要将当前时间小于排班的时间的排班记录(也就是未成为历史记录的排班记录)关联的班次id设置为新的班次id,而已经成为排班历史记录的排班记录不作处理
    查询时,需要显示排班记录中关联的被逻辑删除的班次

    可以看出,第二种方式虽然没有任何冗余,都是增加了代码上的操作,更为复杂,所以这种场景更适合设计冗余字段

    三、逻辑结构设计

    powerDesigner

    四、物理结构设计

    MySQL或者将powerDesigner生成的逻辑结构转换成物理结构


    数据库的设计并不是一成不变,需要结合实际业务场景进行灵活的变化

    补充一下数据库三范式的概念:
    范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。

    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
    下面就简单介绍下这三个范式。

    1. 第一范式(1NF)

    强调的是列的原子性,即列不能够再分成其他几列。
    考虑这样一个表:【联系人】(姓名,性别,电话)
    如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。

    说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。

    1. 第二范式(2NF)

    首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

    考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。
    因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。
    可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。

    第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

    1. 第三范式(3NF)

    在1NF基础上,任何非主属性不依赖于其它非主属性[在2NF基础上消除传递依赖]。

    第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。

    首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。

    其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。
    通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。

    第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

    展开全文
  • 数据库三范式简单理解

    万次阅读 2018-03-09 09:11:40
    数据库设计当中三范式是经常遇到的,如果实际项目数据库设计中能达到第三范式基本也就满足要求了,那么如何快速有效的理解范式,同时应用于实际项目中去呢?首先看看标准定义的范式:第一范式(1NF)所谓第一...

    数据库设计当中三范式是经常遇到的,如果实际项目数据库设计中能达到第三范式基本也就满足要求了,那么如何快速有效的理解三个范式,同时应用于实际项目中去呢?

    首先看看标准定义的三个范式:

    第一范式(1NF)

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。

    在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

    我的理解:列不可分。

    第二范式(2NF)

    第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一的区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。要求实体的属性完全依赖于主关键字。

    我的理解:不能部分依赖。即:一张表存在组合主键时,其他非主键字段不能部分依赖。

    第三范式(3NF)

     满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

    在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。

    我的理解:不能存在传递依赖。即:除主键外,其他字段必须依赖主键。

    官方标准的定义,我个人感觉说得非常术语化,比较难以理解消化。我简单的理解为三句话,非常简短,比较好理解。如果各位路过朋友们,有更好理解的总结,请不吝指出!


    二,,

    1.第一范式(确保每列保持原子性)

    第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

    第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。

    上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

                    

    2.第二范式(确保表中的每列都和主键相关)

    第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

    比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

     订单信息表

    这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

    而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

    这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

                     

    3.第三范式(确保每列都和主键列直接相关,而不是间接相关)

    第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关

    比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、所属公司等)的字段。如下面这两个表所示的设计就是一个满足第三范式的数据库表。

    这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必在订单信息表中多次输入客户信息的内容,减小了数据冗余。



    三,,,

    sql sever 中如何在两个表之间建立参照关系
    这个是通过创建一种称为   “外键”  的东西, 来建立  参照关系的。



    例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    -- 创建测试主表. ID 是主键.
    CREATE  TABLE  test_main (
       id       INT    NOT  <a href= "https://www.baidu.com/s?wd=NULL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPWczPH0vnhnYmW6vrHD40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DdnH0knjmsPWR3PHb4PWc3PW0"  target= "_blank"  class= "baidu-highlight" > NULL </a>,
       value   <a href= "https://www.baidu.com/s?wd=VARCHAR&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPWczPH0vnhnYmW6vrHD40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DdnH0knjmsPWR3PHb4PWc3PW0"  target= "_blank"  class= "baidu-highlight" > VARCHAR </a>(10),
       PRIMARY  <a href= "https://www.baidu.com/s?wd=KEY&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPWczPH0vnhnYmW6vrHD40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DdnH0knjmsPWR3PHb4PWc3PW0"  target= "_blank"  class= "baidu-highlight" > KEY </a>(id)  
    );
     
     
    -- 创建测试子表. 
    CREATE  TABLE  test_sub (
       id       INT   NOT  <a href= "https://www.baidu.com/s?wd=NULL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPWczPH0vnhnYmW6vrHD40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DdnH0knjmsPWR3PHb4PWc3PW0"  target= "_blank"  class= "baidu-highlight" > NULL </a>,
       main_id  INT  ,
       value   <a href= "https://www.baidu.com/s?wd=VARCHAR&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPWczPH0vnhnYmW6vrHD40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DdnH0knjmsPWR3PHb4PWc3PW0"  target= "_blank"  class= "baidu-highlight" > VARCHAR </a>(10),
       PRIMARY  <a href= "https://www.baidu.com/s?wd=KEY&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPWczPH0vnhnYmW6vrHD40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DdnH0knjmsPWR3PHb4PWc3PW0"  target= "_blank"  class= "baidu-highlight" > KEY </a>(id)  
    );
     
     
    -- 插入测试主表数据.
    INSERT  INTO  test_main(id, value)  VALUES  (1,  'ONE' );
    INSERT  INTO  test_main(id, value)  VALUES  (2,  'TWO' );
     
    -- 插入测试子表数据.
    INSERT  INTO  test_sub(id, main_id, value)  VALUES  (1, 1,  'ONEONE' );
    INSERT  INTO  test_sub(id, main_id, value)  VALUES  (2, 2,  'TWOTWO' );
     
     
     
    下面这个语句,  在  主表与子表之间, 创建一个关系
    ALTER  TABLE  test_sub  ADD  CONSTRAINT  main_id_cons   FOREIGN  <a href= "https://www.baidu.com/s?wd=KEY&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dWPWczPH0vnhnYmW6vrHD40ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1DdnH0knjmsPWR3PHb4PWc3PW0"  target= "_blank"  class= "baidu-highlight" > KEY </a> (main_id)   REFERENCES   test_main;


    四,,举个例子

    请问,如何将如图所示的这张数据库表分割成符合第三范式(3NF)的几张表?




    用户,学院,专业,年级,班级
    用户(用户编号userid,用户名username,密码password,性别sex,权限authority,班级编号classid),主键是userid,外键是classid
    学院(学院编号collegeid,学院名称college),主键是collegeid
    专业(专业编号specialtyid,专业名称specialty,方向direction,学院编号collegeid),主键是specialtyid,外键是collegeid
    年级(年级编号gradeid,年级名称grade),主键是gradeid
    班级(班级编号classid,班级名称class,专业编号specialtyid,辅导员mother,班长monitor,年级编号gradeid),主键是classid,外键是专业编号specialtyid,辅导员mother(参照userid),班长monitor(参照userid),年级编号gradeid
    
    
    五,,,好处
    数据库的三范式对数据库来说是是具有一定好处的,先抛开定义不谈,每当设计数据库的时候,往往会具有较大的数据库体系,也就是每个表之间的关系,不同表中某些属性都具有一定的关系,因为具有关联,所以数据在存储的时候逻辑会比较复杂,如果不按照一定的规则来存储数据就会有乱子,就像你开车一样,没有交通规则不就混乱了么?因此,在数据库设计的时候满足范式要求可以很大限度的合理的处理数据,减少数据的冗余,即多余的用数据,当然范式的优点也不仅仅体现在这方面。
    但换句话说,如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,数据库的设计应该根据当前情况和需求做出灵活的处理。
    展开全文
  • 数据库三范式设计习题

    千次阅读 2021-07-27 16:09:28
    现在要建立关于系、学生、班级、学会的数据库,关系模式为: 班(班号,专业名,系名,班人数,入学年份) 学生(学号,姓名,出生日期,系名,班号,宿舍区) 系(系号,系名,办公室,系人数) 学会(学会名,成立...
  • 数据库三范式是什么?

    千次阅读 2019-10-09 21:30:35
    什么是范式? 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必...
  • https://zhuanlan.zhihu.com/p/20028672三范式详解 解决了什么问题:(上面也有讲到)https://blog.csdn.net/qq_41174684/article/details/90313791
  • 数据库三范式区别

    2019-05-06 19:28:02
    三范式总结 所谓的范式,其实就是我们设计数据库时应该遵守的一种规范 第一范式: 强调列应该是最小单元,不能再分 如下: 不属于第一范式。contact列不是最小单元还能再分 拆分第一范式为: 第二范式: 强调必须...
  • 数据库三范式详解+例子

    万次阅读 多人点赞 2017-03-16 13:31:37
    数据库三范式详解 2014-02-25 21:38 10674人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: oracle(20) 作者同类文章X 数据库的设计范式数据库设计所需要满足的规范,满足这些规范的...
  • 范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导...
  • 数据库三范式的简单理解

    万次阅读 多人点赞 2017-04-08 23:58:15
    数据库范式 范式的级别  设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。  目前关系数据库有六种范式...
  • 关系型数据库三范式

    2018-11-21 22:49:22
     根据满足约束条件的级别不同,范式由低到高分为:1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、BNF(BC范式)、4NF(第四范式),不同级别的范式性质不同。 2、第一范式(1NF)  1NF是最低的规范化要求...
  • 什么是范式?...什么是范式? 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在...
  • 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 一般来说,数据库只需满足第三范式(3NF)就行了。 所谓...
  • 第一范式就是原子性,字段不可再分割; 第二范式就是完全依赖,没有部分依赖; 第三范式就是没有传递依赖。
  • 1.第一范式数据库的字段是单一属性,不可再分  不能是复合属性,如果存在,应该拆分为多个属性  不能是多值属性,如果存在,应该建立一个实体,而让此属性与其存在1对多的关系)  不能是重复属性    2....
  • 学案之数据库三范式.pdf
  • 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 第一范式(1NF):是指在关系模型中,对域添加的一个...
  • 【专讲】 数据库三范式.doc
  • 数据库 三范式

    2012-01-08 01:09:34
    数据库的设计范式数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员...
  • Java面试资料有关数据库的问题 数据库 三范式
  • 数据库三范式是什么?

    2016-10-05 14:39:00
    所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的, 不可再分。 例如, 姓名字段, 其中的姓和名必须作为一个整体, 无法区分哪部分是姓, 哪部分是名, 如果要区分出姓和名, 必须设计成两个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,606
精华内容 33,442
关键字:

数据库三范式

友情链接: 00363947pso-bp.rar