報表資料庫

2021-04-16 12:23:24 字數 971 閱讀 3632

原文: reportingdatabase

設計      2023年4月2日            bliki

索引如果我採用了

領域模型(domain model)

,如何支援特定的sql查詢呢?

領域模型的要點之一就是在應用資料身上新增重要的操作方法。如果你想為資料生成報表,領域模型可提供大力支援。但是,現存的許多報表工具不支援領域模型,它們都是直接用sql與資料庫互動的。該怎樣處理呢?

首先要對這種特定報表的需求提出質疑。很多情況下,需要乙份特別的報表常意味著恰當合理的需求沒被挖掘出來,一旦用心深入分析,就會發現用報表其實很彆扭,不像你之前想得那麼合適,另外,基於領域模型寫**也能輕鬆生成報表。很多情況下,真正的需求是快速生成報表,客戶並不關心報表到底是怎麼生成的,總之不會想自己敲sql。

話也不能說得太絕對,有一些厲害的使用者偏偏喜歡直接用基於sql的報表工具。這種情況的乙個好對策就是生成乙個「報表資料庫」。所謂報表資料庫,是儲存實際運算元據的資料庫外的另乙個資料庫,基於領域模型編寫**給它填充資料,因此從領域模型衍生出的資料也能填進去。這能帶來以下好處:

報表資料庫的缺點是需要保持它的資料不過時,時限問題可能很麻煩。最簡單的情況是在深夜進行資料重填,很多報表用前一天的資料也能正常運轉,這種簡單辦法就搞定了。如果你需要更實時的資料,可以借助訊息系統實現:對原運算元據庫的任何修改都會通過訊息傳遞給報表資料庫。這種情況更複雜,但能保鮮資料。通常多數報表用不那麼新鮮的資料也無妨,假如確實需要最新資料,就要特別問題特別對待了。

另一種變通方案是利用檢視。檢視封裝了實際運算元據,在檢視層面也無需追求正規化化,但它不能分開實際操作負載和報表查詢負載(還是乙個庫),更嚴重的問題是你被限制在可獲得的那些檢視上,無法再利用領域模型靈活的操作了。

雖然我是通過乙個領域模型的例子引出報表資料庫的,但這種方法適用於任何需要封裝資料庫的情況,許多人認為這類情況是面向服務構架(soa)的目的之一。

進一步討論請參考

eric evans的總結。 

ACCESS資料庫報表

1 報表的主要作用 報表是以 列印 的格式表現使用者的資料的一種方式 報表只能顯示 列印 資料,不能輸入資料 修改資料。2 報表的基本型別 縱欄式報表 式報表 圖表報表 標籤報表 多列報表 主 子報表。3 圖表設計要指定三種字段 系列 資料 軸。4 主 子報表資料來源不需要事先建立關係,主報表最多只...

用邏輯資料庫開發HR報表

應用邏輯資料庫的好處不多說了,比如自帶選擇螢幕,自動許可權檢查,節約時間等等,其實我覺得邏輯資料庫好的地方還有那些小地方,比如很容易修改選擇屏 有進度提示等等。舉個簡單的例項,做乙個list。如果您有過hr開發經驗或者仔細看過hr350這門課,下面就不用看了。1,在程式屬性裡選擇邏輯資料庫pnp,螢...

水晶報表 建立不受資料庫限制的報表 1

一般使用水晶報表進行報表開發時,都要先指定資料庫連線。但是如果我們從事三層開發時,一般是不允許水晶報表直接訪問資料庫的,而是通過你的資料庫處理層返回資料給水晶報表 其實我們可以使用水晶報表中的字段定義作為資料 來徹底擺脫與資料庫的直接聯絡,從而開發出便於發布以及擺脫資料庫限制的報表系統。當然使用該欄...