2010-06-20 60 views
3

我以Databases开头。我一直在玩MySQL和Informix,但从未有过真正的生活项目。数据库责任

数据库的真正责任是什么?我们是否应该将存储过程和函数添加到数据库中,还是让它成为没有逻辑的数据存储库?

+1

相关:http://stackoverflow.com/questions/119540/business-logic-database-or-application-layer,http://stackoverflow.com/questions/1473624/business-logic-in-database-versus代码 – 2010-06-20 05:33:31

回答

4

通常认为不要将业务逻辑放在数据库中是很好的做法。主要原因是可维护性。仍然可以使用存储过程,但在这些存储过程中包含业务逻辑会使应用程序更难调试和更新。

在您的数据库中包含业务逻辑也将有效地使您使用那个DBMS,并且不允许数据层独立于您的应用程序。例如,一旦您的应用程序处于运行状态,您可能会遇到一个数据库的性能和可伸缩性问题,但由于散布在整个数据库中的业务逻辑,迁移到更具可伸缩性的数据库最多只会耗费大量时间。

如果业务逻辑保存在应用程序代码(例如java或c#)中,并且数据层使用数据抽象层抽象,并且ORM(如果语言允许),则交换数据库的问题要少得多。

我们应该努力寻求separation of concerns,并且保持db的业务逻辑有助于实现这一点。

编辑:还有一些性能方面的问题可能决定存储过程是保持业务逻辑的好地方。在某些情况下,在数据层(即存储区)中包含逻辑可以减少数据抽象层和数据库之间的多次往返,这可以提高性能。过去我一直在使用这样的系统,因为这个原因,但是我一直觉得很难维护。问题是你可以通过类和过程来查看业务逻辑,并认为这是它,你不会看到如何发生一个特定的错误或过程,然后你会发现存储过程,并看到另一半(当存储介质是1000行时真正的痛苦!)

与许多事情一样,放置业务逻辑的位置取决于您尝试解决的特定问题。

+0

很好的答案。可伸缩性是一个主要问题。性能怎么样? – santiagobasulto 2010-06-20 05:59:52

+0

好点santiagobasulto。我确实考虑过表现,但没有说什么。我已经修改了我的帖子以包含我的想法。 – 2010-06-20 09:14:20

1

我们周围有很多数据可以用于我们。有序的信息收集有助于企业做出更适当的决定。数据库是有序存储的信息。

责任:在一个通常情况下,我们可以说周围有很多信息,有序的信息收集称为数据,这个信息涉及到一个实体,而有序的数据收集是一个数据库,有关的信息一组实体。这些数据库的集合是一个DBMS。数据库的责任是组织信息。

存储过程,功能更像您需要的业务流程,以便收集您想要的数据。

第一出发点,

开始: 在{PostgreSQL的,MySQL和SQL服务器(Express版本)}选择数据库和安装。 了解有关Codd RulesNormal formsGood resource 开始学习SQL,编写查询。 了解涉及模式创建的基础知识。 学习数据库中的过程语言实现。 在SO中提出疑问。

+0

我一直在使用数据库很长一段时间。但我想知道一个真正的数据库是什么。有基于您拥有的DB​​MS的单独选项。例如,在MySQL中,您不能拥有Oracle DBMS的相同功能。这就是为什么我问这个问题,真实的生活问题和解决方案的例子。 – santiagobasulto 2010-06-20 05:57:58

10

数据库的真正责任是什么?

在其核心数据库是存储和检索数据的系统。磁盘上的CSV文件+合适的工具(例如Excel)就是一个简单的例子。另外,数据库可能会提供额外的功能,例如事务控制,数据完整性和安全性。

我们应该增加存储过程和函数以取消数据库,还是让它成为无逻辑的数据仓库?

你想从数据库中得到什么?如果你想要的只是一个“位桶”,那么无论如何,将它存储在磁盘上的普通文件中并称之为“数据库”。如果您想要多一点,请使用适合您需求的产品。如果你想能够使用4GL像SQL查询它,请使用MySQL。如果您想要事务控制,安全性,高级查询功能等,请在适当的情况下使用其他DBMS。无论您选择哪种产品,都可以利用该产品的优势。否则,你会浪费你的时间和金钱。当然,你永远不会使用所有的功能(只有一个子集对你有用),但如果你使用的功能很少,你可能会降级到一个更简单的产品。

如果您正在使用Oracle,您可以在数据库中存储旁边的数据程序和功能(甚至更好,全包)就在那里。真正的问题是,你需要在这些过程和函数中写什么 - 业务逻辑或表示逻辑?个人而言,我通常更倾向于保持业务逻辑接近数据,而表示逻辑是为每个接口定制的。

它可以创建您的数据的API层,这样无论你的应用程序如何访问数据库,他们将得到的是一致的视图,并使用一致的机制,他们将所有的修改。换句话说,不是多次编写业务逻辑(每个接口一次),而是只编写一次,然后在任何地方重新使用它。

有两个原因,我听说过,为什么业务逻辑不应该存储在数据库中:

1可维护性:这是很难改变的。我从来没有真正理解这一个。输入CREATE OR REPLACE PACKAGE有多难?我怀疑这只是不得不学习“另一种语言”的负担。

2.数据库独立性:什么作品在Oracle将不会在其他地方工作。这是一个biggie,和better minds than Iwritten about这一个。基本上,如果你真的需要它是“数据库不可知的”,你将无法使用你购买的数据库的任何高级功能,所以你可以使用最简单/最便宜的一个,你可以找到;在这种情况下,无论如何您都不需要它来处理每个数据库!

+0

#2 Jeffrey的好处。我一直认为'现实世界中的客户什么时候真的想改变DBMS'。到目前为止,我只发现个人喜好成为决定者。 A公司喜欢Sql Server和MS,B公司喜欢什么是非MS解决方案。 #1 - 当业务逻辑既包含常用的特定语言源代码,也包含数据库时,就会出现问题。我以前的系统对此很重要。使用TSQL和VB中的辅助逻辑在sprocs中提供了许多应用程序逻辑。是一个真正的痛苦要保持。 – 2010-06-20 09:07:46

+4

+1“充分利用该产品”。我仍然很疑惑为什么有人会为Oracle设置$$$,然后继续将它降低到最低公分母 – dpbradley 2010-06-20 10:42:02