关系型数据库设计:从基础到高级范式
1. 数据库设计基础与第一范式
数据库设计的核心目标是创建一组关系模式,以无冗余地存储信息,同时方便信息的检索。第一范式(1FN)是关系设计的基本要求,它规定关系中所有属性的域必须是原子的。简单来说,原子域的元素是不可分割的单位。
例如,若员工关系模式包含“子女”属性,其域为姓名集合,那么该模式就不符合第一范式,因为姓名集合不是原子的。同样,像“地址”这种复合属性,包含“街道”和“城市”等组件,其域也不是原子的。
整数通常被认为是原子的,所以整数集合是原子域,但所有整数集合的集合则不是原子域。不过,关键不在于域本身,而在于域元素在数据库中的使用方式。如果将每个整数视为有序的数字列表,那么所有整数的域就不是原子的。
使用非原子属性可能导致数据冗余和不一致。以账户和客户关系为例,如果数据库设计者将每个账户的一组持有人和每个客户的一组账户存储起来,那么每次创建账户或更新账户持有人集合时,都需要在两个地方进行更新,否则数据库可能会处于不一致状态。若只保留其中一个集合,虽然可以避免信息重复,但会使一些查询变得复杂。
2. 关系型数据库设计的难点
在设计关系型数据库时,可能会遇到一些问题,主要包括信息重复和某些信息无法直接表示。以银行贷款为例,若将贷款信息存储在一个名为“empréstito”的关系中,其模式为(分行名称,分行城市,资产,客户姓名,贷款编号,贷款金额)。当添加新贷款时,需要重复分行的资产和城市数据。而且,若分行资产发生变化,需要修改多个元组,这不仅浪费空间,还增加了数据库更新的复杂性。
此外,该设计无法直接表示每个分行的信息,除非该分行至少有一笔贷款。解决这
超级会员免费看
订阅专栏 解锁全文
835

被折叠的 条评论
为什么被折叠?



