数据库的三大范式和五大约束(转)

一、三大范式:

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

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

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

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

二、 五大约束:
  1. primary KEY: 主键
  (1)说明:主键默认非空,默认唯一性约束,只有主键才能设置自动增长,自动增长一定是主键,主键不一定自动增长;
  (2)设置方式:
      在定义列时设置:ID INT PRIMARY KEY
      在列定义完之后设置:primary KEY(id)

  2. UNIQUE:唯一性约束,不能有重复值;

  3. DEFAULT :默认值约束,

   例如: height DOUBLE(3,2)DEFAULT 1.2------ height不输入是默认为1,2

  4 .NOT NULL:非空约束,该字段不能为空;

  5. FOREIGN key :外键
  (1)注意事项:
    只有INNODB的数据库引擎支持外键;

    外键必须与参照列的数据类型必须相同(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同)

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

  (3)当对参照表的参照字段进行删除或更新时,外键表中外键的响应:   
        RESTRICT:拒绝参照表删除或更新参照字段 ----------------RESTRICT和NO ACTION相同,但这个指令只在mysql生效;                
        CASCADE: 删除或更新参照表的参照字段时,外键表的记录同步删除更新;               
        SET NULL: 删除或更新参照表的参照字段时,外键表的外键设为NULL;

   

  注:数据库引擎(这里简单总结下InnoDB引擎和My IASM引擎的区别)

  1. InnoDB引擎:

   MySQL默认的引擎,提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,除此之外,该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统;

   MySQL运行时InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在高并发时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。

  2. My IASM引擎

     该引擎没有提供对数据库事务的支持,也不支持行级锁和外键,因此写操作时需要锁定整个表,效率便会低一些;

   不过和InnoDB不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。

  3. 查看方式: 

  

  修改方式: /etc/my.cnf 文件(Linux)或my.ini(Windows)修改 default-storage-engine 

 

转自:http://www.cnblogs.com/waj6511988/p/7027127.html

转载于:https://www.cnblogs.com/hunterCecil/p/7040210.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值