【发布时间】:2011-04-05 07:56:20
【问题描述】:
假设我有下表:
TABLE: product
============================================================
| product_id | name | invoice_price | msrp |
------------------------------------------------------------
| 1 | Widget 1 | 10.00 | 15.00 |
------------------------------------------------------------
| 2 | Widget 2 | 8.00 | 12.00 |
------------------------------------------------------------
在此模型中,product_id 是 PK,并被许多其他表引用。
我要求每一行都是唯一的。在示例 about 中,一行被定义为 name、invoice_price 和 msrp 列。 (不同的表可能对哪些列定义“行”有不同的定义。)
问题:
- 在上面的示例中,我是否应该将
name、invoice_price和msrp设为复合键以保证每一行的唯一性? - 如果对#1 的回答是“是”,这意味着当前的PK
product_id不会被定义为密钥;相反,它只是一个自动递增的列。这是否足以让其他表用于创建与product表中特定行的关系?
请注意,在某些情况下,表可能有 10 个或更多列需要是唯一的。那将是很多定义复合键的列!这是一件坏事吗?
我正在尝试决定是否应该尝试在数据库层或应用程序层强制执行这种唯一性。我觉得我应该在数据库级别执行此操作,但我担心使用非键作为 FK 或有这么多列定义复合键可能会产生意想不到的副作用。
【问题讨论】:
标签: mysql database data-modeling database-design