2015-12-02 57 views
0

我想知道我對代理鍵的理解是否正確。需要高級幫助來驗證我對關係數據庫設計中關於代理鍵的理解

E.g:

下面是我的示例數據庫設計

Customers Table 

| id(PK) | Name | Age  | 
| 1  | John | 34   | 
| 2  | Doe | 30   | 

QrCodes Table 
| id(PK) | QRcode | Tracking No. | CustomerID (FK) 
| 1  | QR123 | TR901111 | 1 
| 2  | QR345 | TR902222 | 2 


Redemptions Table 
| id(PK) | Name   | Tracking No. | CustomerID(FK) 
| 1  | Redemption 1 | TR901111 | 1 
| 2  | Redemption 2 | TR902222 | 2 
| 3  | Rdemption 3 | TR902222 | 2 

正如你所看到的,我有兩個跟蹤號列,一個用於qrcodes表&一個贖回表。因此,我可以通過追蹤找到所有Qrcodes &贖回的查詢。

跟蹤編號欄可以分類爲代理鍵嗎?或者那是不正確的?

+1

否。假設跟蹤號碼是唯一且永久的,那麼在QrCodes表中id列是代理,而跟蹤編號是。是一個獨特的[自然]鍵 – Strawberry

+0

我不明白這一點先生。這是否意味着QrCodes表中的id列不可見/正在系統中使用? –

+1

外鍵總是應該引用主鍵 – Strawberry

回答

1

它在評論中有些困惑,但它們基本上是正確的(對所有人都有好處)。您需要做的是從Redemptions中刪除TrackingId,並將QrCodeId作爲FK添加到Q​​rCode表中。

如果每個QrCode都有唯一的TrackingId(我認爲是這種情況),那麼它應該有一個唯一索引,但PK是Id。但是,如果不瞭解你正在建模的內容,很難明確說出。