首先,不要再试图用面向对象的术语来考虑数据库。面向对象编程的原则根本不适用于关系数据库。
从业务角度来看,共享数据库是一件非常好的事情。存储必须在它们之间快速传输的信息的多个数据库变得比您的数百个对象要复杂得多。在企业应用程序之间保持一致的数据是无价的。如果 GE Corp 和 General Electric Corporation 真的是两个数据库之间的同一实体,那么试图调和可能是一场噩梦。
重构数据库是一个不错的目标,但实际上它非常复杂。除非您有需要解决的主要性能问题,或者除非您愿意致力于识别所有可能受更改影响的代码的过程,否则不要这样做。即便如此,考虑一下您是否知道所有可能更改的代码(这是数据库人讨厌、讨厌、讨厌动态代码的原因之一!)。
通常,重构的最佳方式是添加更改并开始转换为使用新字段、sp 等,同时将旧字段保留在原位,直到设定的到期日期。由于您处于年度周期,因此您需要在很长一段时间内管理这些日期。要查看是否正在使用 sps,您可以识别您不确定的那些,并向它们添加一些代码,以便在每次运行时插入到表中。如果在您的整个年度周期之后,它们还没有运行,您可以安全地消除它们。周期可能会更短,具体取决于 sp。
如果我正在编写仅每年运行一次的内容,我通常会在 sp 名称中添加“年度”一词。但这在您所在的位置可能并非如此,但是 sp 的功能应该让您了解它是否应该只定期运行。我不希望 usp_send email proc 每年只运行一次,但我可能希望 usp_attendance_report 可能不会经常运行。当然,正如我所说,我会将其命名为更像 usp_annual_attendance_report 的名称,您可以考虑继续做这种事情。
但是请注意,您所做的任何重构都必须在很长的周期内进行,以确保您不会删除您需要的内容。如果您的代码在源代码控制系统中(并且所有数据库表、sp、视图、UDF、触发器等都应该是),您可能可以消除一些事情,如果它们失败了,您可以立即将它们放回原处。再次,我会检查对象以确定消除它们可能存在的风险。
当然,如果您有良好的自动化测试,消除开发中的某些内容并运行测试可以帮助您确定是否仍在引用某些内容。
如果您正在寻找一种简单的重构方法,我不知道有哪一种。重构数据库是一项耗时、有风险的活动,并且对于愿意为此付费的权力而言,它可能没有显示出足够的改进。
一本关于重构数据库的好书是:http ://www.amazon.com/Refactoring-Databases-Evolutionary-Addison-Wesley-Signature/dp/0321293533