2012-05-01 42 views
0

我有一個運行的應用程序,其實體可能是:CustomerType1,CustomerType2和CustomerType3。跨多個實體的同步ID

所有三個CustomerType實體可能具有完全不同的信息,但它們都有一個CustomerID字段,它是一個整數。

我想弄清楚如何設置東西,以便無論創建哪種類型,CustomerID在所有三種類型中始終是唯一的,並且仍然是一個整數。

例如,創建以下將導致以下的CustomerID

CustomerType1 - 1

CustomerType1 - 2

CustomerType1 - 3

CustomerType2 - 4

CustomerType1 - 5

CustomerType3 - 6

CustomerType1 - 7

什麼是接近最好的方法?

回答

0

2種可能的方法:

  1. 用於所有客戶類型的單個表具有「鑑別」字段以跟蹤每個客戶類型,包括在客戶標識自己的身份。
  2. 使用外部表管理將CustomerID創建爲標識字段。

第一種方法具有對如下面的教程中介紹的實體框架直接支持的優勢:

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

注意,雖然你的客戶類型可能包含不同的數據,這種方法儘管浪費了數據庫空間,但從長遠來看,可擴展性方面最終可能會更便宜。在您的業務層,客戶類型可以簡單地忽略不屬於他們的字段。

第二種方法可能最適合添加到太難改變的現有應用程序。從長遠來看,以這種方式跟蹤ID需要做更多的工作。首先,您的業務層將需要從一個表中獲取ID,以便插入到另一個表中,這對於大型數據集來說可能很昂貴。根據業務層的要求,可能還會出現一些情況,您必須放棄未使用的CustomerID,並且該系統根本不存在於系統中(例如,您將跳過CustomerID 58到CustomerID 60)。

0

您的方法類似於具有唯一ID的網絡數據庫中的相同實體類型。

通常,許多開發人員使用UID或相關類型。它是一種具有64位,128位或更多位數的類型,並且是隨機自動生成的。如果你在不同的機器上使用相同的數據庫,它幾乎不可能獲得相同的價值。

某些數據庫將該值存儲爲字符串而不是整數。

如果您只有一個帶整數鍵的表,那麼您如何生成主鍵值?自動?您是否在代碼中生成了該值,並稍後將其分配給了主鍵字段?

解決方案1 ​​

如果你的數據庫支持U.I.D.或O.I.D.或唯一標識符,作爲整數自動生成,使用它們。

解決方案2

如果你的數據庫支持U.I.D.或O.I.D.作爲varchar/string,或者你使用的數據庫引擎或者程序有一個生成UID的函數,你可以使用該函數,將結果值從字符串轉換爲整數,(剝離分隔符如「 - 」),並存儲在一個整數主鍵字段。

摘要

許多開發商寧願讓數據庫引擎自動生成主鍵,插入新記錄時。在這種情況下,喜歡這個,更好的是,在代碼中生成主鍵,並直接賦值。由於您使用的是「實體框架」,因此我忽略該庫如何處理主鍵。

乾杯。

+0

不幸的是,我們需要ID是一個增量整數。應用程序中已經有CustomerType1設置,但我們正在添加第二個。 –