数据库基础知识:记录、表、字段、数据类型、约束、主键、外键、规范化、索引、序列

数据库是由一个或多个有组织的数据集合组成,而数据库管理系统(DBMS )是操作数据库的软件,包括很多人本科上课学过的SQL Server,现在常用的MySQL、Postgresql等,用于提供数据的存储、访问、运行和维护等。学习数据库需要了解一些数据库相关的名词定义,包括:Table 表,Columns/Fields 列/字段,Records 记录,Datatypes 数据类型,Database Theory 数据库理论,Normalisation 规范化,Indexs 索引,Sequences 序列,Entity Relationship Diagramming 实体-关系图 (E-R图),Constraints 约束,Primary Keys 主键,Foreign Keys 外键,Transactions 事务。

我在学习中,主要参考QGIS官方教程15.1. Lesson: Introduction to Databases 开展定义的简单解释,参考网址:**https://docs.qgis.org/3.34/en/docs/training_manual/database_concepts/db_intro.html**。

(1)记录、字段、表

在大多数的数据库中,表(Table)可以结合我们初高中成绩单的样式去理解。

姓名 语文 数学 英语
张三 80 85 88

一列是一个属性/字段(Field),每列的类型都相同,例如第一列都是姓名、第二列都是语文成绩、第三列都是数学成绩、第四列都是英语成绩;一行就是一个记录(Records),例如:张三 80 85 88便是一个记录。在SQL中,表也可以被称为 relation 关系。

(2)数据类型

在Postgresql中提供了大量的数据类型(Datatypes),我们可以使用数据类型来限制每列的信息类型,例如限制第一列的人名都是字符串,第2、3、4列的成绩都是整数。常用的数据类型包括:String 字符串,Integer 整数,Real 6位十进制数(常用于存储具有小数部分的数值),Data 日期,Boolean 布尔类型。当然,还包括null,也就是空。比如李四生病缺考,就可以将其成绩为空。

(3)约束、主键、外键

数据库约束(Constraint)用于确保关系/表中的数据与建模者对数据应如何存储有一个较为一致的看法,例如性别约束为男或者女。主键约束(Primary Key Constraint)即:每个表必须有一个主键,主键是表中唯一标识每条记录的字段或字段组合,主键要坚持唯一性和非空性,例如在成绩单中,姓名作为主键的话,那么便不能重名,也不能是空的。外键(Foreign Key)约束定义在一个表(称为子表或从表)的字段上,该字段的值必须对应另一个表(称为父表或主表)的主键或唯一键的值,例如有班级列表、学生列表,学生列表中学生的所在班级必须在班级列表中有对应的值。

(4)规范化、索引、序列

数据库规范化(Normalization)主要是为了减少数据存储的冗余,提高数据完整性。规范化包括不同的范式。一个关系模式处于第一范式,它的所有属性都是不可分的基本数据项,即每个字段的值都是原子性的,不能进一步分解;一个关系模式处于第二范式,如果它处于第一范式,并且所有非主属性完全依赖于主键;一个关系模式处于第三范式,如果它处于第二范式,并且所有非主属性不传递依赖于主键,也就是非主属性不能依赖于其他非主属性。假设有一个员工表,包含员工ID、部门名称和部门经理姓名。如果部门名称依赖于员工ID,而部门经理姓名依赖于部门名称,那么这个表就不符合3NF。BCNF(Boyce-Codd Normal Form)例如:有一个学生选课表,包含学生ID、课程ID和教师姓名。如果存在函数依赖"课程ID → 教师姓名"和"教师姓名 → 课程ID",那么这个表就不符合BCNF。需要将教师姓名移到单独的课程表中。

数据库索引(Index)是用于提高数据检索效率的一种数据结构,类似于目录,是数据库表中一个或多个列的值的集合,用于快速查找表中的数据行。同样,索引也是具有多种类型,例如:单列索引、多列索引、唯一索引(主键索引)、全文索引、空间索引等。

数据库序列(Database Sequence)是一种数据库对象,用于生成按一定规则递增或递减的数值序列。序列通常用于为表中的字段自动生成唯一值,如主键值、订单编号等。例如在ArcGIS中创建点要素,会自动生成FID字段或者OBJECTID字段等,即是主键,也可以作为索引。

相关推荐
-SGlow-5 小时前
MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
linux·运维·服务器·数据库·mysql
明月5666 小时前
Oracle 误删数据恢复
数据库·oracle
♡喜欢做梦7 小时前
【MySQL】深入浅出事务:保证数据一致性的核心武器
数据库·mysql
遇见你的雩风7 小时前
MySQL的认识与基本操作
数据库·mysql
dblens 数据库管理和开发工具7 小时前
MySQL新增字段DDL:锁表全解析、避坑指南与实战案例
数据库·mysql·dblens·dblens mysql·数据库连接管理
weixin_419658317 小时前
MySQL的基础操作
数据库·mysql
不辉放弃8 小时前
ZooKeeper 是什么?
数据库·大数据开发
Goona_9 小时前
拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统
数据库·python·sql·excel·pyqt
程序员编程指南9 小时前
Qt 数据库连接池实现与管理
c语言·数据库·c++·qt·oracle
幼儿园老大*11 小时前
数据中心-时序数据库InfluxDB
数据库·时序数据库