数据库重构探讨系列
(1) 基础
1、数据库重构分成6类:
2、数据库味道
与“代码味道”概念相似,代码味道是代码中出现常见问题,表明需要进行重构。
数据库味道表明数据库需要重构。这些味道包括:
(1) 多用途的列
如一个列被用于多种用途,就可能存在额外的代码来确保源数据以“正确的方式”使用,这些代码常常会检查一个列或更多其它列的值。
比如:
某列用于存储某人的生日,如果此人是顾客的话。假如此人是公司雇员,此列则用于存储入厂日期。
(2) 多用途的表
如一个表被用于存放几种类型的实体,就可能存在设计缺陷。
例如:
某个表Customer同时存放了人和公司的信息。
(3) 重复的数据
重复的数据对操作型数据库来说是一个严重的问题,因为如数据存放在几个地方,不一致的机会就增加了。
(4) 列太多的表
当一个表包含太多的列,则说明这个表缺乏内聚。
比如:
Customer表包含了一些列,存放了3种不同的地址(发货地址、账单地址、公司地址)或几个电话号码(家庭电话、工作电话、手机号等),你可能需要将这种结构进行标准化处理,加入Address和PhoneNumber表。
(5) “智能”列
“智能”列是这样一种列,其中数据的不同位置代表不同的概念。
例如:
客户ID的前4位数字代表客户的开户行,则客户ID就是一个“智能”列。因为你会解析它以取得更细粒度的信息,如开户行ID。
3、数据库重构
数据库重构是一种数据库实现技术,与代码重构相似,对数据库Schema进行重构,使得在上面增加东西变得容易。
上图提供了一些关键开发活动的高层视图,这些活动发生在涉及对象和关系数据库技术的现代项目中。需要在这些活动之间来回迭代。
数据库重构是演进式数据库开发的一个重要组成部分。还需要采用演进/敏捷的方式进行数据建模。
耦合越厉害,就越难重构。代码重构、数据库重构均是如此。
最简单的场景:单应用数据库。因为数据库Schema只与它本身和一个应用相耦合。
而在多应用的数据库架构中,你的数据库Schema可能与应用源码、持久框架、ORM工具、其它数据库(提供复制、数据抽取/加载等)、数据文件Schema、测试代码,甚至数据库自身等耦合在一起。
减少涉及数据库的耦合的一种有效方式是封装对数据库的访问。让外部程序通过持久层来访问数据库,可以实现对数据库访问的封装。
持久层有多种实现方式:
(1) 通过数据访问对象DAO,它实现了所需的SQL代码;
(2) 通过框架;
(3) 通过存储过程;
(4) 通过Web服务。
永远也不可能把耦合降到0,但肯定可以把它降到能管理的程度。
分享到:
相关推荐
1、数据库重构分成6类: 2、数据库味道 与“代码味道”概念相似,代码味道是代码中出现常见问题,表明需要进行重构。 数据库味道表明数据库需要重构。这些味道包括: (1)多用途的列 如一个...
【方法】采用系统分析法,对学术期刊服务重构框架,即服务目 标、服务功能和服务链重构等方面展开系统论述,并在此基础上探讨服务重构路径。【结果】学术期刊移动化服务目标是提 供用户友好型、适应移动社交场景的...
对在分布式环境下的Oracle数据库实现数据同步时,涉及的几个主要问题进行探讨,通过日志分析方法,分析了日志文件的归档,采用LogMiner对Oracle归档日志进行解析,解析和重构归档日志中的SQL语句等问题。设计了一个分布式...
然后着重讨论敏感关联规则隐藏技术和分类规则隐藏技术,接着探讨方法的评估指标,最后归结出后续研究的个方向数据修改技巧中基于目标距离的优化测度函数设计、数据重构技巧 中的反向频繁项集挖掘以及基于数据抽样技巧...
在此基础上,着重探讨了基于组件继承与置换的特征重构技术,提出了最大化特征重构策略并给出了一种组件置换算法.最后通过构造原型系统进行了用户需求识别实验以及风格特征重构实验,对所提出的理论、策略和算法等进行了...
11、数据库核心技术探讨 PolarDB云原生数据库技术揭秘 12、腾讯云基础软件创新实践专场 腾讯云大数据tbds在私有化场景万节点集群的实践 13、微服务 & 服务治理 Dubbo3 落地实践及其 Mesh 解决方案 14、云原生时代的...
主要内容 1讲解变量、表达式、流程控制、函数、调试和错误处理 2涵盖面向对象编程、类、类成员、Web编程、Windows编程和Windows窗体等主题 3阐述代码导航、IntelliSense、重构和代码修复等增强功能如何帮助你更快捷...
一、前言 本文以一个教学网站的建设思路为例,探讨...(一)系统用例图 分析网站的系统目标后,我们首先具体化系统功能,形成一张用例图,定义一系列的可重构组件,以指导随后的开发工作。图1UseCasepicture (二
.net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下同时连接SqlServer和Oracle的一些体会 XML XPath XPath最通俗的教程(ZZ) XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML...
15.4.4 再次探讨HttpClient的POST请求 395 15.5 云端应用案例优化 400 本章小结 404 第16章 Google Map和定位服务 405 16.1 MyMap服务系统案例 405 16.2 Android Google Map 406 16.2.1 申请Google Map ...
Java 提供了丰富的API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用,甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在真正可复用的面向对象编程中...
Java 提供了丰富的API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎 变成了类似积木的简单"拼凑"和调用,甚至有人提倡"蓝领程序员",这些都是对现代编 程技术的不了解所至. 在真正可复用的面向对象编程...