数据库学习笔记(三) | 关系模型和SQL

本文是数据库学习笔记的第三篇,重点介绍了关系型数据库的基础知识,包括关系模型、表、元组、关系实体、关系模式、关系键值和属性域等概念,并探讨了SQL查询语言的基本操作,如选择、插入、更新和删除。
摘要由CSDN通过智能技术生成

关系型数据库(Relational Database)

一组关系的集合

关系(Relation)

由两个部分组成

  • 实体(Instance):一个表(table),由行和列组成
    行 = 基数, 字段 = 属性元数
    e.g. Students Relationship中,基数 = 3, 属性元数 = 5。
    在这里插入图片描述
  • 模式(Schema):指定关系的名称以及各列的名称和类型。
    e.g. Students(sid: string, name: string, age: integer, gpa: real)

可以认为关系是一组行或元组的集合。也就是说,所有行都不同。

一些概念

表(Table)

在关系数据模型中,关系以表的形式存储。这种形式通过实体(Entity)存储关系。表有行和列,其中一行表示一个记录,一列表示一个属性。

元组(Tuple)

表的一行,即关系的一个记录称为一个元组。

关系实体(Relation Instance)

关系数据库中的一个有限的元组集合称为关系实体。关系实体中没有重复的元组。

关系模式(Relation Schema)

关系模式描述关系的名称(表名称)、属性以及属性名。

关系键值(Relation Key)

每一行有一个或多个属性,称为关系键值。这些属性可以唯一标识关系(表)中的行。

属性域(Attribute Domain)

每个属性都有预设的取值范畴,称为属性域。

  • 属性域最好具有原子性。
    e.g. 列 “姓,名” 不具有原子性,因为该列中有两个不同的域。

关系查询语言(Relational Query Language)

  • 关系模型的一个主要优势:支持简单、强大的数据查询。
  • 查询语句可以直观地书写。DBMS负责高效地编译/解析它们。
  • 键(Key):进行精确的语义关系查询。
    • 允许查询优化器对查询操作重新排序并确保结果不会变化。

结构化查询语言(Structured Query Language, SQL)

  • 定义:SQL是一种用于编程的有明确特定域的语言,旨在管理关系数据库管理系统(Relational Database Management System, RDBMS)中的数据,或用于关系数据流管理系统(Relational Data Stream Management System, RDSMS)中的流处理。它在处理结构化数据时尤其有用,因为结构化数据的不同实体/变量之间存在关系。相比于以往的读/写API,SQL提供了两个主要优势:首先,它引入了使用单个命令访问多个记录的概念;其次,它无需指定如何到达记录。e.g. 是否具有索引。
  • 电子表格(EXCEL等)与关系/表形式相似。
    e.g.
    在这里插入图片描述
    看起来没有多大差别,当测试一些用例时就可以体现出不同。

SQL语句

SQL语句有两种:数据定义语句(data definition language)和数据处理语句(data manipulation language)。

SQL处理过程

在这里插入图片描述

  • 客户端应用程序(client application)
    e.g. MySQL Workbench
    • 将SQL语句以字符串形式输入
    • 调用连接器包(connector library)。例如在Python中使用pymysql包。
  • 连接器包将输入的SQL语句转换为一个消息体并通过网络发送到DBMS。
  • DBMS解析、编译并运行这个命令。数据库中的数据存储在电脑磁盘中的“特别文件”中。
  • DBMS生成并发送一个由响应代码和数据组成的网络信息。
  • 适配器(adaptor):接收消息并将其从网络消息体格式转换为应用程序语言格式。
    e.g. python 连接数据库并执行查询语句,打印10个结果。
import pymysql
import logging
import json

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)


def get_connection():
    """
       My default connection
    """
    r = pymysql.connect(host='localhost'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值