我是一个系统工程专业的学生,我所有的老师和朋友(实际上在这个领域工作)都说,最好在数据库中实现尽可能多的逻辑(查询、视图、触发器、T-SQL等等)。我觉得把它写在密码里比较好。
他们的理由是:
我的理由是:
发布于 2016-04-01 19:29:16
有关前面的讨论,请参见数据库应该实现多少业务逻辑?。
一般来说,每个人都希望在自己控制的层面上完成任务。因为那样他们就能控制它。
每个数据库供应商都希望人们将尽可能多的逻辑放入数据库中。因为那会把你锁在数据库里。理由是,如果多个应用程序使用相同的数据库,它们将重用代码。
然而,程序员显然不同意。数据库提供了糟糕的编程选项。将代码部署到数据库很困难。数据库缺乏用于修订控制、交互式编辑、部署和单元测试的基本工具。存储过程往往涉及可怕的远程调试操作。让多个应用程序访问同一个数据库已经变得不那么常见了。如果你要做一些事情,最难解决的瓶颈就是你的数据库。
我的偏见很明显。我是个程序员。
但是我已经编程了近20年,主要是作为一个负责数据的后端程序员。我已经多次看到将逻辑移到数据库中的论点。我见过这样做的系统和避免它的系统。我不得不迁移数据库、迁移代码库等等。
最糟糕的混乱总是发生在数据库中的业务逻辑。它们总是最难修复的。我可以说,虽然我多次遇到这样的说法:“我们将逻辑转移到数据库中以提高性能”,但是如果有一个干净的规范化数据模型、良好的索引、数据库前面的缓存层以及用现代编程语言实现的健全的算法,性能几乎总是会更好。
发布于 2016-04-01 19:52:33
我非常坚定地认为,如果可能的话,业务逻辑应该保存在软件层,而不是数据库层。请注意,在任何可能的情况下,总是远远不够。
这两种方法都有很强的论据,而且像往常一样,在决定哪一种更合适的选择之前,要用工程上的良好判断来决定每个项目应该有多少权重。
(当其他人在评论中提出建议时,可以将它们添加到列表中)
数据库处理业务逻辑的
处理业务逻辑的软件层的
作为一名经验丰富的专业开发人员,需要快速修复以改善应用程序延迟,可以选择将一些缓慢运行的业务逻辑迁移到数据库上的存储过程和/或实现慢进程的缓存。
但是,基于数据库的业务逻辑有一个严重的问题。如果您的应用程序需要大规模扩展,那么总是更喜欢可以扩展的系统/进程(我的意思是,您可以在处理池中添加更多的服务器)。SQL数据库只能扩展(您需要找到更强大的服务器来替换现有的服务器)。如果您的应用程序具有大量的数据库业务逻辑,那么您将更早地遇到这个问题。
发布于 2016-04-02 00:34:54
在支持数据库的论点中缺少两个非常重要的要点:
但是,在反向数据库的论点中也遗漏了一些非常重要的要点:
概括地说:
https://softwareengineering.stackexchange.com/questions/314490
复制相似问题