用戶自定義函數的數據庫設計(DEMO)


開始

以圖1.來描述DEMO的需求:

圖1.

在圖1.設計一個DEMO系統能實現從【源數據】至【目標數據】的數據轉換,轉換過程能讓用戶通過調用自定義函數來實現。

基本流程圖

 

圖2.

圖2.中的"多次調用"並表示多次調用同一個函數,而是可能存在先后調用不同的函數進行數據轉換。

函數f(x)常見的幾種情況

圖3.

圖3.中的列Function,描述各個函數名,列Input描述每函數的輸入變量(參數),列Output描述函數的輸出變量。其中Output部分,存在兩種情況,一種是單一值,另一種是表(記錄集)。在列Content描述函數的具體內容,這里使用省略號來描述其內容,如果含有調用其他函數的,就寫調用對應的函數名。

 

Chen's 數據庫表示法

 

圖4.

圖4. 中的function是object中的其中一種類型對象,在object的屬性object type描述對象類型,值范圍是{table,view,function} 。object的屬性is custom描述是否是用戶自定義的對象(這里is custom=1的時候,object一定是用戶自定義函數). function的屬性function type 有兩個值{scalar, table-valued }.function type與output存在約束關系,當function type = scalar的時候,output屬性一定是一個標值,反之就是表值。

物理模型圖

圖5.

 

數據模擬

圖6.

這里模擬兩種SQL Server實例環境,一個是本地的"MSTEST-PC\SQL2012DE"和遠程的"192.168.163.2\SQLCOM,9101"。因為篇幅問題,這里我只拿兩個數據庫的一些表、視圖、函數來模擬。而且模擬的數據可能與之前的數據庫物理模型圖有些不一樣,我這里只列出一些關鍵信息的內容(字段),而且有幾個表聯合一起顯示,這猶如UI上面呈現給用戶的列表;這樣做的目的是,為了更能讓數據更直觀感,更重要的是方便與其他組織部門溝通。

圖7.

 

 

圖8.

圖8.只有當function type是table-valued function的時候,才有function_return這一部分。當function type 是 scalar function的時候,函數就只返回一個某一類型的值,可以跳躍查看圖10.部分的function_output.

圖9.

 

圖10.

 

圖11.

 

圖12.

圖12. 描述function_content引用到的對象,及哪些對象字段。

 

 

擴展

簡短描述幾個:

  • 雖然前面描述了用戶自定義函數如何設計,涉及到源對象(哪些table,view,function),但少了目標對象(轉換后的結果存在在哪里)。
  • 源對象發生改變,那么如何通知用戶是否修改自定義函數。
  • 用戶自定義函數如何進行版本管理。
  • 如何優化自定義函數。

 

小結

以上的內容只是一個DEMO的需求和有關數據庫設計的內容,可能描述的不夠詳細具體。在前面的內容,大部分我都是用圖形描述,而使用文字描述的地方很少。我覺得通過圖形,有時候比文字更直接,更有效。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM