数据库设计实例100例
在学习“数据库系统概述”这门课程时,我时常思考,这门课程究竟要我们什么呢?
由于课堂之外没有深入探索,且课堂上老师的教学水平有限,我长时间未能理解此课程的真正意义。我究竟从中收获了什么?诚然,我掌握了一些新名词,如范式、事务、码、集合运算等等。
但在实际应用中,我发现只有SQL语句得到了真正的使用。也就是说,增删改查是数据库操作的基础,而SELECT、DELETE、UPDATE和INSERT这四个语句是最常用的。
后来参与了一个项目的开发,但由于队友提前建好了数据库,我没有机会学习到如何建立数据库。直到一次面试,被问及如何设计数据库,我才开始恶补相关知识,花了半个月的时间将学过的知识串联起来。
数据库设计的重要性远超于使用SQL语句。因为使用SQL语句的前提是有一个设计良好的数据库,其中包含各种表。就像解数学题一样,数据库的建立也有其流程和逻辑。
具体来说,这个过程首先从实际需求出发,形成一份需求文档,重点在于理解用户的数据需求和数据处理需求。这意味着要清楚需要存储哪些数据(比如学生信息),以及需要对这些数据执行哪些操作(如增删改查)。
进一步地,涉及到模型设计,目标是设计出一个E-R实体联系模型。这个模型定义了数据库中包含的实体、实体的属性以及实体之间的联系。有些特殊实体在联系中还会存在特殊的约束。
接下来是逻辑设计,即将实体模型转化为关系模型。这一步的目标是得到可以作为数据库的关系模型。拿到E-R模型后,根据一些转换原则,我们可以得到关系模型,但并非所有关系模型都能直接用作数据库。
通常至少需要经过三步范式设计,才能得到一个稳定、易于处理异常的关系模型。这一步更多地由操作系统和数据库系统本身负责。
以一个小明游戏开发者的例子来说,如何将内购模式加入游戏并设计相应的数据库。通过询问需求,我们了解到每个用户都是独一无二的,有属于自己的游戏ID、游戏名字、密码和联系方式等。需要考虑如何处理订单,因为游戏中有许多装备需要购买。
根据这些需求,我们可以设计用户表、订单表以及装备表。同时还需要考虑用户与装备、订单与装备之间的联系。这就需要画出E-R实体联系模型,将实体、属性和联系清晰地展示出来。
将E-R图转化为关系模型,即把实体转化为表。这个过程需要遵循一些原则,比如1对1的联系、1对n的联系以及n对m的联系。在本例中,我们设计了用户表、订单表、装备表以及用户与装备、订单与装备的联系表。
至此,初步的表设计完成。经过检查满足第一范式(1NF)、第二范式(2NF)和第三范式(3NF)的要求,这个数据库就可以投入使用了。