mysql - 需要高级帮助来验证我对关系数据库设计中代理键的理解

标签 mysql sql database relationship

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

例如:

下面是我的示例数据库设计

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

如您所见,我有两个跟踪号列,一个用于二维码表,一个用于兑换表。这样我就可以进行查询,例如仅通过跟踪查找所有二维码和兑换。

跟踪号列可以归类为代理键吗?或者这是不正确的?

最佳答案

评论中有点困惑,但它们基本上是正确的(所有人都上涨了)。您需要做的就是从兑换中删除 TrackingId,并将 QrCodeId 作为 FK 添加到 QrCode 表中。

如果每个QrCode都有一个唯一的TrackingId(我认为是这样)那么它应该有一个唯一索引,但PK就是Id。但如果不了解您正在建模的内容,就很难确定。

关于mysql - 需要高级帮助来验证我对关系数据库设计中代理键的理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34044338/

相关文章:

php - Mysql - 如果值不存在,则使用另一个表

php - MySQL/SQL/PHP 语法错误

sql - 将行连接成列

sql - 如何在 QuestDB 中进行月度/季度聚合?

php - 使用 PHP 访问另一个对象内的数组内的对象

php - 使用 PHP 获取数据 : Pull data

php - 不带 limit() 传递数据库表的所有值

mysql - 在 MySQL 中声明具有多个 JOIN 表的变量

sql - 简单的数据透视

java - 用于存储键值对的轻量级数据库类库