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

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

相关推荐
woxihuan1234563 小时前
SQL删除数据时存在依赖关系_设置外键级联删除ON DELETE
jvm·数据库·python
东风破1373 小时前
DM8达梦共享存储集群DSC搭建步骤
数据库·学习·dm达梦数据库
雪碧聊技术3 小时前
当数据库字段数大于Java实体类属性数时,MyBatis还能映射成功吗?一文详解
数据库·自动映射·mybatis映射机制·java实体类·宽容映射机制
Jetev4 小时前
如何确定SQL字段是否为空_使用IS NULL与IS NOT NULL
jvm·数据库·python
m0_702036534 小时前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
代钦塔拉4 小时前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
2401_846339564 小时前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python
zhaoyong2225 小时前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python
2501_901006475 小时前
C#怎么实现配置热更新 C#如何在运行时动态刷新配置文件不需要重启程序【技巧】
jvm·数据库·python
m0_470857645 小时前
HTML怎么创建响应式图片备选方案_HTML srcset与sizes结构【详解】
jvm·数据库·python