2010-05-04 76 views
7

我有一個表定義爲:使用計算列作爲主鍵的一部分是一個好主意嗎?

OrderID bigint NOT NULL, 
IDA varchar(50) NULL, 
IDB bigint NULL, 
[ ... 50 other non relevant columns ...] 

此表的自然主鍵是(訂單ID,IDA,IDB),但是這是不可能的,因爲IDA和IDB可以爲空(他們可以兩者都是空的,但它們從不同時定義)。現在我對這三列有一個獨特的限制。現在

,事情是我需要一個主鍵,使事務複製,並且我面臨兩個選擇:

  • 創建標識列,並用它作爲主鍵
  • 創建包含IDA或IDB的非空計算列C或如果兩列都爲空,則使用(OrderID,C)作爲我的主鍵。

第二可選接縫吸塵器作爲我的PK將是有意義的,而且是可行的(見msdn link),但因爲我從來沒有見過這種在任何地方進行,我在想,如果他們是一些缺點這種方法。

回答

2

可以爲null的列不符合pk的一部分,因爲pk也必須是唯一的。

另外一個PK不應該是有意義的,因爲價值的含義可能會改變。

表A和B有關係嗎?看看關係數據模型。設計中可能存在錯誤。

OrderID應該是唯一的,因此足夠PK。

相關問題