热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析《数据库重构:进化式数据库设计》

最近了解到一个新概念——数据库重构,这让我感到非常惊讶。数据库竟然也可以像代码一样进行重构。为了深入了解这一领域,我特意借阅了《数据库重构:进化式数据库设计》这本书,并在此分享我的学习心得。

最近了解到一个新概念——数据库重构,这让我感到非常惊讶。数据库竟然也可以像代码一样进行重构。为了深入了解这一领域,我特意借阅了《数据库重构:进化式数据库设计》这本书,并在此分享我的学习心得。


数据库重构的概念


数据库重构是指在不改变数据库行为和信息语义的前提下,对数据库模式进行优化和改进的过程。这种重构不仅涉及数据库结构的调整,如表和视图的定义与修改,还包括数据库功能的优化,例如存储过程和触发器的改进。


数据库重构的挑战


与代码重构相比,数据库重构面临更多挑战。数据库结构的任何变动都可能影响到业务逻辑层、用户界面层以及其他相关模块和外部调用程序。此外,数据库内部的函数、存储过程和触发器等也需要同步更新,整个过程复杂且风险高。具体挑战包括:



  1. 除了保持行为语义外,数据库重构还需要保持信息语义的一致性。

  2. 数据库与外部程序的高度耦合使得重构工作更加复杂,特别是多应用数据库的情况。

  3. 目前市场上缺乏专门支持数据库重构的工具,这增加了实施难度。

  4. 数据库设计和开发通常采用传统、串行的方法,未能充分融入敏捷开发的理念。

  5. 团队成员对系统整体架构的理解程度不一,尤其是数据库和应用程序开发的专业知识分布不均,这对有效的数据库重构构成了障碍。


数据库重构的类型



  1. 结构重构: 对表或视图的结构进行调整,如移动列、拆分多用途列等。

  2. 数据质量重构: 改善数据库中数据的质量,如禁止空值、统一数据格式等。

  3. 参照完整性重构: 确保引用完整性,如通过触发器实现级联删除。

  4. 架构重构: 改变外部程序与数据库的交互方式,如使用存储过程替代部分代码。

  5. 方法重构: 优化存储过程、函数和触发器等数据库对象,提高其性能和可维护性。

  6. 替换: 虽然不属于严格意义上的重构,但有时需要对数据模式进行语义上的重大更改。


数据库的“坏味道”


书中列举了一些常见的数据库“坏味道”,这些问题是数据库设计中应尽量避免的:



  • 多用途列: 一个列用于多种目的,可能导致额外的代码来管理数据的正确使用。

  • 多用途表: 一个表存储来自多个数据源的数据,缺乏内聚性。

  • 重复数据: 数据在多个地方存储,容易导致数据不一致。

  • 列过多的表: 表中包含过多的列,表明表的设计可能过于复杂,缺乏合理的数据分类。

  • 行过多的表: 大表会影响查询性能,可以通过垂直或水平分割来优化。

  • “智能”列: 列中不同位置的数据代表不同的含义,建议进行细粒度的字段分割。

  • 害怕变化: 如果对数据库模式的任何更改都感到恐惧,这可能是需要重构的信号。


数据库重构在开发中的角色


作者指出,传统的数据库开发方法往往是串行的,缺乏灵活性。他提倡采用现代演进式技术,如敏捷开发方法,来改善数据库设计和开发过程。书中还提供了一个高层次的开发活动视图,展示了在涉及对象和关系数据库的项目中,如何在不同活动之间进行迭代,以达到最佳效果。


推荐阅读
  • 本文深入探讨了Redis中的两种主要持久化方式——RDB(Redis Database)和AOF(Append Only File),并详细解析了两者的实现机制、优缺点以及在实际应用中的选择策略。 ... [详细]
  • 自SQL Server 2005以来,微软的这款数据库产品逐渐崭露头角,成为企业级应用中的佼佼者。本文将探讨SQL Server 2008的革新之处及其对企业级数据库市场的影响。 ... [详细]
  • 本文通过一个简单的 C++ 示例,深入分析了当使用 `vector::resize` 方法调整向量大小时,对象的构造函数和析构函数被调用的具体情况。示例代码展示了如何创建一个包含自定义类的对象的向量,并通过调整其大小来观察构造和析构的过程。 ... [详细]
  • 本文档详细介绍了2017年8月31日关于MySQL数据库备份与恢复的教学内容,包括MySQL日志功能、备份策略、备份工具及实战演练。 ... [详细]
  • 深入探讨PHP中的输出缓冲技术(Output Buffering)
    本文深入解析了PHP中输出缓冲(Output Buffering)的原理及其在Web开发中的应用,特别是如何通过输出缓冲技术有效管理HTTP头部信息,提高代码的灵活性与健壮性。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • SQL执行计划解析(2) 基本查询的图形执行计划
    SQL执行计划解析(2)-基本查询的图形执行计划(上)某种程度上,学习阅读图形执行计划和学习一门新语言很类似。 ... [详细]
  • Flask框架下MySQL数据库的集成与应用
    本文详细探讨了如何在Flask框架中集成和使用MySQL数据库,通过具体的实例和代码演示,帮助开发者更好地理解和掌握Flask与MySQL的结合使用。 ... [详细]
  • 解决MySQL错误2002:无法建立数据库连接
    本文详细描述了在Digital Ocean服务器上托管的多个WordPress站点突然出现数据库连接错误的情况,并提供了有效的解决方案。 ... [详细]
  • 本文详细探讨了在将 Oracle 11g 数据库导出的 DMP 文件导入到 Oracle 10g 数据库过程中遇到的头验证失败问题,并提供了有效的解决方案。包括手动修改 DMP 文件版本信息的方法及针对大文件的自动化处理工具。 ... [详细]
  • 本文详细介绍了如何在MySQL中设置本地和远程访问权限,包括通过Navicat客户端进行连接测试、修改用户权限、以及设置特定IP或所有IP的访问权限的方法。 ... [详细]
  • 随着Spring框架的不断发展,其灵活性和可选性成为其显著特点。Java EE虽然专注于少数核心技术,但这种专注限制了更多创新解决方案的发展。Spring框架的出现打破了这一局面,不仅简化了Java EE,还通过持续的技术革新,为开发者提供了更多的选择和支持。 ... [详细]
  • MySQL 默认字符集详解与配置
    本文探讨了MySQL数据库中默认字符集的选择问题,特别是对于需要支持多语言环境的应用来说,如何正确设置字符集以避免数据乱码等常见问题。 ... [详细]
  • .NET Core 与 MySQL 的集成:API 和 Entity Framework Core 的应用
    本文介绍了如何在.NET Core 2.2环境中构建一个基于API的应用,并通过Entity Framework Core (EF Core) 连接MySQL数据库。包括项目的创建、必要的NuGet包安装以及数据库上下文的配置。 ... [详细]
  • 在Elasticsearch中,映射(mappings)定义了索引中字段的结构,类似于传统数据库中的表结构。虽然Elasticsearch支持字段的增删,但直接修改字段类型是不允许的。本文介绍了一种通过创建新索引并迁移数据的方式来改变字段类型的方法。 ... [详细]
author-avatar
sbsbsjsv
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有