Data Model

数据模型

层次和网状数据模型

层次结构

  • 基本思想:在数据库发展的早期,人们发现在现实世界中有些东西他天生就是有层次的,所以就用数据结构中的树这个数据结构来表达现实世界。
  • 基本概念:record(记录) and field(域),每一个记录都含有若干个域
  • Parent-Child relationship(PCR):表示的是一个一对多的关系1:N(一个记录对应多个域),比如:张三->name,age等
  • 每一个PDR关系组成一起形成一个树形的结构这就是层次模型
  • Virtual Record (虚记录)::层次结构过于理想,还有好多多对多的关系,解决了一个记录有多个双亲的这种情况,这个数据类型只存储关系类型,不表示实物,比如为一个student但他不存张三,只代表的这是一个student,通过一个指针指向真实的张三

网状结构

  • 基本数据结构:表示为一个“set”叫做系,由主记录和属记录组成,一个系含有一个主记录并指向多个属记录,它可以是多个属记录的主记录同时也是多个主记录的属记录,由此形成一个复杂的网状模型(有点像数据结构中的有向图)
  • LINK record:M:N,找一个替身(link记录)(是一个自连接 ),然后对替身进行向下复合,由一层层的链表组成
  • 图1
  • 实例:(图2)现有两个学生 john和pat,通过SL这个链表可以知道john选了四门课形成四个Link记录,同时指向四门课,知道他选了AI,SF,NK,DB这四门课,pat同理
  • 图2
    在这里插入图片描述
  • 做出提问:为什么不在Link记录的地方直接放实体的课程呢,比如L1处写为AI
  • 自我解答:因为这只是其中一部分,还有好多学生会选到AI这门课,这样通过一个Link记录的中转(中间表)就可以使下面的子集形成一个链表,这样就形成链表套链表的一种结构,参照图1

关系模型(Relational Data Model)

  • 现在主流的模型
  • basic data:“table”表
  • 他是基于数学的集合论的,更为抽象
  • 引出了SQL语言,是一种查询语言,是一种非过程化的查询,只需要告诉系统需要什么,不需要关心过程
  • 软连接:(图3)是一种逻辑的表达,实现了实体和实体之间的联系,相当于是一个关系和关系之间的中间的对照表,类似于指针的索引项,起到了一个指针的作用但他不是指针
  • 图3
    在这里插入图片描述
  • 刻画实体的每一个信息,在关系模型里的叫做属性,每一个属性会有一个取值范围这个取值范围叫做domain
  • domain需要满足的两个要求:
    1.一范式(1NF)每一个属性都是一个元子,不允许表中套表
    2.每一个记录的值允许他是空值

关系和元组(Relation and Tuple)

  • 现实世界中的实体或实体中的联系,用一个或多个relation来表达
  • A relation is a N-ary relationship defined on all of its attribute domain
  • 一个关系的实例就是由多个元组组成的集合,可以理解为表中的一行
  • 自己的话来说:行就是元组,列就是域/属性,笛卡尔积的有限子集(笛卡尔乘积就是所有排列组合的总和)

主键(Primary Key)

  • 满足“一个属性的唯一标识,比如一个人的身份证或一个学生的学号”这个条件的一组属性就叫这个关系(表)的一个候选键,其他就叫为候补键
  • 举例: 在学生这张表中,有学号,姓名,年龄,如果整张表中有重名并且有重学号,但不存在即重名又重学号的学生,可以设其中学号为候选键,姓名就为候补键,这样就由两个属性确定了一个元组
  • 如果整个元组中必须把所有属性拿出来才能确定一个元组,那么这个关系就叫做全键

外键(Foreign Keys)

  • 在一个表里面,有一组属性,用它来引用另外一个表中的元组的话,这组属性就叫外键,且其外键为另一张表的主键
  • 举例:三张表
    1.选课表:学号,课程号,…
    2.学生表:学号,姓名,…
    3.课程表:课程号,课程,…
  • 其中学号就引用学生表中的学号,课程号就引用课程表中的课程号,在选课表中,学号,课程号就为外键,分别对应着学生表和课程表中的两个主键
  • 外键其实就是一个逻辑指针,上述的软连接就通过外键实现
  • 引用完整性:外键必须在其他表中存在(比如:选课表中其中一个学号为01,那么在学生表中就必须有01这个学生存在)
  • 外键引用举例(图4)
  • 图4
    在这里插入图片描述

Other Integrity Constraints

  • 域完整性约束(Domain integrity constraint):这张表里面每个元组的每个属性的值必须符合他的值域的要求
  • 实体完整性约束:一个表里面,如果你定义了一个组件的话,那么作为组件的这个属性不能为空

关系代数(Relational Algebra)

  • 关系代数是关系模型的理论基础
  • 在关系代数中有五个基础的操作,任何一个系统只要支持这五个操作,那么就是完备的系统
  • 五个基本操作:
    1.Selection(σ):在一个表中把满足条件的一行找出来
    2.Projection(π):叫做投影操作:把所需要的列删掉
    3.Cross-product(X):把两个关系拼接在一起(笛卡尔乘积)
    4.Set-difference(-):把属于关系1但不属于关系2的元组找出来(1-2)
    5.Union(∪):把模式相同的两个元组并起来

Selection(σ)

  • 选择操作本身不会产生重复元组

Projection(π)

  • 按说会把重复的元组删掉
  • 一个实际的系统如果用户不规定,那么不会删除重复元组

X - ∪

  • 满足并兼容的关系

Cross-product(X)

  • 笛卡尔乘积相当于把两个表拼接成一个大表,首先会包含其本身的所有属性

  • 笛卡尔乘积的元组由原先的元组两辆拼接形成

  • 实例(图5.6)

  • 图5:准备的两张表
    在这里插入图片描述

  • 图6:笛卡尔乘积之后的结果
    在这里插入图片描述

  • 发现都有sid这个重复属性 出错了可以用C->进行重命名

  • 拼接后可能会有很多没有意义的元组 所以笛卡尔乘积不是重点,更常用的是条件连接操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值