開始 |
以圖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的需求和有關數據庫設計的內容,可能描述的不夠詳細具體。在前面的內容,大部分我都是用圖形描述,而使用文字描述的地方很少。我覺得通過圖形,有時候比文字更直接,更有效。