什么是最好的灵活性,为什么?使用db视图,db表,存储过程。和表中的对象

时间:2010-04-12 14:10:30

标签: database stored-procedures orm views

我想知道使用db视图,db表,存储过程的最佳实践。表格中的对象......其中哪一个更灵活,为什么,你能解释一下吗?

2 个答案:

答案 0 :(得分:1)

每个工具has its uses。您的选择取决于应用程序的性质,安全性,性能和敏捷性要求。

现在很多程序员都使用数据访问层(DALs)来做这类事情。许多DAL允许您指定要调用的视图和存储过程。但您也可以直接对表运行查询,而无需存储过程或视图。

除非您使用的是对象数据库,否则您将处理tables而不是对象。现在大多数应用程序使用基于表的数据库系统because they are so common,您可以使用DAL来管理object-relational impedance mismatch

当需要高性能时使用

Stored procedures,并且需要在数据库本身上完成编程事务(可能添加时间戳值,或者添加/减少子记录)。良好的DAL将提供高性能,而无需使用存储过程。

Views用于管理数据库与数据使用者之间的接口。特别是,出于安全目的,可以过滤数据。在大型数据库方案中,DBA设计并创建表,并管理用户可用于访问数据的视图和存储过程。

如果您正在寻求最大的灵活性,那么您需要做的大部分工作都可以在DAL中完成,而无需视图或存储过程。但同样,这取决于您的应用程序的要求。我会说,您的应用程序和用户群越大,您​​在应用程序中使用视图和存储过程的可能性就越大。

答案 1 :(得分:-1)

我想说,在大多数情况下,存储过程是'90年代的遗留物:

  • 完全依赖数据库
  • 通用编程的语言选择不好,无论是plpgsql,t-sql还是别的什么
  • 难以调试
  • 低代码可伸缩性,与任何过程编程语言共享的问题
  • 代码版本问题

这并不是说它们(如触发器,视图和规则)没有任何东西可以提供:大规模报告和数据聚合是它们处理得相当好的任务的一个示例。对于其他部分,逻辑更好地放置在业务逻辑层(服务,域实体......等等)中,其中有各种工具和更高级的编程范例可供使用。

同样适用于观点和触发器。

例如在Java环境中,JPA在90%以上的时间里做得更好:

  • 学习一种查询语言并将其应用于任何数据库
  • 业务逻辑更集中于应用程序中的一个位置BLL
  • 代码更易于阅读和编写,并且更容易找到理解它的人
  • 可以在单个代码单元中表达跨越多个数据库的逻辑

......然后列表继续。