Sql server 一个数据库中有多少表/存储过程/函数太多?

Sql server 一个数据库中有多少表/存储过程/函数太多?,sql-server,database-design,refactoring,refactoring-databases,Sql Server,Database Design,Refactoring,Refactoring Databases,我对数据库重构感兴趣。我处理的几个数据库没有大量数据,只有几GB,最多只有几十万行。但是,它们有成百上千的表、视图、存储过程和函数,有时甚至有成百上千的表、视图、存储过程和函数。在某些地方,已经实现了使用模式的划分和规则策略,这有助于解决一些查看表的所有权/使用情况的问题。然而,它并没有真正帮助对象耦合 我们都知道这不是一件好事,但我们也知道,至少在一段时间内,这是一件非常有成效的事情,因为数据库中的所有内容都存在。我们只是不像对对象那样对数据库应用 编辑:我应该补充一点,我没有数据库性能问题。

我对数据库重构感兴趣。我处理的几个数据库没有大量数据,只有几GB,最多只有几十万行。但是,它们有成百上千的表、视图、存储过程和函数,有时甚至有成百上千的表、视图、存储过程和函数。在某些地方,已经实现了使用模式的划分和规则策略,这有助于解决一些查看表的所有权/使用情况的问题。然而,它并没有真正帮助对象耦合

我们都知道这不是一件好事,但我们也知道,至少在一段时间内,这是一件非常有成效的事情,因为数据库中的所有内容都存在。我们只是不像对对象那样对数据库应用

编辑:我应该补充一点,我没有数据库性能问题。桌子不大,最大的只有几十万行。没有真正的数据库性能问题;除非数据库模式/逻辑/实现效率极低(例如,需要游标对结果集中的每一行执行存储过程,以便预处理报表的数据)。在你说我应该改变这些之前,这就是重点:我不能,因为数据库已经不再处于可以评估改变影响的状态

显然,在某个时刻,您会说“够了!”并将其划分为多个数据库,这些数据库通过消息、ETL、应用程序层等连接起来


问题是:多少是太多?在你发疯之前,你可以拥有的存储过程/表/函数数量的绝对上限是多少?

我不确定你提到的任何东西是否有神奇的极限。我更喜欢把东西放在一个地方,这样我就不必记住一些记录在一个地方,而另一些记录在另一个地方

我更想知道这些工作是否会影响你的表现?如果不是,为什么要改变呢?除非它以某种可怕的方式影响性能,否则您的客户不会从您的工作中看到任何好处,那么这有什么意义呢


如果您刚买了一台新机器或升级了数据库服务器软件,您的客户可能会得到更好的服务。

首先,不要试图用面向对象的术语来看待数据库。面向对象编程的原理并不适用于关系数据库

从业务角度来看,共享数据库是一件非常好的事情。存储必须在它们之间传输的信息的多个数据库很快就会变得比您的数百个对象复杂得多。企业应用程序之间一致的数据是无价的。试图调和GE公司和通用电气公司是否真的是两个数据库中的同一实体可能是一场噩梦

重构数据库是一个不错的目标,但实际上它非常复杂。除非您有一个需要解决的主要性能问题,或者您愿意致力于识别可能受更改影响的所有代码的过程,否则不要这样做。即使这样,也要考虑是否可以知道所有可能改变的代码(这是为什么数据库用户讨厌、讨厌、讨厌动态代码的原因之一)。p> 通常,最好的重构方法是添加更改,并开始使用新字段、sp等,同时保留旧字段,直到设置的到期日期。因为你是一个年度周期,你需要在很长一段时间内管理这些日期。要查看SP是否正在使用,您可以识别不确定的SP,并向其添加一些代码,以便在每次运行SP时插入到表中。如果在您的全年周期之后,它们还没有运行,您可以安全地消除它们。根据sp的不同,周期可能更短

如果我写的东西只会每年运行一次,我通常会在sp名称中加上“年度”一词。但是,在您所在的位置,情况可能并非如此。不过,sp的功能应该让您知道它是否应该定期运行。我不希望usp_send email proc每年只运行一次,但我可能希望usp_考勤报告可能不会经常运行。当然,正如我所说的,我会把它命名为更像USPYANUALALYAXDATIONS报告,你可以考虑做这样的事情向前推进。 但是要注意,任何重构都必须在一个很长的周期内进行,以确保不会删除需要的内容。如果您的代码在源代码管理系统中(所有数据库表、sp、视图、UDF、触发器等都应该在源代码管理系统中),您可能会消除一些东西,知道如果它们失败,您可以立即将它们放回原处。再次,我将检查对象以确定消除它们可能带来的风险

当然,如果您有很好的自动化测试,那么在dev上删除一些东西并运行这些测试可以帮助您发现是否仍在引用某些东西

如果您正在寻找一种简单的重构方法,我不知道有哪种。重构数据库是一项耗时、高风险的活动,对于愿意为此付出代价的公司来说,这项活动可能没有表现出足够的改进


关于重构数据库的一本好书是:

我没有数据库方面的性能问题。我面临的唯一问题是技术债务。数据库不仅很复杂,而且因为许多领域不再相关而变得模糊。我知道,我读过关于数据库重构的书。我在寻找一些关于生产数据库中典型疼痛程度的指导。我只见过几次,它们看起来都很痛苦,我只是想知道痛苦有多痛苦太痛苦。通常都很痛苦。但是,如果您组织良好,工作认真,一步一步,并且所有数据访问都是通过存储过程控制的,而不是动态查询,那么这是可行的。我知道ORM访问也是可行的,但我没有这方面的经验。一个关键是,如果需要和测试,使一切都易于回滚。那里