关系数据库设计
数据库课件第6章 关系数据库设计

“学生”是该系统的一个核心数据结构,它可以描述如 下: 数据结构: 学生 含义说明: 是教学管理子系统的主体数据结构, 定义了一个学生的相关信息。 组成: 学号,姓名,性别,年龄,所在系,年级
2.分析得到系统的信息需求
例如: ⑴ 教学管理子系统的信息需求
管理学生、班级、教师、课程、专业和系等信息。 ①学生:学号、姓名、性别、年龄等。 ②班级:班级号、班级名、人数等。 ③教师:教师号、姓名、性别、职称、 电话号码和家 庭地址(城市、区、街道、邮政编码)等。 ④课程:课程号、课程名、学分、周学时、课程类型 (周数)等。 ⑤专业:专业号、专业名、选修门数等。 ⑥系:系号、系名等。
课程号 课程名 总课时
课程
请按键 ★
教授联系的合并
教 学 管 理 子 系 统
教师 m
教授 n 课程
教师 m 教授 n 课程
时间 教室号
合 并 后
时间 评教等级
教师 m
教授 n 课程 评教等级 时间 教室号
请按键 ★
工Hale Waihona Puke 资 及 福 利 子 系 统
合并后生成的全局E-R模型
教师 号
姓 名
性 别
⑵ 消除冗余数据和冗余联系 检查合并后的E-R模型中有无冗余数 据和冗余联系,如有则根据实际情况消 除之。
⑶ 例
教学管理与工资及福利管理子系统中,教 师的职工号存在命名冲突;教师实体存在 结构冲突。
教师 号
姓 名 教师 m 时间
性 别
职 称 电话号 码
n
工作
1
系 系号 系名
教授 教室号 n 课程名 n 课程 m n 学分 m
关系型数据库设计原则与方法

关系型数据库设计原则与方法关系型数据库设计是一种常见的数据库设计方法,它的设计原则和方法可以用于设计和优化关系型数据库模式。
本文将介绍关系型数据库设计的五个基本原则和一些常用的方法,以帮助您更好地进行数据库设计和优化。
第一原则:数据分离原则数据分离原则是指将不同的数据类型分开存储,不混杂在同一个表中。
这个原则主要是考虑到数据的规范性和易维护性。
每个数据类型都应该有自己的表,通过相关字段建立关联,并通过外键实现关系。
这种设计方式使数据库的结构更清晰、规范,也方便日后对数据更新和查询。
第二原则:范式设计原则范式设计原则是关系型数据库设计中的核心概念。
它主要是通过分解数据,将重复的数据避免在表中出现,减少冗余和更新异常。
范式的级别分为一到五级,分别用1NF、2NF、3NF、BCNF、4NF和5NF表示。
一般来说,我们在设计数据库时应尽可能遵循更高级别的范式,以减少数据冗余和保证数据的一致性。
第三原则:主键设计原则主键是一种唯一标识数据记录的方式,它在关系型数据库中非常重要。
主键的设计要符合以下要求:1. 唯一性:每个记录的主键值是唯一的,确保数据的完整性和一致性。
2. 稳定性:主键的值应该是稳定不变的,不能频繁修改。
3. 简洁性:主键的值应该是简洁的,便于查询和索引。
常见的主键类型包括自增主键,UUID,日期时间等。
第四原则:索引设计原则索引在关系型数据库中起着加速查询和提高性能的作用。
但是过多或不恰当的索引设计可能会导致数据库性能下降。
索引的设计原则包括:1.覆盖索引:将索引包含需要查询的字段,减少数据库访问次数。
2.唯一性:非重复且唯一的字段适合设计索引。
3.选择性:选择那些频繁被查询的字段。
4.大小:索引的大小应控制在合理范围内,避免占用过多磁盘空间。
第五原则:范围控制原则通过范围控制可以将数据库的规模控制在一定的范围内,避免不必要的数据增长。
范围控制主要包括以下几方面:1.数据量估算:在设计数据库时要对数据量进行预估,合理规划存储空间。
关系数据库的数据模型设计方法

关系数据库的数据模型设计方法随着计算机技术的不断发展,我们正处于一个数据信息化的时代,数据的管理和处理已经成为企业、政府、个人等各个领域的重要问题。
而关系数据库(Relational Database)作为一种常见的数据存储方式,其数据模型设计方法也成为数据管理中的关键环节。
关系数据库的数据模型设计包括三个部分:实体(Entity)、属性(Attribute)和关系(Relationship)。
实体是指现实世界中可以独立、区分的事物或对象;属性是指实体的属性或特征;关系则是描述实体之间的联系或关联。
在进行关系数据库的数据模型设计时,需要进行以下几个步骤:第一步,确定需要存储的实体和属性。
这个步骤需要对用户需求进行分析,找出用户需求中涉及到的实体和属性,并进行分类归纳。
例如,在设计一个学生信息管理系统时,需要确定实体有“学生”、“教师”等,属性有“学生姓名”、“专业”等。
第二步,确定实体之间的关系。
这个步骤需要对实体之间的联系或关系进行分析,找出实体之间的联系或关系,并进行分类归纳。
例如,在设计一个学生信息管理系统时,需要确定学生与课程之间的关系,即“学生选修了某个课程”。
第三步,建立实体关系图(ER图)。
根据前两步的分析结果,将实体和关系以图形的形式表现出来,形成一个实体关系图。
ER图是关系数据库模型的基本设计工具,通过ER图可以清晰地把实体和关系之间的联系表达出来,是设计关系数据库的必要步骤。
第四步,建立数据库表结构。
根据ER图,将实体和关系转换为数据库中的表结构,包括表的名称、属性、主键等。
例如,在设计学生信息管理系统时,可以将“学生”实体转换为一个“学生信息”表,该表包括“学生姓名”、“专业”等属性,同时还需要确定一个主键,通常是一个唯一标识符,用于唯一标识每一个记录。
第五步,进行数据填充和查询操作。
在确定好数据库表结构之后,就可以进行数据填充和查询操作了。
数据填充是将现实世界中的数据转换为数据库中的数据,通常是通过应用程序实现;查询操作是通过SQL语句进行实现,以便用户对数据库中的数据进行操作和查询。
关系数据库的设计和实现方法

关系数据库的设计和实现方法在当今数据化的社会中,关系数据库在互联网应用和企业管理方面具有不可替代的地位。
随着数据规模和种类的不断扩张,如何设计和实现一个高效、可靠、易用的关系数据库成为了每个数据库开发者的重要任务。
一、关系数据库的基本概念关系数据库是一种基于关系模型的数据存储方式,其包含一组表格或数据集合,每个表格包含多行多列的数据记录。
每个表格中的每一列代表一种数据类型或属性,每一行代表一个唯一的数据实体或记录,而每个记录中的不同属性值之间存在某种关系或约束,如主键、外键、唯一性等。
二、关系数据库的设计原则一个良好的关系数据库设计应当具有以下特点:1.符合范式要求关系数据库的设计应该符合1NF、2NF、3NF等范式要求,避免数据冗余、不一致性和异常情况。
2.适当拆分与合并数据库的表格设计应该根据数据的实际业务意义进行适当的拆分与合并,避免数据冗余、表格过于复杂和关联性不清晰等问题。
3.优先考虑查询性能数据库的设计应该优先考虑查询性能和效率,合理使用索引和分区等技术,减少数据表格之间的join操作和全表扫描等效率低下的操作。
4.合理使用扩展功能关系数据库提供了大量的扩展功能,如事务、触发器、视图等,这些功能可以进一步提升数据库的性能和安全性,但是也需要合理使用和限制。
三、关系数据库的实现方法关系数据库的实现可以采用SQL Server、MySQL、Oracle等多种数据库软件,也可以通过自行开发一款数据管理软件完成。
无论采用何种实现方法,数据库的正确使用和管理至关重要。
1.现有数据库软件的使用采用现有的SQL Server、MySQL等数据库软件,可以迅速搭建一个负责、稳定、易于维护和扩展的关系数据库。
这些数据库软件提供了标准的SQL语言和常见的管理工具,可以任意配置和管理数据表格、数据维护和数据查询等操作。
2.定制化数据库开发在特定的业务场景下,定制化数据库开发可以更好地满足业务的需求,提供更好的数据库性能和数据管理效果。
关系型数据库设计——E-R图

关系型数据库设计——E-R图⼀、数据管理技术的三个发展阶段:1)⼈⼯管理阶段(20世纪50年代中期)特点:数据不保存;应⽤程序管理数据;数据不共享;数据没有独⽴性;2)⽂件系统阶段(20世纪50年代后—60年代)特点:数据以⽂件形式长期保存;⽂件系统管理数据;数据共享性差、冗余度⼤;数据独⽴性差;3)数据库系统阶段(20世纪60年代—现在)特点:数据结构化;数据由DBMS统⼀管理与控制;数据共享性⾼、冗余度低;数据独⽴性⾼;⼆、数据库管理系统的功能:1)数据定义功能:由DBMS提供的数据定义语⾔(Data Definition Language,DDL)定义数据库中的数据对象。
2)数据操纵功能:由DBMS提供的数据操纵语⾔(Data Manipulation Language,DML)实现对数据库的查询、插⼊、删除和修改;3)数据控制功能:由DBMS提供的数据控制语⾔(Data Control Language,DCL)实现数据保护和事务管理的功能,包括完整性、安全性、并发控制和数据库恢复;4)数据库的建⽴与维护功能三、概念模型(也称信息模型)——E-R图(Entity-Relationship Diagram)概念结构设计即对现实世界进⾏抽象描述,在需求分析所得数据流图和数据字典的基础上,为计算机存储做准备;概念结构设计的内容即建⽴概念模型;描述概念模型最常⽤⽅法是E-R图或UML图⽅法。
主要概念:实体(Entity):客观存在的各类事物;属性(Attribute):实体所具有的特性;联系(Relationship):不同实体集中实体之间的联系,也可以是同⼀实体集中实体间的联系;联系的种类:1:1联系;1:N联系;M:N联系⽤E-R图建⽴概念模型局部的E-R图⼜称为局部视图,将多个局部视图E-R图合并成⼀张完整的E-R图的过程称为视图集成。
视图集成过程中可以解决冲突和消除冗余;分E-R图之间的三类冲突:1)属性冲突2)命名冲突3)结构冲突:同⼀实体在不同的分E-R图中有不同的属性,同⼀对象在某⼀分E-R图中被抽象为实体⽽在另⼀分E-R图中⼜被抽象为属性,需要统⼀;四、逻辑结构设计——E-R图向关系模型的转换1)⼀个实体转换为⼀个关系模式;实体的属性——>关系的属性实体标识符——>关系的码2)联系的转换1:1联系——与任意⼀端对应的关系模式和并;1:n联系——与n端对应的关系模式合并;m:n联系——⼀个独⽴的关系模式五、关系模式的优化从以下⼏⽅⾯:1)关系模式规范化2)对关系模式进⾏必要的合并3)进⾏合理的分解,包括⽔平分解、垂直分解六、关系模式的存取⽅法选择DBMS常⽤存取⽅法:1)索引⽅法,⽬前主要是B+树索引⽅法2)聚簇(cluster)⽅法3)Hash⽅法七、SQL数据库的三级结构/两级映像三级模式体系结构:两级映像:外模式/模式映像模式/内模式映像1)数据的逻辑独⽴性应⽤程序(外模式)与数据库的逻辑结构(模式)是相互独⽴的,即数据的逻辑结构发⽣改变,应⽤程序不⽤变。
简述关系数据库的设计步骤

简述关系数据库的设计步骤关系数据库是一种常用的数据库模型,它使用表、关系和键设计来存储、组织和查询数据。
基于关系数据库的设计是现代信息系统的基础,为实现高效的数据管理、存储和查询提供了非常重要的基础。
本文将阐述关系数据库设计的基本步骤,介绍它们如何在现代信息管理系统中应用,最终为系统用户提供可靠、可操作的信息服务。
首先,关系数据库设计必须考虑业务要求,并将其转换为设计要求,以确定数据模型及数据库的功能。
在这一步中,需要分析业务要求,确定业务模型,收集和组织需要的数据,确定有效的数据存储结构,特别是确定以及识别出业务实体,并确定属于这些业务实体的属性。
接下来,在将数据模型及功能转换为关系数据库结构时,通常遵循经典的数据库设计步骤,包括实体识别、实体关系建模、属性决定、关系表建模、索引设计、视图建模等。
在实体识别阶段,要进行概念建模,涉及对实体及实体间关系的分析和建模;在实体关系建模阶段,要发现多个实体之间的联系,并通过概念建模实现;属性决定阶段,要根据业务要求,确定每个实体属性的类型及唯一性;关系表建模阶段,要根据实体、属性和关系,建立每个实体的关系表;索引设计阶段,要根据使用频率,选择合适的索引类型和索引结构;视图建模阶段,要根据访问视图和系统需求,建立逻辑视图,最终创建物理视图。
最后,在完成基本的设计步骤之后,需要进行质量测试,以确保数据库的正常运行,包括数据完整性检查、安全性测试、功能测试、性能测试等,可以根据实际情况选择不同的测试策略。
从上述步骤可以看出,基于关系数据库的设计是一个复杂的过程,它要求设计者充分考虑业务要求,转换为数据模型、实体识别、属性决定、关系表建模、视图建模等步骤,最终保证数据库的正确性和高效性。
在现代信息管理系统中,关系数据库的设计以及维护工作日益重要。
有效的关系数据库设计,可以帮助系统用户实现信息查询要求,并能较好地支持信息管理系统的正常运行。
数据库系统(四)---关系型数据库设计及E-R图

