2012-10-10 94 views
0

我的當前模式如下所示:哪種模式更改方案?

ID | DisplayVal 
-- ---------- 
1  1-H-3 
2  2-H-3 
3  3-J-4 

在上述中,ID字段是IDENTITY INT字段,它也被用作和終端用戶account IdDisplayVal是他們在屏幕上看到的。

一位新客戶提供了他們自己的Account Id值,但他們是alpha-numeric,所以他們不能進入IDENTITY字段。這裏是我的情景:我正在尋找一個場景,可以提供最好的maintainabilityend user experiencemagnitude and impact of changestesting/QA impact

我的第一個場景是添加一個Account Number列,該列將爲VARCHAR(x),並容納所有類型的Account Numbers。它應該是這樣的:

ID | DisplayVal | AccountNumber 
-- ---------- ------------- 
1  1-H-3   1 
2  2-H-3   2 
3  3-J-4   3 
4  h389    h389 
5  h-400-x   h400 

在上面,在第一客戶端的情況下,seeded Identity這是Account Id將被複制到Account Number,但對於其他客戶端,仍然會有一個seeded Identity創建,但他們的Account Number會有所不同,它可能會或可能不會匹配Display Value

我的第二個方案是,不添加提供Account Number,我會關掉IDENTITY INSERT任何列,爲客戶和插入新的ID的,然後打開身份插回。如果客戶沒有提供Account Number,我會自動生成一個,顯然是爲了避免碰撞。

第三種情況基本上是將新的Account Number作爲legacy Account Number併爲所有新記錄創建新的標識值。這將要求最終用戶熟悉新的Account Number。這可能是最簡單的,但不確定是否有任何缺點。

如果還有另一種情況,你知道在這種情況下可以很好地工作,請告訴我。

回答

0

您不應使用業務密鑰(如帳戶ID)作爲身份。創建一個新的ID列,並使用自動增量字段或GUID填充它。您的用戶或與您系統交互的其他系統不應該知道/取決於此值。