数据库范式
- 第一范式
- 第二范式
- 第三范式
- 反范式化
第一范式
原子性:要求属性具有原子性,不可再分解
举例:
比如根据需求可以将时间拆成年月日
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