数据库系统(四)---关系型数据库设计及E-R图1、关系型数据库: 关系型数据库是⼀类采⽤关系模型作为逻辑数据模型的数据库系统,遵从数据库设计的基本步骤,包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库的运⾏和维护等阶段。
概念结构设计与逻辑结构设计是关系数据库整个设计过程的关键。
2、关系数据库设计过程与各级模式 在关系数据库设计的不同阶段,会形成数据库的各级模式。
1)需求分析阶段,综合各个⽤户的应⽤需求; 2)概念结构设计阶段,形成独⽴于机器特点、独⽴于各个关系数据库管理系统产品的概念模式; 3)逻辑结构设计阶段,将 E-R 图转换成具体的数据库产品⽀持的关系数据模型,形成数据库逻辑模式,然后根据⽤户处理的要求、安全性的考虑,在基本表的基础上再建⽴必要的视图,形成数据的外模式; 4)物理结构的设计阶段,根据关系数据库管理系统的特点和处理的需要,进⾏物理存储安排,建⽴索引,形成数据库内模式。
3、概念结构设计⽅法 关系数据库的概念结构设计通常采⽤⾃顶向下法,它通过两个步骤来完成概念设计,⾸先建⽴局部信息结构,然后将局部信息结构合成为全局信息结构并优化,使⽤ E-R 图作为概念模型的描述⼯具。
1)局部信息结构设计 局部信息结构设计:根据需求分析报告中标明的不同⽤户视图范围所建⽴的满⾜该范围内⽤户需求的信息结构,称为局部信息结构。
局部信息结构设计的步骤包括:确定局部范围;选择实体;选择实体关键字;确定实体间联系;确定实体的属性。
2)E-R 图的表⽰⽅法 概念结构设计就是将需求分析得到的⽤户需求抽象为信息结构的过程,通常使⽤ E-R 图来作为描述现实世界的建模⼯具。
E-R 图提供了表⽰信息世界中实体、属性和联系的⽅法。
1.实体型,⽤矩形表⽰,写明实体的名称; 2.属性,⽤椭圆形表⽰,并⽤⽆向边将其与其相应的实体连接起来。
3.联系,⽤菱形表⽰,写明联系的名称,⽤⽆向边分别与有关实体连接起来,同时在⽆向边旁标注联系的类型(1:1、1:N 或 M:N),如果⼀个联系具有属性,则这些属性也要⽤⽆向边与该联系连接起来。
关系数据库设计理论

五、FD的推理规则
从已知的FD集推导未知的FD,可以使用的推导规则 (Armstrong) 设有关系模式R(U),X、Y、Z是U的子集: A1(自反性):如果 Y X ,则有 XY 在R上成立。 A2(增广性):如果 XY 在R上成立,那么有 XZYZ A3(传递性):如果 XY和 YZ在R上成立,则有 XZ
S# -> SNAME C# -> TNAME (S#,C#) ->GRADE
三、属性间的联系和函数依赖 属性间的联系有三种,但并不是每一种关系中都存在函数 依赖,设有属性集X、Y属于关系模式R,
如果X和Y之间是‘1-1’关系,则存在函数依赖:
X YY, X
如果X和Y之间是‘1-M’关系,则存在函数依赖:
第五章 关系数据库设计理论
5.1 问题的提出-什么是不好的数据库设计
实际问题,假定在设计数据库时出现如下的关系模式: Student(Sno, Sname, Dept,Cno, Grade) 学生(学号,姓名,院系,课程号,成绩)
Sno Sname Dept Cno Grade
1000 李平 计算机 001
FD的分类: 1、对于FD:XY ,如果 Y X ,则称为“平凡的FD” 2、对于FD:XY ,如果 YX ,则称为“非平凡的FD” 3、对于FD:XY ,如果 YXφ则为“完全非平凡的FD”
Armstrong的推论: 1、合并规则: 由 XYX,Z可以 得 YZ 到X 2、分解规则: 由 XYZ可以 得 YX, 到 ZX 3、伪传递规则:由 XYY,WZ则得 到 Z XW
86
1000 李平 计算机 002
97
1000 李平 计算机 003
83
1001 王莉 计算机 001
关系数据库的设计与规范化

关系数据库的设计与规范化关系数据库是一种基于关系模型的数据库系统,它以表格的形式存储和组织数据。
在设计和组织关系数据库时,规范化是一项关键任务。
规范化是一种数据组织方法,其目的是通过消除冗余和不一致性,提高数据库的性能和灵活性。
本文将探讨关系数据库的设计和规范化的重要性,以及规范化的常用规则和技巧。
1. 规范化的重要性关系数据库的设计和规范化对于数据的一致性、完整性和性能有着重要影响。
以下是规范化的重要性:1.1 数据一致性:规范化可以消除数据中的冗余信息,确保每个数据片段只有一次出现在数据库中。
这样可以避免数据冲突和不一致性,提高数据的一致性。
1.2 数据完整性:规范化可以帮助保持数据的完整性。
通过将数据分解为更小的表,并通过外键和主键建立关系,可以确保数据的完整性和准确性。
1.3 性能提升:规范化可以提高数据库的性能。
通过减少数据冗余,可以节省存储空间,并提高查询和更新的速度。
2. 规范化的规则和技巧规范化涉及到一系列规则和技巧,以确保数据的一致性和完整性。
以下是规范化的常用规则和技巧:2.1 第一范式(1NF):确保表中的每个列都是原子的,即不可分解的。
每个列都应该只包含一个数据值,不允许有重复的列。
2.2 第二范式(2NF):确保每个表中的非主键列只与主键有关,而不是与其他非主键列有关。
这样可以消除非主键列之间的数据冗余。
2.3 第三范式(3NF):确保每个表中的非主键列只与主键有关,而不是与其他非主键列有关。
如果有一个非主键列与其他非主键列有关,应该将其移动到另一个表中。
2.4 层次化范式:将数据分解为多个逻辑层次上的表。
每个表都应该表示一个单独的实体或关系,避免表中信息的重复和冗余。
2.5 使用外键关系:通过外键约束来建立关系数据库中不同表之间的连接。
外键可以确保数据的完整性和一致性,同时还能提高查询性能。
2.6 避免主键冲突:在为表选择主键时,应确保每个记录都可以唯一地识别。
避免使用自然主键(如姓名、电话号码等),而是使用带有唯一性约束的人工主键。
关系数据库的规范化设计

