iT邦幫忙

0

關於 SQL Server 2008 資料表繼承問題

你好,我目前使用的是 MS SQL Server 2008 R2
因為最近在規劃一個比較大的專案,會有非常多的Table都會有相同的特定欄位。
是否可以先設計好一個基礎Table , 然後讓其他會用到這個基礎Table中所有欄位去繼承這個基礎Table。
之後這些Table 就會自動產生 基礎 Table 中的所有欄位。
我在 PostgreSQL 有發現這種功能,蠻好用的,可以省去不少建立和維護資料表的時間,尤其在你的資料庫結構龐大又複雜的時候非常好用。
不過在PostgreSQL 好像沒辦法修改基礎Table中的欄位,就可以同步一次修改所有繼承的資料表中的繼承欄位。
有人在 SQL Server2008 R2 中試過這種方式嗎?
感謝回覆。

2
a802216
iT邦新手 4 級 ‧ 2013-09-24 22:38:31
最佳解答

資料表是否要繼承主要根本是因為系統分析後得出的領域模型而來,所以應該由系統分析來著手;而探討"資料表繼承"主要是因為Martin先生在他的書出提出物件導向系統與資料庫阻抗不匹配,為了讓兩者盡可能的搭配所以有了資料表繼承這一手法,而主要的手法分成三種:

  1. TPH(Table per Hierarchy)
  2. TPT(Table per Type)
  3. TPC(Table per Concret Type)
    這三種手法各有其優缺點,故需要在適當的情境下擇一或是作適當的改變,切莫為了繼承而繼承,否則會應了前輩們常說的一句話"設計太爛,系統就會拿效能懲罰你"
10
summertw
iT邦好手 1 級 ‧ 2013-09-24 10:59:56

你要的功能在SQL Server裡有,它在早期的SQL產品中就有了,不過它不叫繼承,叫模版工程才對。因為它跟繼承的觀念完全不同。
在SQL裡,有一個Model

你只要在裡寫好你要的所有資料表樣版,剩下的開新資料庫動作,系統會自動幫你完成相關資料表的建置工作,完成後,你再自行修改所需的欄位即可。

2
Albert
iT邦高手 1 級 ‧ 2013-09-24 13:42:32

:::舉例來說,A , B , C 三個資料表都必須設計
:::CreateDate , CreateUser , UpdateDate , UpodateUser
:::某些欄位必須修改資料型態或長度(例如:ERP系統中的單號)
既然是大型專案
定要先建立 [資料辭典]
開 Table 的必要欄位是由 [開檔系統],
統一開立 PK/FK/Default Value/Constrain...
Table 的 Internal ID / Web UU ID / Search Key / Search Name
統一系統做好

summertw iT邦好手 1 級 ‧ 2013-09-24 17:30:34 檢舉

版主這種用法,應該算不上大型資料庫..
會較像是那種增加一個客戶(或註冊對象或是什麼加盟商之類的),就要自動於資料庫新增一個對象資料庫。
這種設計的資料庫通常不會太大,但資料庫數量可能會多一些...
其優點為資料單純化,不會受到干擾,出問題也不會影響到其他客源的資料。
缺點,資料庫運作會隨時間、時空的變化而有增減、修正,到時,新增的會享有新的資料政策,而舊有的,將會是你執行上的一大袍伏,尤其是越是久遠的資料,就越難修護,到最後,那些太久遠的資料庫就會失控....

Albert iT邦高手 1 級 ‧ 2013-09-24 22:28:03 檢舉

有些人工作 20年從來不知有 軟體工程的工具可以用

還是手工開 table

有一些小朋友 5, 6 年級的小鬼自認為自己很資深

這真是沒辦法

我要發表回答

立即登入回答