内容提要
本文介绍了关系数据库设计的基础知识,包括不同关系的实现方式和数据库的规范化与反规范化。还讨论了招聘服务数据库模式的设计,提供了示例和表结构、列、约束和索引的定义方法。下一部分将介绍数据填充。
延伸解读
规范化与反规范化的权衡
文章指出,规范化能消除数据冗余、降低数据异常风险,但分解实体后会使插入、更新、查询和删除等数据操作变得更复杂。反规范化则通过添加冗余数据(如使用XML、JSON等半结构化数据)来简化查询处理。设计时需根据实际需求在两者间权衡,例如招聘服务中若将技能直接存入项目实体,虽简化数据添加,却会难以按技能分组和筛选。
关系实现方式的灵活选择
文章详细说明了一对一、一对多和多对多关系均可通过单表或双表实现。例如一对一强制关系可在一个表中用非空字段表示,也可拆分为两个表并互相引用主键,但必须保证数据完整性。多对多关系在关系模型中通常通过第三个关联表实现,并确保关联字段组合的唯一性。设计者应根据业务需求和未来变化选择合适方式。
招聘服务数据库设计要点
针对招聘服务,文章识别出员工、公司、职位、项目和技能五个核心实体。员工与公司、职位、项目之间均为多对多关系,因为一名员工可任职于多家公司、担任多个职位并参与多个项目。为记录任职时长,引入了JobHistory表来关联员工、公司、职位和项目。项目与技能之间也通过ProjectSkill表实现多对多关联。这种设计能支持复杂的技能和项目过滤需求。
数据库模式是动态快照
文章强调,实体间的关系并非人为发明,而是现实世界中客观存在的,且会随时间变化,例如从一对一转变为多对多,或强制关系变为可选关系。因此,数据库模式只是特定时间点关系的一个快照。设计时必须考虑未来可能的变化,一个良好的数据库模型应能长期无需修改,尤其对于存储海量数据(从几GB到数TB)的系统,避免因模式变更导致大规模数据重存。
Q&A
关系数据库设计中,一对一关系有哪两种实现方式?
一对一关系可以通过一个实体(表)实现,将两个实体的数据放在同一个表中;也可以通过两个实体(表)实现,两个表通过外键相互引用,并保证数据完整性。
多对多关系在关系数据库中通常如何实现?
多对多关系通常通过三个实体(表)实现,即两个主表和一个关联表。关联表包含两个主表的主键作为外键,并且这两个外键的组合通常作为关联表的主键,以确保唯一性。
数据库规范化有什么优缺点?
规范化的优点是减少数据冗余,降低数据异常的风险;缺点是分解实体后,会导致数据操作(插入、更新、查询、删除)的查询构建更复杂。
反规范化是什么?它有什么作用?
反规范化是通过添加冗余数据来简化数据访问的查询处理。例如,可以使用半结构化数据(如XML、JSON)将子列表存储在父实体中,从而避免复杂的连接查询。
招聘服务数据库模式中,员工和公司之间是什么关系?如何实现?
员工和公司之间是多对多关系,因为一个员工可以为多家公司工作,一家公司也可以有多名员工。这种关系通过JobHistory表实现,该表记录了员工的工作历史,并关联员工、公司、职位和项目。
在数据库表设计中,如何定义表结构?
定义表结构包括设置列、约束和索引等元素。可以使用表编辑器,在列选项卡中定义列,在约束选项卡中添加或修改主键和外键,在索引选项卡中定义索引。