关系数据库的规范化设计在当今数字化的时代,数据成为了企业和组织的重要资产。
关系数据库作为一种常用的数据存储和管理方式,其设计的合理性直接影响到数据的准确性、完整性和可用性。
而关系数据库的规范化设计则是确保数据库设计质量的关键步骤。
那么,什么是关系数据库的规范化设计呢?简单来说,就是通过一系列的规则和方法,对数据库中的表、字段、关系等进行优化,以减少数据冗余、避免数据不一致和提高数据操作的效率。
为什么要进行规范化设计呢?想象一下,如果我们的数据库设计不合理,会出现什么样的问题。
比如说,一个员工信息表中,既包含了员工的基本信息,又包含了员工的工作经历、薪资等详细信息。
这样的设计就会导致数据冗余,因为同一个员工的基本信息可能会在多条记录中重复出现。
这不仅浪费了存储空间,还容易在数据更新时出现不一致的情况。
比如,当我们修改一个员工的基本信息时,如果不小心只修改了其中的一部分记录,就会导致数据的混乱。
规范化设计的一个重要原则是消除数据冗余。
通过将相关的数据分离到不同的表中,并通过适当的关系进行连接,可以有效地减少冗余。
例如,将员工的基本信息放在一个表中,工作经历放在另一个表中,通过员工编号进行关联。
另一个重要原则是确保数据的一致性。
比如,在一个订单表中,订单的总金额应该等于订单中各个商品的金额之和。
如果数据库设计不合理,可能会导致计算总金额时出现错误,从而影响业务的准确性。
规范化设计还可以提高数据操作的效率。
合理的表结构和关系可以使查询、插入、更新和删除等操作更加高效。
比如,如果一个表中的字段过多,会导致数据存储和检索的效率降低。
在关系数据库的规范化设计中,通常会提到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。
第一范式要求数据表中的每个字段都是不可再分的原子值。
比如说,一个“地址”字段不能同时包含省、市、区等信息,而应该将它们分别存储在不同的字段中。
第二范式要求数据表中的非主键字段完全依赖于主键。
5_关系数据库设计

(2)数据流图(Data Flow Diagram,DFD)
数据流图从数据传递和加工的角度,来刻 画数据流从输入到输出的移动变换过程。
当系统比较复杂时,可以采用分层描述的方法。在处理功 能逐步分解的同时,它们所用的数据也逐级分解,形成若干层 次的数据流图。数据流图表达了数据和处理过程的关系。
(3)数据字典
需求分析阶段最后是编写系统分析报告,通常称为需求 规范说明书。需求规范说明书是对需求分析阶段的一个总结。 编写系统分析报告是一个不断反复、逐步深入与完善的过程, 系统分析报告应包括如下内容:
系统概况,系统的目标、范围、背景、历史和现状; 系统的原理和技术,对原系统的改善; 系统总体结构与子系统结构说明; 系统功能说明; 数据处理概要、工程体制和设计阶段划分; 系统方案及技术、经济、功能和操作上的可行性。
数据需求是指用户需要一个信息系统最终能够提供的所有数据, 通过分析制作数据流图。
3.确定处理需求 .
处理需求通常是指用户要求应用软件系统能够提供的 所有功能。根据业务需求以及数据需求可以进一步确定处 理需求。处理需求可用系统功能模块图表示。
【例5-3】 教务管理系统的功能模块图。 】
4.编写需求分析说明书 .
5.1.2数 据库设 计步骤
前四个步骤为数据库系统的分析与设计;后两个步骤 为数据库系统的实施、运行与维护。
1)需求分析:了解和分析用户的应用需求(包括信息需求和处理需 求),进行需求收集和分析,并以数据流图、数据字典等形式加以描 述。 2)概念设计:把需求分析阶段得到的用户需求进行综合、归纳和抽 象,形成一个独立于具体DBMS的概念数据模型。 3)逻辑设计:按照一组转换规则,将概念设计阶段产生的概念模型 转换为某个DBMS支持的逻辑数据模型。 4)物理设计:是为逻辑模型选取一个最适合应用环境的物理结构 (包括存取结构和存取方法)。 5)数据库实施:设计人员运用DBMS提供的数据库语言及其宿主语 言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程 序,组织数据入库,并进行试运行。 6)数据库运行与维护:数据库试运行后,即可投入正式运行。数据 库在运行期间应不断地对其进行评价、调整与修改。
如何进行关系型数据库设计

如何进行关系型数据库设计在现代信息时代,关系型数据库的设计显得尤为重要。
随着科技的发展,数据量急剧增长,关系型数据库的表结构设计直接影响着数据的存储和查询效率。
本文将从数据建模、范式设计以及索引优化等方面探讨如何进行关系型数据库设计。
一、数据建模数据建模是关系型数据库设计的起点。
它的目的是将现实世界中的实体和它们之间的关系转化为可被计算机理解和操作的模型。
在进行数据建模时,我们需要关注实体、属性和关系之间的联系。
首先,确定实体。
实体是指在现实世界中具有独立存在和唯一身份的事物,如学生、课程、订单等。
每个实体都具有其特定的属性,如学生的姓名、学号、出生日期等。
在设计阶段,要准确地识别出所需实体,并确定它们之间的关系。
其次,确定属性。
属性是描述实体的特征或特性,如学生的年龄、手机号码等。
在确定属性时,需要注意属性的数据类型、取值范围以及相关约束条件。
最后,建立关系。
关系是实体之间的联系,如学生与课程之间的选课关系。
关系可以是一对一、一对多或多对多的。
在建立关系时,需要考虑关系的性质以及约束条件,如外键约束、级联删除等。
二、范式设计范式设计是关系型数据库设计中的重要环节。
范式设计的目的是消除数据冗余,提高数据存储和查询效率。
常用的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。
在进行范式设计时,需要满足以下原则:首先,满足1NF。
1NF要求每个字段都是不可再分的基本数据项,并且每个字段只能包含一个值。
通过分解实体和属性,将数据结构规范化,消除数据冗余。
其次,满足2NF。
2NF要求每个非主键字段完全依赖于主键。
如果一个表中有部分字段只依赖于主键的一部分,则需要将其拆分为两个或多个表,以消除冗余。
最后,满足3NF。
3NF要求一个表中的字段只依赖于主键,而不依赖于其他非主键字段。
如果一个表中存在传递依赖,即某个字段依赖于其他字段,那么需要将其拆分为两个或多个表,以减少数据冗余。
三、索引优化索引是提高查询效率的关键。
关系数据库的设计原则

