一、数据库设计范式
什么是范式?
简单来说,就是对数据库设计进行规范,这些规范可以优化数据存储的方式,提高存储性能,在关系型数据库中这些规范就可以称为范式。
二、理解三大范式
第一范式(1NF)
每一列属性都是不可再分的属性值,确保每一列的原子性。
例如,某些数据库系统会用到“地址”这一属性,本来直接将“地址”属性设计成一个数据库表的字段就行,但是如果系统经常用到其中“城市”这一部分,就要将“地址”这个属性重新拆分为省份,城市,详细地址等多部份进行存储,这样读地址中某一部分操作的时候就会方便很多,这样就满足了数据库设计的第一范式。
两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
第二范式(2NF)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
依赖性:在满足1NF的基础上再满足依赖性的两个约束:一张表必须有一个主键;非主键类必须完全依赖于主键,而不能只依赖主键的一部分。
例如,我们要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示
但这样的设计是存在问题的,违反了第二范式原则。如果把这个表进行拆分,效果就会更好
这样设计,在很大程度上减小了数据库的冗余。如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。
第三范式(3NF)
在满足2NF的基础上,另外再满足一个条件:非主键列必须直接依赖于主键,不能存在传递依赖。
例如,性别可以用0和1表示,0对应男生,1对应女生,这个性别与0 1对应关系就要单独设置一张表,不可以和姓名,年龄这些属性同时出现在一个表中。
最后
数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
三、五大约束
1.PRIMARY KEY(primary key):设置主键约束;
2.UNIQUE(unique):设置唯一性约束,不能有重复值;
3.DEFAULT(default):默认值约束,height DOUBLE(3,2) height不输入是默认为(1,2)。
4. NOT NULL(not null):设置非空约束,该字段不能为空;
5. FOREIGN KEY (foreign key):设置外键约束。