精华内容
下载资源
问答
  • 数据库设计三大范式

    2017-10-13 17:04:54
    介绍数据库设计基本的三大范式,简练透彻的立即数据库设计范式
  • 数据库的设计范式数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入、删除和更新操作异常。第一范式:数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本...
  • 在实际开发中最为常见的设计范式个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要...
  • 数据库设计三大范式和五大约束

    千次阅读 多人点赞 2020-08-30 11:20:00
    一、三大范式: 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中...

    一、三大范式:

    什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法,以下就是对这三个范式的基本介绍:

    第一范式(1NF):

    1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。

     

    如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。

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

     

    显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。

     第二范式(2NF):

    满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

    一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

     

    这样便实现啦一条数据做一件事,不掺杂复杂的关系逻辑。同时对表数据的更新维护也更易操作。

    第三范式(3NF):

    满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)。

    数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。

    注意事项:

    1.第二范式与第三范式的本质区别:在于有没有分出两张表。

    第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表,第三范式是要求已经分好了多张表的话,一张表中只能有另一张标的ID,而不能有其他任何信息,(其他任何信息,一律用主键在另一张表中查询)。

    2.必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式。

    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

    二、五大约束:

    数据库中的五大约束包括:

    1.主键约束(Primay Key Coustraint) 唯一性,非空性;

    2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;

    3.默认约束 (Default Counstraint) 该数据的默认值;

    4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;

    5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。

    五大约束的语法示例:

    1. 添加主键约束

    Alter table 表名 add Constraint 主键名 primary key(字段)

    2.  添加唯一约束

    Alter table 表名 add Constraint 约束名 unique(字段)

    3.  添加默认约束

    Alter table 表名 add Constraint 约束名 default(默认内容) for 字段名

    4.  添加检查约束

    Alter table 表名 add Constraint 约束名 check (字段表达)

    5.  添加外键约束

    Alter table 表名 add Constraint 约束名 foreign key(字段) references 表名(字段名)

    详细介绍:

    (1)[外键约束 (Foreign Key Counstraint) ]

    1.设置外键的注意事项:
      ①:只有INNODB的数据库引擎支持外键,修改my.ini文件设置default-storage-engine=INNODB;
      ②:外键与参照列的数据类型必须相同。(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同);
      ③:设置外键的字段必须要有索引,如果没有索引,设置外键时会自动生成一个索引;

    2.设置外键的语法:

    [CONSTRAINT 外键名] FOREIGN KEY(外键字段) REFERENCES 参照表(参照字段)  [ON DELETE SET NULL ON UPDATE CASCADE] -- 设置操作完整。

    3、外键约束的参照操作:
    当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对。
    参照操作可选值:
      RESTRICT: 拒绝对参照字段的删除或修改(默认);
      NO ACTION:与RESTRICT相同,但这个指令只在MySql生效;
      CASCADE:  删除或更新参照表的参照字段时,外键表的记录同步删除或更新;
      SET NULL: 删除删除或更新参照表的参照字段时,外键表的外键设为NULL (此时外键不能设置为NOT NULL)。

    (2)[主键约束](Primay Key Coustraint) 
    1.主键的注意事项:主键默认非空,默认唯一性约束,只有主键可以设置自动增长(主键不一定自增,自增一定是主键)。
    2.设置主键的方式:

      ①:在定义列时设置:id     INT UNSIGNED PRIMARY KEY。
      ②:在列定义完成后设置:PRIMARY KEY(id)。

    展开全文
  • 数据库设计三大范式(例子图解)

    千次阅读 多人点赞 2019-04-25 20:44:42
    为了减少数据冗余,设计数据表时必须遵循一定的规则,在关系型数据库中这种规则就称为范式。 引用:http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 1.第一范式1NF(确保每列保持原子性) 每一...

    范式定义:<设计表的规范>

    为了减少数据冗余,设计数据表时必须遵循一定的规则,在关系型数据库中这种规则就称为范式。

    引用:http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

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

    • 每一列属性都是不可再分的属性值,确保每一列的原子性
    •  两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

    根据实际需求设计的字段值不可再分解。比如“部门”和“角色”在需求中都较常用,应该分开两个字段。

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

    第二范式是说一张表中包含了多种不同的实体属性,那么要必须分成多张表

    一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。订单表和商品表不能设计在一张表里,应该分开两个表,再加一个多对多的商品id和订单id关联表。(一个表只描述一件事情)

    3.第三范式3NF(在2NF的基础上加外键)

    第三范式(3NF):必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);

    例如:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个用户id即可(外键),而不能有其他的客户信息。因为其他的客户信息直接关联于用户id,而不是直接与订单id直接相关。

    订单表中的用户信息不直接设计字段,设计一个用户id字段再外键关联用户表即可。

    三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

    二、三范式在可以不满足在实际应用中!!

     

    转载:https://blog.csdn.net/qq_33862644/article/details/79692652

    总结:

    第1范式:每个表中都有1列,并且该列是不可拆分的最小单元

    第2范式:1张表只描述一件事情

    第3范式:用外键做表的关联

    【数据库五大约束】

    1.primary KEY:设置主键约束;
    2.UNIQUE:设置唯一性约束,不能有重复值;
    3.DEFAULT 默认值约束,height DOUBLE(3,2)DEFAULT 1.2 height不输入是默认为1,2
    4.NOT NULL:设置非空约束,该字段不能为空;
    5.FOREIGN key :设置外键约束。
     

     

    展开全文
  • 关系型数据库设计三大范式总结

    千次阅读 2019-05-07 16:48:21
    数据库设计三大范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足...

    数据库设计三大范式
    为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

    在实际开发中最为常见的设计范式有三个:

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

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

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

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

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

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

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

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

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

    在这里插入图片描述

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

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

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

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

    在这里插入图片描述

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

    另注:
    第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
    第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
    第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

    简单来说,就是:
    第一范式:具有原子性
    第二范式:主键列与非主键列遵循完全函数依赖关系
    第三范式:非主键列之间没有传递函数依赖关系

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

    展开全文
  • 首先关于数据库三大范式是什么,我们不再多说,网上很多博客写的都很好,例如以下链接: ... 版权声明:以上链接为博主原创文章,遵循 CC 4.0 by-sa 版权协议,...虽然数据库设计范式是设计经验,不是强制遵守的规则...

    首先关于数据库三大范式是什么,我们不再多说,网上很多博客写的都很好,例如以下链接:

    https://blog.csdn.net/qq_26878363/article/details/81533273

    版权声明:以上链接为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    下面我想重点聊一下第一范式。

    虽然数据库设计范式是设计经验,不是强制遵守的规则,但是,本人强烈及建议,第一范式要遵守。

    数据库设计第一范式内容,简单说就是表的每一列确保原子性,就是表达的意义要唯一,不可细分。

    这很好理解,很多人也觉得理所当然,估计没有人会把姓名和年龄做成一列,但是,违法第一范式的设计也有可能真的存在,比如在表里设计一个字段存储邮件内容,这个违反了第一范式,因为邮件内容存储的信息表达的意义不具备唯一性。为什么我着重强调第一范式要遵守呢?像我上面写的这种情形,在一定程度上也没有造成数据冗余,在调用数据发邮件时,不用再进行数据加工,使用起来也方便了。

    数据冗余,会造成管理和性能负担,对数据处理错误不会造成直接影响,但是,违反第一范式,还有个致命问题,就是可能含有难以发现隐晦错误。简单说,我们向数据库插入数据时,对那些含有多重意义的字段要进行单独处理,比如,要在邮件里添加公司名,联系电话等,如果公司名添加错了,我们在进行测试时会给问题的发现增加很大难度,因为这个信息藏在篇幅很大的邮件正文里。

    综上所述,第一范式不要违反,还是严格遵守为好,可以带来至少三点好处,减少数据处理难度,减少错误数据隐藏可能,减少数据冗余。

     

    展开全文
  • 数据库设计三大范式五大约束
  • 数据库设计三大范式.pdf
  • 数据库设计三大范式原则

    千次阅读 2021-01-13 10:32:46
    三范式:确保数据表中的每一列数据都和主键直接相关,而不能间接相关。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关于客户其它信息(比如姓名、...
  • 1. 第一范式 1NF 设R为任一给定关系, 如果R中每个列与行的 交点处的取值都是不可再分的基本元素,则R为第一范式。 2. 第二范式 2NF 由于第一范式冗余高,插入操作异常,删除操作异常,于是便有了第二范式。 ...
  • 一、数据库第一范式数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。(保持数据的原子性) 数据原子性很好理解,就是表中的字段不可再分...
  • 数据库设计常用三大范式

    万次阅读 多人点赞 2018-08-09 12:14:46
    设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系数据库有六种范式:第一范式(1NF)、第二范式...
  •  数据库设计三大范式(重点):  第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的小单元,也是确保每一列的原子性;  例如:userInfo:山东省烟台市 131777368781 userAds:山东0省烟台市 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,228
精华内容 26,891
关键字:

数据库设计三大范式