我的網誌清單

2013年8月4日 星期日

部門主檔的設計

部門主檔 的設計 ,如果是以 像上百人的大公司 , 有階層架構 , 複數組織圖時

設計上就要思考一下 , 設計的重點

最簡單的方式是如下

部門代碼   NVARCHAR(5)
部門名稱   NVARCHAR(40)

但是如果公司有 , 部門及部門之間 上下層級關係的話 , 就不能這樣規劃 , 因為這樣

無法列出 部門與部門之間上下層的關係 ,
例如
                       總公司
        總務部                    財會部
  行政課  人事課       會計課    財務課


像這樣有層關係的部份我們資料表就要設計成

部門代碼         NVARCHAR(5)
部門名稱         NVARCHAR(40)
組織階層         int
上級部門代碼[FK]  NVARCHAR(5)

組織階層是表示自己部門的階層數值 , 最下層的課是0,最上層的公司是3


    總務部,要登錄自己上級部門的代碼 總公司 , 行政課則要登錄自己上層部門的代碼總務部


這樣設計之後再部門別損益計算時 , 可以依照順序 求出課 , 部, 總公司的個別值


開始日 及 結束日

假設每個部門 , 有每個部門負責的業務單據 , 在頻繁異動業務資料的情況下
必需要加入開始日,及結束日的欄位

經常發生組織變更時 , 部門之間還是依照舊的部門輸入資料時 , 到最後
才由系統人員去處理, 為了防止這種錯誤 , 參照部門代碼的程式可以考慮進去

可以像以下這樣子

   INSERT INTO ~
    WHERE  部門代碼  = '部門代碼'
AND 接單日  BETWEEN 開始日  AND 結束日

上面 SQL 是依照  日期 比較麻煩
所以可以依照旗標的方式來設計

INSERT INTO ~
WHERE  部門代碼 = '部門代碼'
AND 現在旗標 = 1

但是這個時後我們必需 在時間日期結束時 , 晚上做批次處理
像下面這樣加入二段  SQL 語法 來執行 旗標的  ON/OFF

UPDATE 部門主檔  SET 現在旗標 = 1
   WHERE  '2013/10/01'
      BETWEEN 開始日  AND 結束日


UPDATE 部門主檔  SET 現在旗標 = 0
   WHERE  '2013/10/01'
      BETWEEN 開始日  AND 結束日

還有另一種設計方式是 用部門主檔 和 舊部門主檔 , 這樣可以分為現役和卸任 , 將資料分為新舊也有人在使用 , 但是要和過去組織參照時必需要用  UNION query



另外部門 還有一點是 , 有的部門 地點並不在 自己公司 , 而是在別的地點 ,
所以部門主檔有的會加入地址跟電話  或送貨地址


沒有留言:

張貼留言