mysql - 对列的唯一组合进行 PK 或添加数字 rowID

标签 mysql sql

这与其说是编程问题,不如说是设计问题。

我有一张表,用于存储有关零售产品的详细信息:

Name    Barcode    BarcodeFormat  etc...
---------------------------------------- 

(Name, Barcode, BarcodeFormat) 这三列将唯一标识表中的一条记录(Candidate Key)。但是,我还有其他表需要对此表进行 FK。所以我引入了一个 auto_incrementitemId 并将其作为 PK。

我的问题是 - 我应该将 PK 作为 (itemId, Name, Barcode, BarcodeFormat) 还是将 PK(itemId) UNIQUE(名称、条码、条码格式)

我主要关心的是 INSERTSELECT 操作方面的性能,但也欢迎对大小发表评论。

我在 mysql 中使用 innodb

最佳答案

肯定是:PK(itemId) 和 UNIQUE(Name, Barcode, BarcodeFormat)。

  • 您不希望为所有连接等使用多部分 key 带来的麻烦
  • 您可能有一天会有行没有条形码值,这样就不会是唯一的,所以您不希望唯一性硬连接到您的模型中(您可以轻松地删除唯一性而不破坏任何关系等)
  • 唯一性约束是一个业务层面的问题,而不是数据库实体问题:您总是需要一个键,但您可能并不总是需要唯一性的业务规则

关于mysql - 对列的唯一组合进行 PK 或添加数字 rowID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921803/

相关文章:

php - 在 OOP 应用程序中处理嵌套事务

mysql - 在多对多表中查找双向绑定(bind)

sql - 如果表中存在特定值则返回 True - sql

mysql - 如何优化此查询以不重复获取重复信息

mysql - mysql中的存储过程语法有错误

mysql - 通过固定列表对 MySQL 中的项目进行排序?

jquery - 混合 CodeIgniter、HTML、JQuery 和 MySQL

sql - 如何修复golang sql字符串转换扫描错误

mysql - 无法删除添加主键

mysql - 根据现有列中的值在新列中插入值