这与其说是编程问题,不如说是设计问题。
我有一张表,用于存储有关零售产品的详细信息:
Name Barcode BarcodeFormat etc...
----------------------------------------
(Name, Barcode, BarcodeFormat)
这三列将唯一标识表中的一条记录(Candidate Key)。但是,我还有其他表需要对此表进行 FK。所以我引入了一个 auto_increment
列 itemId
并将其作为 PK。
我的问题是 - 我应该将 PK
作为 (itemId, Name, Barcode, BarcodeFormat)
还是将 PK(itemId)
和 UNIQUE(名称、条码、条码格式)
。
我主要关心的是 INSERT
和 SELECT
操作方面的性能,但也欢迎对大小发表评论。
我在 mysql
中使用 innodb
表
最佳答案
肯定是:PK(itemId) 和 UNIQUE(Name, Barcode, BarcodeFormat)。
- 您不希望为所有连接等使用多部分 key 带来的麻烦
- 您可能有一天会有行没有条形码值,这样就不会是唯一的,所以您不希望唯一性硬连接到您的模型中(您可以轻松地删除唯一性而不破坏任何关系等)
- 唯一性约束是一个业务层面的问题,而不是数据库实体问题:您总是需要一个键,但您可能并不总是需要唯一性的业务规则
关于mysql - 对列的唯一组合进行 PK 或添加数字 rowID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921803/