2008-11-20 55 views
2

可以說我有一個SQL Server 2000數據庫稱爲TRANSACTIONTYPE表:數據庫維護ID相匹配的客戶端軟件枚舉該

CREATE TABLE [dbo].[TransactionType](
    [ID] [int] NOT NULL, 
    [Description] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
CONSTRAINT [PK_TransactionType] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
) ON [PRIMARY] 
) ON [PRIMARY] 

然後我有一個名爲TransactionTypeID列事務表,鍵控掉的TransactionType表的ID列。

我的.net客戶端應用程序負責插入事務記錄並指定事務類型。我的第一個想法是定義一個枚舉,將枚舉轉換爲一個整數並將該值傳遞給數據庫。問題在於,有人可能會進入數據庫並更改TransactionType表中的一個ID,導致數據庫中的ID與客戶端應用程序枚舉中的ID不同步。

所以,在我漫長的思考之後,我的問題是,是否有設計模式/技術用於解決這個問題?

回答

1

您可能會考慮使用鬆散綁定(未強制執行)到子表的編碼系統。讓我們說這是一種顏色,你的孩子的桌子可以看起來像下面這樣。

ID | Name 
------------ 
GRN | Green 
PURP| Purple 
YELL| Yellow 
RED | Red 

現在你有一個ID,如果你不顯示聯接,是非常有用的人,如果你需要一個更精確的/詳細的「名稱」值,您可以加入或恢復。所以很顯然,當你查看父條目(假設它是水果)時,你不需要執行連接。此外,還有從來沒有一個很好的理由來改變ID

ID | Name | Color 
----------------- 
1 | Banana | YELL 
2 | Apple | RED 
3 | Cherry | RED 

記住這個系統,如果您打算加入許多孩子類型的不應該使用,但如果你只打算有十幾種,它可以是一個很好的捷徑。如果你打算有很多「成果」,這也不是一個好主意,因爲CHAR/VARCHAR不是一種有效的方式來存放你的數據。但是對於99%的數據庫,這種方法將會很好。