铁路项目管理软件:Deltek Vision二次开发_6.数据库设计与优化.docx
PAGE1
PAGE1
6.数据库设计与优化
6.1数据库设计的基本原则
在铁路项目管理软件的开发中,数据库设计是至关重要的一步。良好的数据库设计不仅能够保证数据的完整性和一致性,还能提高系统的性能和可维护性。以下是数据库设计的基本原则:
6.1.1数据规范化
数据规范化是数据库设计中的一个基本概念,目的是消除数据冗余,减少数据异常,确保数据的一致性和完整性。常见的规范化形式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BC范式(BCNF)。
6.1.1.1第一范式(1NF)
第一范式要求每个表的每个列都必须是原子的,即不可再分。例如,假设有一个表Projects,其中包含项目的基本信息,包括项目名称、项目负责人和项目成员。项目成员列如果存储的是多个成员的姓名,如“张三,李四,王五”,那么这个表就不符合第一范式的要求。
--不符合1NF的表设计
CREATETABLEProjects(
ProjectIDINTPRIMARYKEY,
ProjectNameVARCHAR(255),
ProjectLeaderVARCHAR(255),
ProjectMembersVARCHAR(255)
);
--符合1NF的表设计
CREATETABLEProjects(
ProjectIDINTPRIMARYKEY,
ProjectNameVARCHAR(255),
ProjectLeaderVARCHAR(255)
);
CREATETABLEProjectMembers(
ProjectIDINT,
MemberNameVARCHAR(255),
PRIMARYKEY(ProjectID,MemberName),
FOREIGNKEY(ProjectID)REFERENCESProjects(ProjectID)
);
6.1.1.2第二范式(2NF)
第二范式要求每个非主键列完全依赖于主键,而不是部分依赖于主键。例如,假设有一个表Tasks,其中包含任务的编号、项目编号、任务名称和任务描述。如果项目编号和任务名称共同构成主键,而任务描述只依赖于任务名称,那么这个表就不符合第二范式的要求。
--不符合2NF的表设计
CREATETABLETasks(
TaskIDINT,
ProjectIDINT,
TaskNameVARCHAR(255),
TaskDescriptionVARCHAR(255),
PRIMARYKEY(TaskID,ProjectID)
);
--符合2NF的表设计
CREATETABLETasks(
TaskIDINTPRIMARYKEY,
ProjectIDINT,
TaskNameVARCHAR(255),
FOREIGNKEY(ProjectID)REFERENCESProjects(ProjectID)
);
CREATETABLETaskDescriptions(
TaskIDINT,
TaskDescriptionVARCHAR(255),
PRIMARYKEY(TaskID),
FOREIGNKEY(TaskID)REFERENCESTasks(TaskID)
);
6.1.1.3第三范式(3NF)
第三范式要求每个非主键列不仅完全依赖于主键,而且不能依赖于其他非主键列。例如,假设有一个表Resources,其中包含资源编号、资源名称和资源类型。如果资源类型可以由资源名称唯一确定,那么这个表就不符合第三范式的要求。
--不符合3NF的表设计
CREATETABLEResources(
ResourceIDINTPRIMARYKEY,
ResourceNameVARCHAR(255),
ResourceTypeVARCHAR(255)
);
--符合3NF的表设计
CREATETABLEResources(
ResourceIDINTPRIMARYKEY,
ResourceNameVARCHAR(255),
ResourceTypeIDINT,
FOREIGNKEY(ResourceTypeID)REFERENCESRe