数据库的三大范式以及五大约束

简介:

实体:表; 属性:表中的数据(字段); 关系:表与表之间的关系;

     数据库设计三大范式(重点):

第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;

                                例如:userInfo:山东省烟台市  131777368781           userAds:山东0省烟台市  userTel:131777368781

第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;

                                例如:订单表只描述订单相关的信息,所以所有字段都必须与订单id相关       产品表只描述产品相关的信息,所以所有字段都必须与产品id相 关;因此不能在一张表中同时出现订单信息与产品信息;如下图所示:

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

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

【如何更好的区分三大范式】

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

【数据库五大约束】

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

【主键】
1.主键的注意事项?
主键默认非空,默认唯一性约束,只有主键才能设置自动增长,自动增长一定是主键,主键不一定自动增长;
2.设置主键的方式?
在定义列时设置:ID INT PRIMARY KEY
在列定义完之后设置:primary KEY(id)

【外键】

1.设置外键的注意事项:   

只有INNODB的数据库引擎支持外键,修改my.ini文件设置default-storage-engine=INNODB    外键必须与参照列的数据类型必须相同(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同)。

2设置外键的语法:

   CONSTRAINT 外键名 FOREIGN KEY (外键字段)REFERENCES 参照表 (参照字段)    ON DELETE SET NULL ON UPDATE CASCADE 设置参照完整性

3.外键约束的参照操作?  

  参照表的完整性操作:当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对;   

参照操作可选值:

      RESTRICT拒绝参照表删除或更新参照字段;               

      RESTRICT和NO ACTION相同,但这个指令只在mysql生效;                

      CASCADE删除或更新参照表的参照字段时,外键表的记录同步删除更新;               

      SET NULL 删除或更新参照表的参照字段时,外键表的外键设为NULL;




















本文转自xsster51CTO博客,原文链接: http://blog.51cto.com/12945177/1950791,如需转载请自行联系原作者



相关文章
|
16天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
3月前
|
关系型数据库 MySQL 数据库
MySQL数据库——约束
MySQL数据库——约束
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
28 0
|
16天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
16天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
3月前
|
数据库
如何解决逻辑删除is_del与数据库唯一约束冲突
如何解决逻辑删除is_del与数据库唯一约束冲突
36 0
|
4月前
|
移动开发 C#
数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)
数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)
130 0
|
1月前
|
数据库
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表5、数据库操作——3、索引(Indexing)——4、约束(Constraints)
MySQL技能完整学习列表5、数据库操作——3、索引(Indexing)——4、约束(Constraints)
37 0