【发布时间】:2010-09-18 18:24:47
【问题描述】:
过去 18 个月来,我们一直致力于开发复杂的数据库和客户端界面。我们会定期向此应用程序添加新功能,现在每天都有数十名用户在我们的所有办公室(包括站点和海外)使用。这只是告诉您它是一个带有真实数据库的真实应用程序。
到目前为止,我们仍然不需要编写任何存储过程,除了临时解决客户端版本和更新数据库模型之间的小问题(旧客户端版本不会正确更新新创建的字段,直到大家安装最新版本)。
同样,我们仍然不需要任何触发器。事实上,唯一的 SP 和触发器是系统的,或者是为了复制目的而添加的。
当开发人员认为数据库优化必须反对数据库规范化时,我有一种奇怪的感觉,即 SP 和触发器主要用于补偿数据库设计默认值和/或试图绕过数据库设计规则。
问题在于这些工具非常耗时(无论是开发还是维护)。然后每个开发人员都应该非常小心地使用它们,记住它们是数据库中维护的最“昂贵”的项目。
我们是否可以认为数据库中没有或很少存储过程/触发器是其规范化水平和/或代码维护成本的良好指标?
编辑:
你们中的一些人为触发器和 SP 的使用提供了公平的论据。但我一直认为大部分时间这些工具的使用方式不当或过度。设置了多少触发器来在表字段之间进行一些花哨的更新,或者重新计算总计或其他聚合数据?有多少 SP 用于构建用于报告问题的临时表?这是开发人员使用这些工具的许多情况中的两种,我认为这通常说明数据库设计/规范化缺陷。
其他一些人承认应该严格控制 SP 和触发器的使用。我也觉得有必要。
我必须承认,我正试图找到一些支持的论点,所有这些在我们其他数据库上工作的 SQL 极客都看不起我们,告诉他们的朋友“你知道吗?他们甚至不使用 SP 和触发器!哈哈! "
【问题讨论】:
-
为什么标题中的“目标:”前缀?
-
你是对的。 “目标”是一种“法国式”错误!
-
我不明白您为什么认为使用存储过程来构建临时表以用于报告目的是不好的。有时这是在合理时间内完成报告的唯一方法(尤其是对于非常大的数据库)。
-
好吧,我相信这是因为我们从来不需要这样做!在必须构建临时表的极少数情况下,我们在客户端构建它,然后将其显示在屏幕上(这是一个环保选项),如果需要,从客户端的临时表中打印出来数据。
标签: database-design stored-procedures triggers normalization platform-agnostic