當對照資料表內的項目更動名稱,但是又需要保留舊有名稱的解決辦法。   Leave a comment

問題描述:

在資料庫中有部門資料表,負責記錄組織內所有部門。有許多資料表示參考該部門資料表中的部門編號。因組織變動,一些部門的名稱與部門層級有異動,但又必須保留舊有部門資訊。因為有許多歷史資料,必須保留舊有部門名稱,以方便未來查詢使用。希望能夠使用新的部門編號,可以查詢到舊有部門的資料。

舉例來說: 某部門名為 台北進修部教務組(0001) 要改名為 台北教務處進修組(0010),但在歷史資料中的部門編號皆參考 台北進修部教務組(0001),在更名後,原先部門名稱 台北進修部教務組(0001) 不再使用,在查詢歷史資料的時候,使用新的部門名稱 台北教務處進修組(0010) 作查詢的時候,也能夠將有參考到原先部門名稱 台北進修部教務組(0001) 的資料也一併查詢出來。

解決辦法:

有兩種解決方案

  1. 直接將舊有項目改變名稱,但不改變編號
  2. 把新的項目新增到對照資料表,增加一個欄位來記錄新項目與舊項目的關聯。

 

第一種解決方案無法保留原先的項目名稱,因此無法解決此次需求。

第二種解決方案如下:

在對照資料表中需增加一個欄位,負責記錄該項目所對應新項目的編號。如果該項目是最新的項目,則此欄位記錄項目本身的編號。

 

以下為測試案例:

在資料庫中存在兩個表格

  1. Tb_Dep    部門資料表,負責記錄部門。
  2. Tb_New   最新消息資料表,會紀錄是由哪個部門所張貼。

DB Schema 如下表所示

Tb_Dep

PK 資料行名稱 資料型別 長度 是否允許NULL 欄位描述
DepNum char 4 部門編號
  DepName varchar 30 部門名稱
  DepNext char 4 所參考新部門
  DepRemark text 16 備註

 

Tb_New

PK 資料行名稱 資料型別 長度 是否允許NULL 欄位描述
NewNum int 4 最新消息編號
  NewTitle varchar 100 最新消息標題
  NewContent text 16 最新消息內文
  DepNum char 4 張貼部門 (參考部門編號)

 

資料表中的資料範例:

Tb_Dep

部門編號 部門名稱 所參考新部門 備註
0001 台北進修部教務組 0010 更名已停用
0002 電算中心 0002  
0010 台北教務處進修組 0010 原先為  "台北進修部教務組"

 

Tb_New

最新消息編號 最新消息標題 最新消息內文 張貼部門 (參考部門編號)
1 教務公告 教務公告測試 由原先的部門(尚未更名)所發出公告 0001
2 教務公告(新) 更名後的部門所發出的公告 0010
3 電算中心公告 電算供新公告1 0002
4 電算中心公告 電算中心公告3 0002
5 教務處更名公告   0003
6 教務公告(新)2 更名後的部門所發出的公告 0010
7 教務公告(新)3 更名後的部門所發出的公告 0010
8 教務公告2 教務公告測試 由原先的部門(尚未更名)所發出公告 0001

 

必須修改 JOIN 的相關文法查詢部門所參考的欄位

JOIN 的相關文法

    原本 Tb_New 的SELECT 為   

SELECT *

FROM Tb_New INNER JOIN Tb_Dep ON Tb_New.DepNum=Tb_Dep.DepNum

WHERE Tb_Dep.DepNum='<部門編號>’

   必須修改為

SELECT *

FROM Tb_New INNER JOIN Tb_Dep ON Tb_New.DepNum=Tb_Dep.DepNum

WHERE Tb_Dep.DepNext='<部門編號>’

 

查詢部門所參考的欄位

原本 Tb_Dep的SELECT 為   

SELECT *

FROM Tb_Dep

WHERE Tb_Dep.DepNum='<部門編號>’

   必須修改為

SELECT *

FROM Tb_Dep

WHERE Tb_Dep.DepNext='<部門編號>’

廣告

Posted 2008 年 02 月 18 日 by sfcer0414 in KB

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: