我想知道我对代理密钥的理解是否正确。
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&通过追踪不仅仅是赎回。
跟踪号列是否可以归类为代理键?或者这是不正确的?
答案 0 :(得分:1)
评论中有点混淆,但它们基本上是正确的(所有人都有所提升)。你需要做的是从Redemptions中删除TrackingId并将QrCodeId作为FK添加到QrCode表中。
如果每个QrCode都有一个唯一的TrackingId(我认为是这种情况)那么它应该有一个唯一索引,但PK是Id。但是如果不了解你的建模,很难肯定地说。