簡體   English   中英

什么是最好的靈活性,為什么? 使用db視圖,db表,存儲過程。 和表中的對象

[英]What is best flexibility and why? Using db views, db tables, stored proc. and objects in tables

我想知道使用db視圖,db表,存儲過程的最佳實踐。 表格中的對象......其中哪一個更靈活,為什么,你能解釋一下嗎?

每個工具都有其用途 您的選擇取決於應用程序的性質,安全性,性能和敏捷性要求。

如今,許多程序員使用數據訪問層( DAL來做這類事情。 許多DAL允許您指定要調用的視圖和存儲過程。 但您也可以直接對表運行查詢,而無需存儲過程或視圖。

除非您使用對象數據庫,否則您將處理而不是對象。 現在大多數應用程序都使用基於表的數據庫系統, 因為它們非常常見 ,您可以使用DAL來管理對象 - 關系阻抗不匹配

當需要高性能時使用存儲過程 ,並且需要在數據庫本身上完成編程事務(可能添加時間戳值,或者添加/減少子記錄)。 良好的DAL將提供高性能,而不需要使用存儲過程。

視圖用於管理數據庫與數據使用者之間的接口。 特別是,出於安全目的,可以過濾數據。 在大型數據庫方案中,DBA設計並創建表,並管理用戶允許用於訪問數據的視圖和存儲過程。

如果您正在尋求最大的靈活性,那么您需要做的大部分工作都可以在DAL中完成,而無需視圖或存儲過程。 但同樣,這取決於您的應用程序的要求。 我會說,您的應用程序和用戶群越大,您​​在應用程序中使用視圖和存儲過程的可能性就越大。

我會說,在大多數情況下,存儲過程是90年代的遺留物:

  • 完全依賴於數據庫
  • 通用編程的糟糕語言選擇,無論是plpgsql,t-sql還是別的
  • 很難調試
  • 低代碼可伸縮性,與任何過程編程語言共享的問題
  • 代碼版本問題

這並不是說它們(如觸發器,視圖和規則)沒有任何東西可以給出:大規模報告和數據聚合是它們處理得相當好的任務的一個例子。 對於其余部分,邏輯更好地放置在業務邏輯層(服務,域實體......等等)中,其中有各種工具和更高級的編程范例可用。

同樣適用於觀點和觸發器。

在例如Java環境中,JPA在90%以上的時間內做得更好:

  • 學習一種查詢語言並將其應用於任何數據庫
  • 業務邏輯更集中於應用程序中的一個位置BLL
  • 代碼更易於閱讀和編寫,並且更容易找到理解它的人
  • 可以在單個代碼單元中表達跨越多個數據庫的邏輯

...而這樣的例子不勝枚舉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM