1. 三大范式
- 第一范式(1NF)
保证列的原子性,一张表的某个列不能有多个值,不能出现重复列。实际操作中我们可能会违反这个约束,如将列值存成一个json字典,但是我们一定要保证这些值至少是一起读或写的,不存在经常部分更新的场景。
- 第二范式(2NF):
取消部分依赖,表中的每个字段都与主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。比如订单表中可以用订单id编号和商品编号做联合主键,这时候表中的商品价格就是部分依赖,其只依赖于商品编号。
- 第三范式(3NF):
取消传递依赖,表中的每个字段都与主键直接相关。第三范式最严格,能够最大程度地减少数据冗余,但是也带来了不必要的查询开销。比如订单表中添加客户编号作为外键,但是不能把客户的手机号、地址等信息存入,因为这些额外的信息不依赖订单主键,只依赖于客户编号这个外键,属于传递依赖。所以第三范式使用的时候一定要综合考虑好空间和效率的平衡。
2. DML,DDL,DCL
- DML(data manipulation language):SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据进行操作的语言
- DDL(data definition language):
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表或软件版本更新时使用。
- DCL(data control language):
DCL是数据库控制功能,用来设置或更改数据库用户或角色权限的语句,包括grant,deny,revoke等语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行。