数据库基础知识:理论、E-R图、事务、原则

(5)数据库理论与E-R图

数据库理论(Database Theory)是在创建数据库的过程涉及创建现实世界的抽象模型;将现实世界的概念作为实体表示在数据库中。E-R图(Entity Relationship Diagramming)用于表示数据模型的图形工具/关系的抽象,主要用于数据库设计阶段,通过实体(Entity)、属性(Attribute)和关系(Relationship)来描述数据之间的结构和联系,例如大学生实体、大学课程实体之间存在选修关系,学生实体具有姓名、学号等属性,课程实体有编号、课程名、学分等属性,这个选修关系就表示学生和课程之间的联系,当然学生和课程联系上之后,考完试还会有成绩等属性。

(6)事务

数据库事务(Database Transaction)是指的是一组不可分割的数据库操作序列。事务具有ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),这些属性确保了数据库操作的可靠性和数据的完整性。例如一个银行数据库,需要实现从账户A向账户B转账的功能,这个操作需要确保两个账户的余额更新是原子的,即要么全部成功,要么全部失败,可以将SQL语句集合为事务,将账户A转出和账户B转入作为事务提交。

  • 原子性(Atomicity):在这个例子中,转账操作包括两个更新操作,要么全部成功(账户A扣除100元,账户B增加100元),要么全部失败(如果其中一个操作失败,事务会被回滚,账户余额保持不变)。

  • 一致性(Consistency):事务确保在转账前后,账户A和账户B的总余额保持不变。例如,转账前总余额为1500元,转账后仍为1500元,保证数据库的完整性约束不被破坏。

  • 隔离性(Isolation):如果多个事务同时进行转账操作,隔离性确保每个事务的执行结果不会受到其他事务的干扰。例如,两个事务同时从账户A向账户B和账户C转账,隔离性保证每个事务都能正确地更新账户余额。

  • 持久性(Durability):一旦事务提交,账户余额的更改将被永久保存,即使系统发生故障也不会丢失。数据库系统通过日志记录等机制来保证持久性。

(7)数据库原则

数据一致性和完整性原则

  • 数据一致性:确保数据库中的数据在逻辑上是一致的,没有矛盾。例如,如果一个学生的成绩在不同的表中记录,这些记录应该是一致的。
  • 数据完整性 :保证数据的准确性和可靠性,通常通过约束条件来实现,如:
    • 实体完整性:确保每个表中的每个记录都是唯一的,通常通过主键约束来实现。
    • 参照完整性:确保表之间的关系是正确的,通常通过外键约束来实现,防止引用不存在的记录。
    • 用户定义完整性:根据业务需求定义的特定约束,如成绩字段的值应在0到100之间。

数据独立性原则

  • 数据独立性:指数据的存储与应用程序的逻辑分离,使得数据的修改不会影响应用程序的运行。数据独立性分为:
    • 物理数据独立性:数据的物理存储结构(如存储位置、存储方式)的改变不会影响应用程序的运行。
    • 逻辑数据独立性:数据的逻辑结构(如表结构、字段名)的改变不会影响应用程序的运行。

数据安全性原则

  • 数据安全性:保护数据库中的数据不被非法访问、篡改或丢失。通常通过以下措施实现:
    • 用户认证:确保只有授权用户才能访问数据库。
    • 访问控制:对不同用户设置不同的访问权限,限制用户对数据的访问范围和操作类型。
    • 数据加密:对敏感数据进行加密存储和传输,防止数据泄露。

数据可维护性原则

  • 可维护性:数据库设计应便于维护和更新。良好的数据库设计应:
    • 结构清晰:表结构和关系设计合理,易于理解和修改。
    • 易于扩展:随着业务的发展,能够方便地添加新的数据表或字段。
    • 减少冗余:避免数据冗余,减少数据更新时的复杂性和错误。

性能优化原则

  • 性能优化:设计数据库时应考虑查询和更新的效率,以提高系统的响应速度和处理能力。常见的优化措施包括:
    • 合理使用索引:为经常查询的字段建立索引,加快查询速度。
    • 优化查询语句:编写高效的SQL查询语句,减少不必要的数据扫描和计算。
    • 合理设计表结构:根据数据的使用情况合理设计表结构,如适当的数据分区和归一化处理。

可扩展性原则

  • 可扩展性:数据库设计应具有良好的可扩展性,能够适应业务需求的变化和数据量的增长。例如:
    • 支持水平扩展:能够通过增加服务器数量来提高系统的处理能力。
    • 支持垂直扩展:能够通过升级服务器的硬件配置来提高系统的性能。
相关推荐
IT项目管理28 分钟前
达梦数据库DMHS介绍及安装部署
linux·数据库
你都会上树?36 分钟前
MySQL MVCC 详解
数据库·mysql
大春儿的试验田41 分钟前
高并发收藏功能设计:Redis异步同步与定时补偿机制详解
java·数据库·redis·学习·缓存
Ein hübscher Kerl.1 小时前
虚拟机上安装 MariaDB 及依赖包
数据库·mariadb
笑衬人心。1 小时前
Ubuntu 22.04 修改默认 Python 版本为 Python3 笔记
笔记·python·ubuntu
醇醛酸醚酮酯2 小时前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
GreatSQL社区2 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根2 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql
weixin_438335402 小时前
基础知识:mysql-connector-j依赖
数据库·mysql
小明铭同学3 小时前
MySQL 八股文【持续更新ing】
数据库·mysql