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

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

相关推荐
老邓计算机毕设5 分钟前
SSM危险品运输车辆信息管理系统b2z1o(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架
MuYiLuck21 分钟前
redis持久化与集群
java·数据库·redis
卓码软件测评33 分钟前
软件数据库测试:【数据库质量保障:从单元测试到性能优化】
运维·数据库·测试用例·压力测试
LilySesy41 分钟前
ABAP+在select的时候,可以A=B A=C B=C这样子JOIN吗?
数据库·sql·ai·excel·sap·abap
升鲜宝供应链及收银系统源代码服务1 小时前
升鲜宝生鲜配送供应链管理系统--- 《多语言商品查询优化方案(Redis + 翻译表 + 模糊匹配)》
java·数据库·redis·bootstrap·供应链系统·生鲜配送·生鲜配送源代码
JH30731 小时前
Redis 中被忽视的“键过期策略”与内存回收机制
数据库·redis·缓存
Microsoft Word1 小时前
Redis常见面试题
数据库·redis·缓存
bing.shao1 小时前
mongodb与redis在聊天场景中的选择
数据库·redis·mongodb
dudke1 小时前
c#实现redis的调用与基础类
数据库·redis·缓存
苦学编程的谢1 小时前
Redis_7_hash
数据库·redis·哈希算法