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

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

相关推荐
小吴编程之路2 小时前
MySQL 索引核心特性深度解析:从底层原理到实操应用
数据库·mysql
~莫子2 小时前
MySQL集群技术
数据库·mysql
凤山老林2 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
就不掉头发2 小时前
Linux与数据库进阶
数据库
与衫2 小时前
Gudu SQL Omni 技术深度解析
数据库·sql
咖啡の猫3 小时前
Redis桌面客户端
数据库·redis·缓存
oradh3 小时前
Oracle 11g数据库软件和数据库静默安装
数据库·oracle
what丶k3 小时前
如何保证 Redis 与 MySQL 数据一致性?后端必备实践指南
数据库·redis·mysql
_半夏曲3 小时前
PostgreSQL 13、14、15 区别
数据库·postgresql
把你毕设抢过来3 小时前
基于Spring Boot的社区智慧养老监护管理平台(源码+文档)
数据库·spring boot·后端