設計上就要思考一下 , 設計的重點
最簡單的方式是如下
部門代碼 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
另外部門 還有一點是 , 有的部門 地點並不在 自己公司 , 而是在別的地點 ,
所以部門主檔有的會加入地址跟電話 或送貨地址
沒有留言:
張貼留言