关系数据库的设计原则关系数据库是一种常用的数据库管理系统,它将数据以表格的形式进行组织和存储。
根据实际需求,设计一个高效且可靠的关系数据库非常关键。
以下是关系数据库设计的一些原则和指导:1. 数据库需求分析:在设计关系数据库之前,首先需要进行数据库需求分析。
这包括确定数据库中需要存储的数据类型、数据量以及数据之间的关系。
通过深入了解业务需求,可以确保数据库的准确性和完整性。
2. 数据库规范化:数据库规范化是关系数据库设计的基本原则之一。
它通过将数据分解成更小的、更规范的表来消除数据冗余和不一致性。
常用的规范化形式包括第一范式、第二范式和第三范式。
规范化能够提高数据库的性能和可维护性。
3. 主键设计:主键是用来唯一标识数据库表中每个记录的字段。
在设计关系数据库时,需要为每个表选择一个合适的主键。
主键应该具有唯一性和稳定性,并且不应该包含可变的信息。
常用的主键类型包括自增长整数、全局唯一标识符(GUID)等。
4. 外键关系:外键是用来建立不同表之间的关联关系的字段。
在设计关系数据库时,需要使用外键来确保数据的完整性和一致性。
外键能够实现表之间的关联查询和数据的级联操作,但需要注意外键的索引和性能优化。
5. 索引设计:索引是提高数据库查询性能的重要手段。
在设计关系数据库时,需要根据查询需求选择合适的索引字段。
索引应该选择具有高选择性的字段,并避免过多的索引和冗余的索引。
同时,需要定期对索引进行维护和优化。
6. 数据类型选择:在设计关系数据库时,需要选择合适的数据类型来存储数据。
常见的数据类型包括整数、字符、日期、时间等。
正确选择数据类型可以提高数据库的存储效率和查询性能。
7. 数据库安全性设计:数据库安全性是关系数据库设计的重要考虑因素之一。
在设计关系数据库时,需要考虑数据的访问权限、用户身份验证、数据加密等安全措施。
合理的安全设计可以保护数据库免受未经授权的访问和数据泄露的风险。
8. 性能优化设计:性能优化是关系数据库设计的关键目标之一。
关系数据库设计 - 山东大学软件学院数据库系统

z 如系办公电话与成绩并没有联系。
数据库系统概念----关系数据库设计
12
7.1 好的关系设计的特点
z 解决之道----分解
职工
级别
赵明
4
钱广
5
孙志
6
李开
5
周祥
6
级别 4 5 6
工资 500 600 700
数据库系统概念----关系数据库设计
7.2 第一范式
z 各范式集之间存在如下关系:
1NF 2NF 3NF BCNF 4NF
5NF
数据库系统概念----关系数据库设计
15
7.2 第一范式
z 第一范式(1NF) z 定义 如果关系模式R的所有属性都是不
可分的基本数据项,则R∈1NF。 z 第一范式是二维表的要求,排斥了属性
值为元组、数组或某种复合数据的可能性。 不满足第一范式的数据库不能称为关系数据 库。 z 满足第一范式的关系模式往往会出现异 常。
z 记作X→Y。
数据库系统概念----关系数据库设计
18
7.3 函数依赖的分解
z 叫作“X函数确定Y”或“Y函数依赖于X”, X为决定因素,Y为依赖因素。
z 如果Y不函数依赖X,则记作X-\→ Y。 z 如果X→Y且Y→X,则X与Y是一一对应
函数依赖,记作X←→Y。 z 定义:R下的所有函数依赖组成R的函数
3
7.1 好的关系设计的特点
z 方案二
z 学生=(学号,姓名,性别,年龄,系 别),码:学号
z 系=(系别,系主任名,系办公电话), 码:系别
z 课程=(课程号,课程名,先行课号,学 分) 码:课程号
关系数据库的设计步骤

关系数据库的设计步骤
1、用户需求分析:首先需要了解客户所需要的数据库的应用背景,
包括存储的数据的功能,以及数据库所需要进行的各项功能和运算,分析
它们之间的联系及关系,从而明确出用户需求,为后续数据库设计提供依据。
2、确定逻辑模型:根据用户需求,选择合适的ER模型,确定实体和
实体与实体之间的关联关系,以及实体的属性,形成逻辑模型,此逻辑模
型是数据库设计的核心步骤。
3、确定数据字典:确定数据字典,定义每一个属性的属性名称、属
性类型以及键的类型,确定每一个实体的主键,并且定义属性及其属性之
间的关系,以及各表之间的关联关系。
4、确定完整性约束:确定完整性约束,包括主键约束、外键约束、
参照完整性等,以及实体与实体之间可能存在的业务约束,确保数据库中
数据的准确性、完整性、可靠性。
5、设计物理结构:将建立的逻辑模型转换为物理模型,针对不同的
数据库管理系统,利用数据库设计工具建立出恰当的索引、表等物理结构,使之能够被系统所识别并支持。
关系数据库的模式设计

