前言

上一篇文章我们介绍了什么是SQL,还有部分相关概念,本文我们来介绍关系型数据库管理系统(RDBMS)。

RDBMS 是 Relational Database Management System 的缩写,它是 SQL 语言以及所有现代数据库系统(例如 SQL Server、DB2、Oracle、MySQL 和 Microsoft Access)的基础。

比如我们每个人在大学入学时都会有一个自己的学号,学号对应着我们的学院、专业、姓名等信息,后续我们只需要通过学号就可以查询到这个学生的相关信息。我们也可以通过专业名称查询到这个专业的学生,这些都是依靠这数据之间的关系来实现的。

表(table)

在关系型数据库中,数据被存储在一种称为表(Table)的数据库对象中,它和 Excel 表格类似,都由许多行(Row)和列(Column)构成。每一行都是一条数据,每一列都是数据的一个属性,整个表就是若干条相关数据的集合。

表是关系型数据库中最常见、最简单的数据存储形式。

示例如下,名为“provice”的信息表:

+----+-----+--------+-----+-------+---------+
| 编码 | 名称| 简称| 地区 | 类别 | 省会 |
+----+--------+--------+-----+--------------+
|  11 | 北京 | 京 | 华北 |直辖市| 不适用 |
|  21 | 辽宁 | 辽 | 东北 |  省 |  沈阳 |
|  31 | 上海 | 沪 | 华东 |直辖市| 不适用 |
|  36 | 江西 | 赣 | 华东 |  省 |  南昌 |
|  45 | 广西 | 桂 | 中南 |自治区|  南宁 |
+----+-----+------+-----+-------+-----------+

字段(Field)

每个表都由若干列构成,每一列都称为一个字段(Field),上表 website 所包含的字段有 id、name、url、age、alexa、uv 和 country。

字段用来维护数据表中每一条数据(记录)的特定信息。

列(Column)

与Excel类似,列(Column)是从垂直方向观察表中的数据,它包含了与某个字段相关联的所有信息。如上表中的简称一列,如下所示:

+----------------------------+
| 简称                        |
+----------------------------+
| 京    |
| 辽    |
| 沪    |
| 赣    |
| 桂    |+----------------------------+

记录(Record)

数据表中的每一行数据都称为一条记录(Record),有多少行数据就有多少条记录。

字段是从垂直方向看表中的数据,记录是从水平方向看表中的数据。

如上面表中的第四条记录的数据

|  36 | 江西 | 赣 | 华东 |  省 |  南昌 |

空值(NULL)

字段的取值可以为 NULL,此时意味着该字段是空的,没有任何值,所以 NULL 被称为“空值”。

注意,NULL 和零值不一样,和包含空白符(空格、缩进、换行等)的字段也不一样,NULL 字段是指在添加记录的时候留空的字段,也即不为该字段指定任何值。

SQL 约束

约束(Constraint)是指表的数据列必须强行遵守的规则,这些规则用于限制插入表中的数据的值,这样能够确保每份数据的准确定和可靠性。

约束可以是列级别,也可以是表级别;列级约束仅作用于某一列,而表级约束则作用于整张表。

下面是 SQL 常用的一些约束:

约束 说明
NOT NULL 非空约束,确保列中不能有 NULL 值。
DEFAULT 默认约束,如果未指定值,那么列将提供默认值。
UNIQUE 唯一约束,确保列中所有的值都不相同。
PRIMARY KEY 主键,用来唯一标识数据表中的每一行/记录。
FOREIGN KEY 外键,用于将两个表连接在一起,让两个表的数据保持同步。
CHECK 检查性约束,用于限定列的取值范围。
INDEX 索引,用于快速从数据库中检索或者获取数据。

数据的完整性

每个 RDBMS 都存在以下几种类别的数据完整性:

  • 实体完整性:表中的一行(一条记录)代表一个实体,表中不能有重复的行
  • 域完整性:域也即字段,域完整性用来保证字段的取值是合理的
  • 引用完整性:一个表中的字段可以引用另外一个表中的记录。如果某条记录被另外一个表中的字段引用,那么该记录不能被删除
  • 自定义完整性:除了以上三种基本的完整性约束,不同版本的 RDBMS 在实现时,还可以根据其具体的应用环境,自己制定一些其它的完整性约束

数据库范式

设计关系型数据库时,需要遵守一些特定的规范才能设计出合理的数据库,这些规范就称为“范式”,满足不同程度的规范就是不同的范式。范式的目的在于:

  • 消除冗余数据,比如,不应该将两份相同的数据存储到不同的表中
  • 确保数据之间的关联性是有意义的

以上两点不但能减少数据库占用的存储空间,还能确保数据之间有清晰的逻辑关系。

总结

