需要高级帮助来验证我对关系数据库设计中的Surrogate密钥的理解

时间:2015-12-02 13:47:08

标签: mysql sql database relationship

我想知道我对代理密钥的理解是否正确。

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 个答案:

答案 0 :(得分:1)

评论中有点混淆,但它们基本上是正确的(所有人都有所提升)。你需要做的是从Redemptions中删除TrackingId并将QrCodeId作为FK添加到Q​​rCode表中。

如果每个QrCode都有一个唯一的TrackingId(我认为是这种情况)那么它应该有一个唯一索引,但PK是Id。但是如果不了解你的建模,很难肯定地说。