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

数据库是由一个或多个有组织的数据集合组成,而数据库管理系统(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字段等,即是主键,也可以作为索引。

相关推荐
m0_7482523814 分钟前
MySQL事件功能简介
数据库·mysql
梦幻通灵35 分钟前
MySQL可直接使用的查询表的列信息
数据库·mysql
m0_748230941 小时前
postgresql链接详解
数据库·postgresql
捕鲸叉2 小时前
第01章 07 MySQL+VTK C++示例代码,实现医学影像数据的IO数据库存储
数据库·mysql·vtk
九河云2 小时前
腾讯CDN vs 阿里云CDN:哪个更适合你的业务?
数据库·阿里云·云计算
Jiutwo3 小时前
ClickHouse 入门
数据库·clickhouse
然然阿然然4 小时前
2025.1.20——一、[RCTF2015]EasySQL1 二次注入|报错注入|代码审计
数据库·sql·学习·安全·web安全·网络安全
yngsqq4 小时前
ent.SetDatabaseDefaults()
数据库
Ray.19984 小时前
postgresql的用户、数据库和表
数据库·postgresql·oracle