本文主要介绍了什么是RDBMS,同时介绍了表、字段、列、记录等概念,后续我们将继续介绍具体的SQL语法。

更多技术文章

软件测试|RDBMS是什么意思,你搞懂了吗?相关推荐

  1. 网络知识扫盲,一文搞懂 DNS

    在找工作面试的过程中,面试官非常喜欢考察基础知识,除了数据结构与算法之外,网络知识也是一个非常重要的考察对象. 而网络知识,通常是很抽象,不容易理解的,有很多同学就在这里裁了跟头.为了更好地通过面试, ...

  2. 【显卡】一文搞懂显卡

    [显卡]一文搞懂显卡 文章目录 [显卡]一文搞懂显卡 1. 前言介绍 1.1 CPU和显卡的区别 1.1.1 作用不同 1.1.2 结构不同 1.1.3 应用场景不同 1.2 三个著名的显卡公司 2. ...

  3. 一文带你搞懂什么是测试开发!

    需要说明的是,原文发表于作者的公众号中,文章篇幅虽长,但内容朴实.且能帮助读者进一步理解测试开发工作,请读者耐心品完~ 01 开始前说点什么 1. 自我反省 公众号开通了也有两年多了,除了刚开通的那段 ...

  4. zhs16gbk对应mysql_[Oracle] 彻底搞懂Oracle字符集

    基本概念字符集(Character set):是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.常见的字符集有ASCII,ZHS16GB231 ...

  5. 面试必备|带你彻底搞懂Python生成器

    2019年人工智能系统学: https://edu.csdn.net/topic/ai30?utm_source=ai100_bw 作者 | Rocky0429 转载自 Python空间(ID:Dev ...

  6. 20分钟教你搞懂Git!

    Git 是最流行的版本管理工具,也是程序员必备的技能之一.本文就来教你 20 分钟搞懂 Git! 以下为译文: 尽管每天你都会用到Git,但也有可能搞不懂它的工作原理.为什么Git可以管理版本?基本命 ...

  7. 搞懂机器学习的常用评价指标!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈安东,湖南大学,Datawhale成员 我与评价指标的首次交锋是 ...

  8. 一文搞懂结构体的定义及实际使用

    大家好,我是无际,无实战不理论. 今天给大家讲一下结构体. 大家可能很好奇,为什么这种文章教程泛滥了,我还要拿出来讲. 相信无际的铁粉都知道,我分享的干货和经验出发点是实际产品应用. 脱离产品你所学的 ...

  9. 想要彻底搞懂“异地多活”,看完这篇就够了

    在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理. 异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的? 这些疑问,想必 ...

  10. 这一次,你能彻底搞懂 Flink!

    近年来,AI 场景发展得如火如荼,同时其计算规模也越来越大.这也让专注于数据处理的 Flink 有了较大的发展空间.Flink作为在大数据生态里实时处理的一个新框架,在一定程度上也有一定的难度. Fl ...

最新文章

  1. 白盒测试方法之条件覆盖测试
  2. ADMT3.2域迁移之Server2003至Server2012系列(八)生成密钥文件及安装密码迁移工具...
  3. 计算机组成原理小论文参考文献,急!···跪求.《计算机组成原理》--论文--一篇...
  4. java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌
  5. IOS内存的一篇文章
  6. 学号20145209《信息安全系统设计基础》第11周学习总结
  7. .NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统
  8. Entity Framework在WCF中序列化的问题(转)
  9. ospf路由协议源码学习
  10. Kotlin入门(8)空值的判断与处理
  11. Asp.Net客户端触发服务器端事件及_dopostback
  12. 大厂Android相关岗位校招职位要求汇总
  13. 首届 RustCon Asia 圆满落幕——Love is electricity for RustCon Asia
  14. 计算机考研408考试关键词、专有名词、术语等英文缩写和全称
  15. 微信群管理助手哪里弄的?
  16. python4delphi和tesserocr库安装配置
  17. Hinton 深度学习论文总结
  18. 问题分析报告--简单SQL启动MR
  19. 一起来学C++:C++中的代码重用
  20. TextFormat设置中文字体font属性注意的问题

热门文章

  1. Drcom下如何使用路由器上校园网并开启WIFI(以广东工业大学、极路由1S HC5661A为例)
  2. Principle 6.9 中文版 Mac平台交互动效设计神器
  3. 如何将手机里的wav录音转换成mp3格式?
  4. 添加程序到Ubuntu的Aplication列表
  5. 用argis和envi出对比图,带roi图层
  6. 全景视频播放器中OpenGL的相关记录
  7. 如何利用CNN实现图像识别的任务?
  8. Python可视化界面编程入门
  9. 【高效运维】Nginx下配置WS、WSS
  10. c#控件弹幕效果_基于C#弹幕类射击游戏的实现——(二)渲染