数据库范式
- 第一范式
- 第二范式
- 第三范式
- 反范式化
第一范式
原子性:要求属性具有原子性,不可再分解
举例:
比如根据需求可以将时间拆成年月日
CREATE TABLE kpi2_tempgrade (kpi2_tempGrade_userId varchar(30) NOT NULL,kpi2_tempGrade_name varchar(30) DEFAULT NULL,kpi2_tempGrade_year int(4) NOT NULL,kpi2_tempGrade_month int(2) NOT NULL,kpi2_tempGrade_grade varchar(1) DEFAULT NULL,kpi2_tempGrade_score float(5,3) DEFAULT NULL,
PRIMARY KEY (kpi2_tempGrade_userId,kpi2_tempGrade_year,kpi2_tempGrade_month)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
第二范式
唯一性:要求记录有惟一标识,即实体的惟一性,即不存在部分依赖
举例:
比如多对多关系的表
考核人表
CREATE TABLE kpi2_checkperson (kpi2_checkperson_id varchar(30) NOT NULL,kpi2_checkperson_name varchar(20) DEFAULT NULL,
PRIMARY KEY (kpi2_checkperson_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
中间表
CREATE TABLE kpi2_viewscope (kpi2_viewScope_userId varchar(50) NOT NULL,kpi2_viewScope_checkuserId varchar(50) NOT NULL,
PRIMARY KEY (kpi2_viewScope_userId,kpi2_viewScope_checkuserId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
被考核人表
CREATE TABLE kpi2_members (kpi2_members_id int(5) DEFAULT NULL,kpi2_members_userId varchar(30) NOT NULL,kpi2_members_name varchar(10) DEFAULT NULL,kpi2_members_departmentsId int(3) DEFAULT NULL,kpi2_members_checkDepartmentsId int(3) DEFAULT NULL,kpi2_members_checkPersonId varchar(30) DEFAULT NULL,kpi2_members_identity int(1) DEFAULT ‘0’,
PRIMARY KEY (kpi2_members_userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第三范式
冗余性:要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖
举例:
成员表
CREATE TABLE kpi2_members (kpi2_members_id int(5) DEFAULT NULL,kpi2_members_userId varchar(30) NOT NULL,kpi2_members_name varchar(10) DEFAULT NULL,kpi2_members_departmentsId int(3) DEFAULT NULL,kpi2_members_checkDepartmentsId int(3) DEFAULT NULL,kpi2_members_checkPersonId varchar(30) DEFAULT NULL,kpi2_members_identity int(1) DEFAULT ‘0’,
PRIMARY KEY (kpi2_members_userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
每月分数详情
CREATE TABLE kpi2_detailkpi (kpi2_detailKpi_userId varchar(30) NOT NULL,kpi2_detailKpi_name varchar(6) DEFAULT NULL,kpi2_detailKpi_year int(4) NOT NULL,kpi2_detailKpi_month int(5) NOT NULL,kpi2_detailKpi_score float(5,3) DEFAULT NULL,kpi2_detailKpi_grade varchar(2) DEFAULT NULL,kpi2_detailKpi_comment varchar(255) DEFAULT NULL,kpi2_detailKpi_taskId varchar(50) DEFAULT NULL,kpi2_detailKpi_behaviorId varchar(50) DEFAULT NULL,kpi2_detailKpi_extraId varchar(50) DEFAULT NULL,kpi2_detailKpi_referScore float(5,3) DEFAULT NULL,
PRIMARY KEY (kpi2_detailKpi_month,kpi2_detailKpi_year,kpi2_detailKpi_userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
反范式化
有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。
来源:https://blog.csdn.net/bgn190215/article/details/99755435