一张地图、售楼处小区的沙盘、一架精巧的航模飞机都是具体的模型,可以让人联想到真是生活中的事物,模型是对现实世界中某个对象特性的模拟和抽象。
数据模型(data model)也是一种模型,是对现实世界数据特征的抽象。人们要把现实中的具体事物如人、物、活动、概念转换成计算机能处理的数据,所以数据模型就是现实世界的模拟,是数据、数据联系、数据语义以及一致性约束的概念工具的集合。它是数据库系统的核心和基础。
数据模型应满足三方面要求:一是能比较真实的模拟现实世界,而是容易为人理解,三是便于在计算机上实现。如同建筑设计和施工使用不同的图纸一样,在设计开发实施数据库应用系统中也需要使用不同的数据模型。作为现实世界到机器世界的中间层次,是第一层抽象建模。我们需要先掌握信息世界的一些基本概念。
- 什么是实体?
这个和实体经济里面的“实体”有点像但又不一样。数据库里面呢,把客观存在并可互相区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或者联系。例如,一个学生、一个部门、一门课、最近过山车式的股市的各个板块等都可以是实体。
物以类聚,具有相同性质(属性)的实体集合称为实体集。例如,某大学所有教师或者所有本科生、所有研究生的集合。
具有相同属性的实体必然具有共同的特征和性质,用实体名及属性名集合来抽象和刻画同类实体,称为实体型。例如,学生(学号,姓名,性别,出生年月,所在院系,入学时间)就是一个实体型。因此,实体型是个抽象的概念。
1.属性
实体所具有的某一特性称为属性。一个实体可以由若干个属性刻画。例如,学生实体可以由学号、姓名、性别、出生年月、所在院系等组成。
域:属性可取值的集合,也称值集。例如,某大学学号的域可能为[0000000,9999999],性别的域[男,女]等。
属性从不同维度可分为下面几种:
- 简单属性和复合属性(可以划分为更小的部分)。复合属性举例:名字(姓和名),地址(城市、街道、门牌号),电话号码(国家号+地区号+用户号码)等。
- 单值属性和多值属性。多值属性举例:张教师有两个手机号,娃有好几个
(培训班)。特长 - 派生属性:值从别的相关属性或实体派生出来。比如,年龄可以通过当前日期和生日(属性)计算出来。则,年龄为派生属性。
- 空值:NULL,表示在某个属性上没有值。可能是没有该属性或者属性值还不知道。
2.码
实体有一组性质可以唯一标识一个实体,称为码。一个元组的属性值必须必须能够唯一区分元组的,或者说一个关系中没有两个元组在所有属性上的取值都相同。例如,学生的学号、职工的工号、居民的身份证号,课程编号等。在数据库设计中,使用主码(primary key)用来在一个表中区分不同元组。
一个关系模式(如r1)可能在它的属性中包括另一个关系模式(如r2)的主码。这个属性在r1上称作参照r2的外码(foreign key)。关系r1也成为外码依赖的参照关系,r2叫做外码的被参照关系。比如,我们有两个关系学生(学号,姓名,性别,专业号,出生年月)和专业(专业号,专业名)。学生关系的“专业号”是参照专业关系的外码。
3. 联系
联系指多个实体间的相互关联。例如,定义老师76778 李数和学生01 赵一一 的联系“指导”,指明李数在2020/9/1这天成为赵一一的导师。学生和课程之间的联系为学生选课。如图1所示。
联系集是相同类型联系的集合。
实体型之间的联系可以分为以下三种:
- 一对一联系(1:1)
如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然。则成实体集A和实体集B具有一对一联系,记为1:1。
例如,班级中只有一个正班长,一个正班长只能在一个班级中任职,则正班长和班级是一对一的关系。
- 一对多联系(1:n)
A中的一个实体可以与B中的任意数目(n ≥0)实体相关联,而B中的一个实体至多与A中的一个实体相关联。
例如:一个班主任可以负责多名学生,一个学生只能对应一个班主任。班主任和学生就是一对多的关系。
- 多对多联系(m:n)
A中的一个实体可以与B中任意数目(n≥0)实体相关联,而B中的一个实体也可以与A中的任意数目(m≥0)实体相关联。
例如:一门课程同时有若干学生选修,而一个学生可以同时选修多门课程。课程和学生之间具有多对多联系。热门选修课有多难抢你们都懂得。
关系、属性、元祖间的关系见下表。