数据库—关系数据模型

 

 

数据的结构

在数据库中使用二维表表示数据之间的关系与结构

概念

  • 概念

    • 域就是一个集合的取值范围,那么在二维表中的域就是在该属性列中能够取的值,比如:性别{男,女},男和女就是性别这个属性列中的域,域的属性一定要相同,说白了就是要属于性别这个东西内,就好比不能出现人妖这种性别。但是在数据库中定义的就是关于类型的了,就是你定义的域中的值必须都是属于字符串或者int类型或者其他,不能啥类型都有。

    • 元组(也称:实体)
      一个二维表中的一行(一组数据)叫做元组

    • 属性 = 表头中的每一列
      比如:学生表中的表头是(学号,姓名,性别),那么学号姓名性别就是一个属性,而存储的数据叫做这个属性列的值,这些值都是在域中的

    • 笛卡尔积
      笛卡尔积在数据库查询中一般没啥用,因为我们只要有效的元组信息
      解释:意思是两个表进行连接操作,假设有两个表R,S,然后R中的第一行元组与S中的所有行(假设S只有三行元组)进行组合,组合起来为就是有三行,每一行都有R的第一行元组与S的各个行组成。如图所示:
      在这里插入图片描述

    • 关系
      关系就是数据,就叫关系,所以在数据库中用专业术语来说,看到一张带有数据的表就不叫excel二维表了,作为一名专业人员就要改口叫关系。(比如:一个关系叫做家庭,第一时间脑海显现出来的数据就是我们的家人的名字对应的身份关系)

    • 关系模式
      关系模式就是表头,就是代表这个关系的模式,上面提到关系就是整个表,那么关系模式就是能够描述你这个表是怎样的,比如我说:这表是学生关系,我只知道这个表是学生关系表,但是我不知道里面到底有什么属性,虽然我能知道某些数据,但这些数据我可能拿到一部分而已,并不能代表这整个关系的结构。所以关系模式就是说的表头,能够知道所有属性列是什么(关系模式不能够表示值)

    • 关系与关系模式的区别
      关系我理解的意思更多是表示
      关系模式是这个关系的形状和样子,其实就是表头。

    • 关系数据库
      关系的仓库,那顾名思义就是一堆关系组成了关系数据库。因为现实生活中想要准确清除描述一个事物不可能一个表就包罗万象,就算可以,身为一名程序员我不允许这么恶心这么冗余的数据出现。因此一般需要不止一个关系表示,比如经典的图书管理系统,图书基本信息作为一个表,图书分类又可以一个表,管理员账户密码又可以一表…

关系操作

  • 关系操作:增删查改
    本人很反感增删查改,总感觉写增删查改就像一个毫无感情的机器。
    • 在关系数据操作中属于集合的操作(正是因为如此才会有上面提到的笛卡尔积现象,当然在实际操作中一定要避免笛卡尔积现象)

    • 关系操作语言

      • 关系代数语言(一般这玩意属于是手写)
      • 关系演算语言(就是离散数学中的,一般也是手写)
      • 结合上面两种语言的叫做SQL语言(SQL语言是一种语言,但是SQL语言在不同DBMS软件中对应的语法有稍微不同)
    • 总结
      感谢前辈的劳动成果,能够让我们使用SQL语言对数据进行集合的操作,并且是高度非过程化的东西,能够被其他高级语言使用,操作集合想想都觉得舒服,这种模块模块的操作着实让人赏心悦目。

      • 主码(主键)
        在一个关系(表)中能够靠这个主码唯一标识一个元组(实体),既然能够做唯一标识的属性,那么这个主码在存储一个元组数据的时候肯定不能为空值
      • 候选码
        当一个关系模式中不止一个属性能够唯一标识一个元组的时候,我们选取完了一个主码之后,剩下的还能继续唯一标识的就叫做候选码(顾名思义候选候选,当然是也能够做主码的才能叫做候选码),由于不是主码,没有选这个属性列为主码,虽然他能唯一标识,但我可没让他来唯一标识哈,换而言之就是说就不需要他唯一标识该元组了,意思就是他可以为空。
      • 外码(外键)
        外键,外的意思就是其他关系(表)中的值,但是这个外表中的值不能随便取,必须是这个外表中的主键。就是说外码必须是你参照的那个表的主码(主键),同样的,由于在本表关系中,不需要外键来唯一标识该元组,所以他可以为空值。(当然有时候会让外键做主键,这时候就不能为空之值了)
      • 全码
        用整个关系的属性作为主键。(就是你用所有属性列来标识唯一的元组这时候这些所有属性列就叫做全码)
    • 注意事项
      一个关系中不能有一模一样的元组(虽然你可以这么做,但是完全是diao毛行为),不同列(属性)的数据类型可以一样,比如我姓名和性别出自不同属性列但是我都给他取字符串类型,数据的行的顺序无所谓,因为我们查询的时候可以排序,属性列顺序也无所谓,因为查询出来的数据不也是那几样,学号和姓名顺序调换了一下不影响这个数据代表的那一个学生。

完整性规则

  • 实体完整性
    • 主码不能为空(主属性不能为空)
  • 参照完整性
    • 外键只能取参照表那个主键的域的值。或者暂时为空值
  • 用户自定义完整性
    • 用户需求程序员自定义需求,比如我不希望该表中姓名重复,那么就需要自定义一些规则来约束达到这个目的。
posted @ 2023-06-27 18:47  竹等寒  阅读(20)  评论(0编辑  收藏  举报  来源