• 范式级别有高下之分,级别越高,规范化 程序越高,关系模式越严谨、越好。
Cp
C#
Cname Area
Ma
Cp(C#,Cname,Area,Ma)
Sp
综合示例
根据描述可得到属性组U上旳一组函数依赖集F: F={C# → Cname, C# → Area, C# → Ma,
Area → Ma,(C#,P#) → Price}
Cname
C#
P#
Price
Area
Ma
存在旳问题
• 异常:对某些关系模式,变化其中旳数据可能造 成某些不希望旳成果;
• 数据冗余异常:客户与商品信息成对出现,挥霍 大量旳存储空间;
所谓“规范化”,通俗来讲就是把问题关系 转化成两个或多种没有问题旳关系旳过程,同步 检验关系合乎需要和正确是否。
4.1 函数依赖
关系数据库规范化理论旳中心问题是数 据依赖问题,数据依赖反应旳是实体旳属性 值之间相互联络和相互制约旳关系。
数据依赖分为两类:函数依赖和多值依 赖。我们先来了解有关函数依赖旳概念。
• 数据更新异常:某地域主管发生变动,则该地域 全部客户统计都需要修改,维护代价大;
• 数据插入异常:客户与企业建立联络,但未购置 商品,则无法将客户资料和地域主管信息插入;
• 数据删除异常:若删除某商品信息,则连带把客 户旳资料都删除了;
成果分析
• 结论:存在上述4个“毛病”,CS旳设计显然是 一种失败旳关系模式;
数据库关系模式设计

数据库关系模式设计一、简介数据库关系模式设计是数据库设计的重要环节之一。
它主要涉及到关系型数据库中表的设计和规划,包括表结构、属性和约束的定义以及数据之间的关系的建立。
合理的数据库关系模式设计能够提高数据库的性能、可维护性和扩展性,从而更好地支持应用程序的需求。
二、数据库关系模式的基本概念1. 关系模式关系模式是指关系型数据库中某个表的结构和属性的抽象定义。
关系模式由表名、属性名和属性类型组成,其中属性名是表中的列名,属性类型是列的数据类型。
2. 属性属性是关系模式中的列,它们定义了表中存储的数据的类型和约束。
不同的属性可以有不同的数据类型,如整数、浮点数、字符串等。
3. 主键主键是一个或多个属性的组合,用于唯一标识表中的每条记录。
主键的值在表中是唯一且不重复的,可以用来快速获取和更新数据。
4. 外键外键是一个或多个属性,用于与另一个表中的主键建立关联。
外键可以用来保持数据的完整性和一致性,确保关联表之间的数据的正确性。
三、数据库关系模式设计的步骤1. 确定需求在设计数据库关系模式之前,需要对应用程序的需求进行分析和理解。
明确需要存储的数据类型和关系,确定数据库的功能和目标。
2. 划分实体根据需求,将数据划分为不同的实体,每个实体代表一个独立的概念和对象。
通过将数据分解为不同的实体,可以避免数据冗余和重复,提高数据库的性能和效率。
3. 设计属性为每个实体设计属性,确定每个属性的数据类型和约束。
属性的设计应符合实际需求,并尽可能避免冗余和重复。
4. 确定主键和外键对每个实体确定主键和外键。
主键用于唯一标识每个实体的记录,外键用于建立实体之间的关系和约束。
5. 设计关系根据实体之间的关系,设计关系模式。
关系模式定义了实体之间的连接和约束,包括一对一关系、一对多关系和多对多关系等。
6. 优化性能在设计数据库关系模式时,需要考虑数据库的性能和效率。
可以通过使用索引、优化查询语句和合理划分表等方式来提高数据库的性能和响应速度。
关系数据库设计范式介绍(第一范式,第二范式,第三范式)

关系数据库设计范式介绍(第⼀范式,第⼆范式,第三范式)1 第⼀范式(1NF)⽆重复的列所谓第⼀范式(1NF)是指数据库表的每⼀列都是不可分割的基本数据项,同⼀列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
如果出现重复的属性,就可能需要定义⼀个新的实体,新的实体由重复的属性构成,新实体与原实体之间为⼀对多关系。
在第⼀范式(1NF)中表的每⼀⾏只包含⼀个实例的信息。
简⽽⾔之,第⼀范式就是⽆重复的列。
(相当于设置某个表的字段属性时,不能出现同样的属性。
⽐如员⼯表,不能出现两个⼀样属性的员⼯姓名的列)。
说明:在任何⼀个关系数据库中,第⼀范式(1NF)是对关系模式的基本要求,不满⾜第⼀范式(1NF)的数据库就不是关系数据库。
1.2 第⼆范式(2NF)属性完全依赖于主键[消除部分⼦函数依赖] (设置某个表的主键,其他的属性都可以根据这个惟⼀主键来检索)第⼆范式(2NF)是在第⼀范式(1NF)的基础上建⽴起来的,即满⾜第⼆范式(2NF)必须先满⾜第⼀范式(1NF)。
第⼆范式(2NF)要求数据库表中的每个实例或⾏必须可以被惟⼀地区分。
为实现区分通常需要为表加上⼀个列,以存储各个实例的惟⼀标识。
例如员⼯信息表中加上了员⼯编号(emp_id)列,因为每个员⼯的员⼯编号是惟⼀的,因此每个员⼯可以被惟⼀区分。
这个惟⼀属性列被称为主关键字或主键、主码。
第⼆范式(2NF)要求实体的属性完全依赖于主关键字。
所谓完全依赖是指不能存在仅依赖主关键字⼀部分的属性,如果存在,那么这个属性和主关键字的这⼀部分应该分离出来形成⼀个新的实体,新实体与原实体之间是⼀对多的关系。
为实现区分通常需要为表加上⼀个列,以存储各个实例的惟⼀标识。
简⽽⾔之,第⼆范式就是属性完全依赖于主键。
1.3 第三范式(3NF)属性不依赖于其它⾮主属性[消除传递依赖](存在另⼀个表主键作为外键,但是不能出现这个外键关联表中的其他属性)满⾜第三范式(3NF)必须先满⾜第⼆范式(2NF)。
关系数据库的设计原则

关系数据库的设计原则主要包括以下几个方面:1. 数据规范化:规范化是指将数据分解成最小、独立的实体,消除数据冗余和不一致。
规范化的目的是提高数据的完整性、一致性和可维护性。
常用的规范化方法包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
2. 数据抽象:抽象是指将现实世界的事物或概念转化为数据库中的表、字段和数据类型。
在设计数据库时,应根据现实世界的需求和目标,选择合适的抽象层次和数据结构,以便更好地表达实体及其之间的关系。
3. 数据完整性:数据完整性是指数据的准确性、一致性和可靠性。
在设计数据库时,需要确保数据的完整性,通过设置主键、外键、约束和触发器等手段来限制数据的输入、修改和删除操作,防止非法数据进入数据库。
4. 数据安全性:数据安全性是指保护数据库免受未经授权的访问、篡改和破坏。
在设计数据库时,需要考虑如何实现用户身份验证、权限控制、数据加密等安全机制,以确保数据的安全性。
5. 数据性能优化:性能优化是指提高数据库的查询速度和响应时间。
在设计数据库时,需要考虑如何优化表的结构、索引、查询语句等,以提高数据库的性能。
6. 数据扩展性:数据扩展性是指数据库能够适应未来数据量的增长和需求变化。
在设计数据库时,需要考虑如何实现数据表的分区、分片、水平拆分等扩展策略,以便在未来能够方便地扩展数据库。
7. 数据一致性:数据一致性是指在多个用户并发访问数据库时,确保数据的完整性和一致性。
在设计数据库时,需要考虑如何实现事务管理、锁定机制、并发控制等一致性策略,以确保数据的一致性。
综上所述,关系数据库的设计原则主要包括数据规范化、数据抽象、数据完整性、数据安全性、数据性能优化、数据扩展性以及数据一致性。
在设计关系数据库时,需要遵循这些原则,以确保数据库的质量、性能和安全性。
数据库工程师复习重点:关系数据库逻辑设计

数据库工程师复习重点:关系数据库逻辑设计关系数据库逻辑设计5.1 概述5.2 基本概念5.2.1 关系模型1、关系模型采用一个二维表格在计算机中组织、存储、处理和管理数据。
(1) 关系名(数据库名):由字母数字组成;(2) 属性名;(3) 关系模式和关系:描述模式描述关系的静态结构,由模式名、关系模式所包含的属性及属性值所满足的条件组成模式定义。
(4) 元组:描述关系中的行;(5) 域:它定义关系的每个属性取值的类型;(6) 主码:能够惟一标识关系中每一个元组的属性或属性组;(7) 关系的数学定义:关系模式是建立在集合集论的基础上的,用数学的概念定义关系有;(A) 定义一:域是值的集合,同一个域中的值具有相同的数据类型;(B) 定义二:(C) 定义三:(D) 当关系引用了属性名后关系具有以下属性:[1] 不能有重复的元组;[2] 元组上下无序;[3] 按属性名引用时属性左右无序;[4] 所有属性值都是原子项(不可再分);(8) 总结:关系是一张二维表,表中的一行被称为一个元组,一列称为属性,由一组域值组成。
关系是元组的集合,关系中的每个元组在数学上被定义为这个关系所涉及的全部域值中笛卡儿积的一个元素。
5.2.2 关系数据库1、关系数据库是按照二维表组织和存储的相互关联的关系的集合,关系数据库模式是关系模式的集合;5.2.3 关系的完整性1、关系的完整性(完整性约束):是对关系的某种约束规则和关系满足的定义。
通常这组约束规则用来限定和检查数据库所含实例的合法性和正确性;2、完整性约束分静态和动态两种,静态完整性约束是基于关系模式的,主要有主码、外码约束和域约束组成;动态完整性约束是基于企业的业务规则的。
3、静态完整性约束规则:(1) 主码约束:主码必须满足:(A) 惟一性:在一个关系中不存在两个元组,它们具有相同的主码值;(B) 最小性:不存在从组成主码的属性集中去掉一个属性,还仍能保持数据的惟一性;(2) 外码约束:(3) 用户定义的完整性:5.3 关系数据库设计理论5.3.1 问题的提出究竟一个关系数据库包含哪些属性是合理的,如何评价一个关系模式设计的优劣?5.3.2 函数依赖函数依理论利用一个关系中属性之间的依赖关系评价和优化关系模式,以保证存储到数据库中的关系具有较好特性;1、函数依赖:(1) 设R(U)为一关系模式,X和Y为属性全集U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数决定Y”或“Y函数依赖于X”,并记作X Y,其中X称为决定因素,因为根据函数依赖定义,给定一个X,就能惟一决定一个Y。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一Codd的RDBMS12法则——RDBMS的起源二关系型数据库设计阶段三设计原则四命名规则数据库设计,一个软件项目成功的基石。
很多从业人员都认为,数据库设计其实不那么重要。
现实中的情景也相当雷同,开发人员的数量是数据库设计人员的数倍。
多数人使用数据库中的一部分,所以也会把数据库设计想的如此简单。
其实不然,数据库设计也是门学问。
从笔者的经历看来,笔者更赞成在项目早期由开发者进行数据库设计(后期调优需要DBA)。
根据笔者的项目经验,一个精通OOP和ORM的开发者,设计的数据库往往更为合理,更能适应需求的变化,如果追其原因,笔者个人猜测是因为数据库的规范化,与OO的部分思想雷同(如内聚)。
而DBA,设计的数据库的优势是能将DBMS的能力发挥到极致,能够使用SQL和DBMS实现很多程序实现的逻辑,与开发者相比,DBA优化过的数据库更为高效和稳定。
如标题所示,本文旨在分享一名开发者的数据库设计经验,并不涉及复杂的SQL语句或DBMS使用,因此也不会局限到某种DBMS产品上。
真切地希望这篇文章对开发者能有所帮助,也希望读者能帮助笔者查漏补缺。
一 Codd的RDBMS12法则——RDBMS的起源Edgar Frank Codd(埃德加·弗兰克·科德)被誉为“关系数据库之父”,并因为在数据库管理系统的理论和实践方面的杰出贡献于1981年获图灵奖。
在1985年,Codd 博士发布了12条规则,这些规则简明的定义出一个关系型数据库的理念,它们被作为所有关系数据库系统的设计指导性方针。
1. 信息法则关系数据库中的所有信息都用唯一的一种方式表示——表中的值。
2. 保证访问法则依靠表名、主键值和列名的组合,保证能访问每个数据项。
3. 空值的系统化处理支持空值(NULL),以系统化的方式处理空值,空值不依赖于数据类型。
4. 基于关系模型的动态联机目录数据库的描述应该是自描述的,在逻辑级别上和普通数据采用同样的表示方式,即数据库必须含有描述该数据库结构的系统表或者数据库描述信息应该包含在用户可以访问的表中。
5. 统一的数据子语言法则一个关系数据库系统可以支持几种语言和多种终端使用方式,但必须至少有一种语言,它的语句能够一某种定义良好的语法表示为字符串,并能全面地支持以下所有规则:数据定义、视图定义、数据操作、约束、授权以及事务。
(这种语言就是SQL)6. 视图更新法则所有理论上可以更新的视图也可以由系统更新。
7. 高级的插入、更新和删除操作把一个基础关系或派生关系作为单个操作对象处理的能力不仅适应于数据的检索,还适用于数据的插入、修改个删除,即在插入、修改和删除操作中数据行被视作集合。
8. 数据的物理独立性不管数据库的数据在存储表示或访问方式上怎么变化,应用程序和终端活动都保持着逻辑上的不变性。
9. 数据的逻辑独立性当对表做了理论上不会损害信息的改变时,应用程序和终端活动都会保持逻辑上的不变性。
10. 数据完整性的独立性专用于某个关系型数据库的完整性约束必须可以用关系数据库子语言定义,而且可以存储在数据目录中,而非程序中。
11. 分布独立性不管数据在物理是否分布式存储,或者任何时候改变分布策略,RDBMS的数据操纵子语言必须能使应用程序和终端活动保持逻辑上的不变性。
12. 非破坏性法则如果一个关系数据库系统支持某种低级(一次处理单个记录)语言,那么这个低级语言不能违反或绕过更高级语言(一次处理多个记录)规定的完整性法则或约束,即用户不能以任何方式违反数据库的约束。
二关系型数据库设计阶段(一)规划阶段规划阶段的主要工作是对数据库的必要性和可行性进行分析。
确定是否需要使用数据库,使用哪种类型的数据库,使用哪个数据库产品。
(二)概念阶段概念阶段的主要工作是收集并分析需求。
识别需求,主要是识别数据实体和业务规则。
对于一个系统来说,数据库的主要包括业务数据和非业务数据,而业务数据的定义,则依赖于在此阶段对用户需求的分析。
需要尽量识别业务实体和业务规则,对系统的整体有初步的认识,并理解数据的流动过程。
理论上,该阶段将参考或产出多种文档,比如“用例图”,“数据流图”以及其他一些项目文档。
如果能够在该阶段产出这些成果,无疑将会对后期进行莫大的帮助。
当然,很多文档已超出数据库设计者的考虑范围。
而且,如果你并不精通该领域以及用户的业务,那么请放弃自己独立完成用户需求分析的想法。
用户并不是技术专家,而当你自身不能扮演“业务顾问”的角色时,请你选择与项目组的相关人员合作,或者将其视为风险呈报给PM。
再次强调,大多数情况,用户只是行业从业者,而非职业技术人员,我们仅仅从用户那里收集需求,而非依赖于用户的知识。
记录用户需求时,可以使用一些技巧,当然这部分内容有些可能会超出数据库设计人员的职责:∙努力维护一系列包含了系统设计和规格说明信息的文档,如会议记录、访谈记录、关键用户期望、功能规格、技术规格、测试规格等。
∙频繁与干系人沟通并收集反馈。
∙标记出你自己添加的,不属于客户要求的,未决内容。
∙与所有关键干系人尽快确认项目范围,并力求冻结需求。
此外,必须严谨处理业务规则,并详细记录。
在之后的阶段,将会根据这些业务规则进行设计。
当该阶段结束时,你应该能够回答以下问题:∙需要哪些数据?∙数据该被怎样使用?∙哪些规则控制着数据的使用?∙谁会使用何种数据?∙客户想在核心功能界面或者报表上看到哪些内容?∙数据现在在哪里?∙数据是否与其他系统有交互、集成或同步?∙主题数据有哪些?∙核心数据价值几何,对可靠性的要求程度?并且得到如下信息:∙实体和关系∙属性和域∙可以在数据库中强制执行的业务规则∙需要使用数据库的业务过程(三)逻辑阶段逻辑阶段的主要工作是绘制E-R图,或者说是建模。
建模工具很多,有不同的图形表示方法和软件。
这些工具和软件的使用并非关键,笔者也不建议读者花大量时间在建模方法的选择上。
对于大多数应用来说,E-R图足以描述实体间的关系。
建模关键是思想而不是工具,软件只是起到辅助作用,识别实体关系才是本阶段的重点。
除了实体关系,我们还应该考虑属性的域(值类型、范围、约束)(四)实现阶段实现阶段主要针对选择的RDBMS定义E-R图对应的表,考虑属性类型和范围以及约束。
(五)物理阶段物理阶段是一个验证并调优的阶段,是在实际物理设备上部署数据库,并进行测试和调优。
三设计原则(一)降低对数据库功能的依赖功能应该由程序实现,而非DB实现。
原因在于,如果功能由DB实现时,一旦更换的DBMS不如之前的系统强大,不能实现某些功能,这时我们将不得不去修改代码。
所以,为了杜绝此类情况的发生,功能应该有程序实现,数据库仅仅负责数据的存储,以达到最低的耦合。
(二)定义实体关系的原则当定义一个实体与其他实体之间的关系时,需要考量如下:∙牵涉到的实体识别出关系所涉及的所有实体。
∙所有权考虑一个实体“拥有”另一个实体的情况。
∙基数考量一个实体的实例和另一个实体实例关联的数量。
关系与表数量∙描述1:1关系最少需要1张表。
∙描述1:n关系最少需要2张表。
∙描述n:n关系最少需要3张表。
(三)列意味着唯一的值如果表示坐标(0,0),应该使用两列表示,而不是将“0,0”放在1个列中。
(四)列的顺序列的顺序对于表来说无关紧要,但是从习惯上来说,采用“主键+外键+实体数据+非实体数据”这样的顺序对列进行排序显然能得到比较好的可读性。
(五)定义主键和外键数据表必须定义主键和外键(如果有外键)。
定义主键和外键不仅是RDBMS的要求,同时也是开发的要求。
几乎所有的代码生成器都需要这些信息来生成常用方法的代码(包括SQL文和引用),所以,定义主键和外键在开发阶段是必须的。
之所以说在开发阶段是必须的是因为,有不少团队出于性能考虑会在进行大量测试后,在保证参照完整性不会出现大的缺陷后,会删除掉DB的所有外键,以达到最优性能。
笔者认为,在性能没有出现问题时应该保留外键,而即便性能真的出现问题,也应该对SQL文进行优化,而非放弃外键约束。
(六)选择键1 人工键与自然键人工健——实体的非自然属性,根据需要由人强加的,如GUID,其对实体毫无意义;自然健——实体的自然属性,如身份证编号。
人工键的好处:∙键值永远不变∙永远是单列存储人工键的缺点:∙因为人工键是没有实际意义的唯一值,所以不能通过人工键来避免重复行。
笔者建议全部使用人工键。
原因如下:∙在设计阶段我们无法预测到代码真正需要的值,所以干脆放弃猜测键,而使用人工键。
∙人工键复杂处理实体关系,而不负责任何属性描述,这样的设计使得实体关系与实体内容得到高度解耦,这样做的设计思路更加清晰。
笔者的另一个建议是——每张表都需要有一个对用户而言有意义的自然键,在特殊情况下也许找不到这样一个项,此时可以使用复合键。
这个键我在程序中并不会使用其作为唯一标识,但是却可以在对数据库直接进行查询时使用。
使用人工键的另一根弊端,主要源自对查询性能的考量,因此选择人工键的形式(列的类型)很重要:∙自增值类型由于类型轻巧查询效率更好,但取值有限。
∙GUID 查询效率不如值类型,但是取值无限,且对开发人员更加亲切。
2 智能健与非智能键智能键——键值包含额外信息,其根据某种约定好的编码规范进行编码,从键值本身可以获取某些信息;非智能键,单纯的无意义键值,如自增的数字或GUID。
智能键是一把双刃剑,开发人员偏爱这种包含信息的键值,程序盼望着其中潜在的数据;数据库管理员或者设计者则讨厌这种智能键,原因也是很显然的,智能键对数据库是潜在的风险。
前面提到,数据库设计的原则之一是不要把具有独立意义的值的组合实现到一个单一的列中,应该使用多个独立的列。
数据库设计者,更希望开发人员通过拼接多个列来得到智能键,即以复合主键的形式给开发人员使用,而不是将一个列的值分解后使用。
开发人员应该接受这种数据库设计,但是很多开发者却想不明白两者的优略。
笔者认为,使用单一列实现智能键存在这样一个风险,就是我们可能在设计阶段无法预期到编码规则可能会在后期发生变化。
比如,构成智能键的局部键的值用完而引起规则变化或者长度变化,这种编码规则的变化对于程序的有效性验证与智能键解析是破坏性的,这是系统运维人员最不希望看到的。
所以笔者建议如果需要智能键,请在业务逻辑层封装(使用只读属性),不要再持久化层实现,以避免上述问题。
(七)是否允许NULL关于NULL我们需要了解它的几个特性:∙任何值和NULL拼接后都为NULL。
∙所有与NULL进行的数学操作都返回NULL。
∙引入NULL后,逻辑不易处理。
那么我们是否应该允许列为空呢?笔者认为这个问题的答案受到我们的开发语言的影响。
以C#为例,因为引入了可空类型来处理数据库值类型为NULL的情形,所以是否允许为空对开发者来说意义并不大。