数据库基础知识:理论、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查询语句,减少不必要的数据扫描和计算。
    • 合理设计表结构:根据数据的使用情况合理设计表结构,如适当的数据分区和归一化处理。

可扩展性原则

  • 可扩展性:数据库设计应具有良好的可扩展性,能够适应业务需求的变化和数据量的增长。例如:
    • 支持水平扩展:能够通过增加服务器数量来提高系统的处理能力。
    • 支持垂直扩展:能够通过升级服务器的硬件配置来提高系统的性能。
相关推荐
Mr.Daozhi39 分钟前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具
小程故事多_801 小时前
Claude Code自定义workflow skills用法
数据库·人工智能·智能体
大鹏说大话1 小时前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
夏贰四1 小时前
数据建模工具如何筑牢数据根基?数据建模工具怎样落实标准体系?
数据库·数学建模·数据建模工具
程序猿阿伟3 小时前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
二等饼干~za8986683 小时前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
数据库小学妹3 小时前
HTAP混合负载架构:如何用一个数据库同时搞定交易和分析
数据库·经验分享·架构·dba
wuxinyan1233 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
Elastic 中国社区官方博客3 小时前
Elastic 线下 Meetup 将于 2026 年 7 月 26 号下午在深圳举行
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
YL200404263 小时前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis