1.2 数据库设计
数据模型按不同的应用层次分成3种类型,分别是概念模型、逻辑模型、物理模型。
1.2.1 概念模型
概念模型是面向数据库用户现实世界的数据模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及数据库管理系统的具体技术问题,集中精力分析数据以及数据之间的联系。概念模型用于信息世界的建模,常用的是E-R模型、扩充的E-R模型、面向对象模型及谓词模型等。
通常,E-R模型把每一类数据对象的个体称为“实体”,而把每一类对象个体的集合称为“实体集”,例如,网上商城管理系统主要涉及“商品”“供货商”“用户”等多个实体集。每个实体集涉及的信息项称为属性。就“商品”实体集而言,其属性有商品编号、商品名称、价格、库存量和商品图片等。
实体集中的实体可明确区分。如果实体集中的属性或最小属性组合的值能唯一标识其对应实体,则将该属性或属性组合称为码。码可能有多个,对于每一个实体集,可指定一个码为主码。
如果用矩形框表示实体集,用椭圆形框表示属性,用线段连接实体集与属性,当一个属性或属性组合被指定为主码时,需要在实体集与属性的连接线段上标记一斜线段,则可以用图1.4所示的形式描述网上商城管理系统中的实体集及每个实体集涉及的属性。
图1.4 网上商城实体集及其属性
实体集和实体集之间存在各种关系,这些关系通常被称为“联系”,使用菱形表示。表示实体集及实体集联系的图称为实体(Entity)-联系(Relationship)图,简称E-R模型。
从分析用户项目涉及的数据对象及数据对象之间的联系出发,到获取E-R模型的这一过程称为概念结构设计。
两个实体集A和B之间的联系可能是以下3种情况之一。
1.一对一的联系(1∶1)
A中的一个实体至多与B中的一个实体相联系,B中的一个实体也至多与A中的一个实体相联系。例如,“用户”与“收件人”这两个实体集之间的联系是一对一的联系(1∶1),因为一个用户对应一个收件人,反过来,一个收件人对应一个用户,“用户”与“收件人”两个实体集及其联系如图1.5(a)所示。
2.一对多的联系(1∶n)
A中的一个实体可以与B中的多个实体相联系,而B中的一个实体至多与A中的一个实体相联系。例如,“供货商”与“商品”这两个实体集之间的联系是一对多的联系(1∶n),因为一个供货商可提供若干商品,反过来,一个特定商品只能属于一个供货商。“供货商”与“商品”两个实体集及其联系如图1.5(b)所示。
3.多对多的联系(m∶n)
A中的一个实体可以与B中的多个实体相联系,而B中的一个实体也可与A中的多个实体相联系。例如,“用户”与“商品”这两个实体集之间的联系是多对多的联系(m∶n),因为一个用户可购买多个商品,反过来,一个商品可被多个用户购买。“用户”与“商品”两个实体集及其联系如图1.5(c)所示。
图1.5 两个实体集及其联系
实际应用中,用户订货产生订单,再根据订单下单对应商品,并确定数量,如图1.6所示。
图1.6 商品销售实体集及其联系
概念模型必须转换成逻辑模型,才能在数据库管理系统中实现。
1.2.2 逻辑模型
逻辑模型是数据库采用的数据模型,它既要面向用户,又要面向系统,主要用于数据库管理系统的实现。目前比较流行的是关系数据库管理系统,这里以网上商城管理关系数据库为例介绍其对应的逻辑模型。
前面用E-R模型描述了网上商城管理系统中实体集与实体集之间的3种联系,下面分别将其转换为关系模式。
1.一对一联系的E-R模型到关系模式的转换
一对一联系既可以单独对应一个关系模式(即关系模型),也可以不单独对应一个关系模式。
一对一联系单独对应一个关系模式,则由联系属性、参与联系的各实体集的主码构成关系模式;一对一联系不单独对应一个关系模式,则联系的属性及一方实体集的主码加入另一方实体集对应的关系模式中。其主码可选参与联系的任一方实体集的主码。
例如,考虑图1.5(a)描述的“用户”(user)和“收件人”(reci)关系模式如下:
user(账户名,姓名,微信,身份证号,职业,关注,手机号);
reci(手机号,姓名,常用地址,投递位置,账户名)。
其中,下画线表示该字段(又称为列)为主码。
2.一对多联系的E-R模型到关系模式的转换
一对多联系既可单独对应一个关系模式,也可以不单独对应一个关系模式。
一对多联系单独对应一个关系模式,则由联系的属性、参与联系的各实体集的主码构成关系模式,n端的主码作为该关系模式的主码。一对多联系不单独对应一个关系模式,则将联系的属性及1端的主码加入n端实体集对应的关系模式中,主码仍为n端的主码。
例如,图1.5(b)描述的“供货商”(supplier)与“商品”(commodity)关系模式如下:
supplier(供货商编号,供货商名称);
commodity(商品编号,商品名称,商品价格,商品库存量,商品图片,供货商编号)。
3.多对多联系的E-R模型到关系模式的转换
多对多联系单独对应一个关系模式,该关系模式包括联系的属性、参与联系的各实体集的主码,该关系模式的主码由各实体集的主码共同组成。
例如,图1.5(c)描述的“用户”(user)与“商品”(commodity)的购买(buy)关系模式如下:
user(账户名,姓名,微信,身份证号,职业,关注);
commodity(商品编号,商品名称,商品价格,商品库存量,商品图片,供货商编号);
buy(账户名,商品编号,数量)。
关系模式buy的主码是由“账户名”和“商品编号”两个属性组合起来构成的,一个关系模式只能有一个主码。
实际应用中,用户(user)订货产生订单(orders),订单中包含订单项(orderitems),订单项对应商品(commodity),并确定数量。
orders(订单编号,账户名,支付金额,下单时间);
orderitems(订单编号,商品编号,订货数量,是否发货)。
以上为根据E-R模型设计关系模式的方法。这一设计过程通常称为逻辑结构设计。
在设计好一个项目的关系模式后,即可在数据库管理系统环境下,创建数据库、关系表及其他数据库对象,输入相应数据,并根据需要对数据库中的数据进行各种操作。
1.2.3 物理模型
物理模型是面向计算机表示的数据模型,描述了数据在存储介质上的组织结构,它不但与具体的数据库管理系统有关,还与操作系统和硬件有关。每一种逻辑模型在实现时都有其对应的物理模型。为了保证数据库管理系统的独立性与可移植性,大部分物理模型的实现工作由系统自动完成,设计者只设计索引、聚集等特殊结构。