首页 > 解决方案 > 我可以创建一个带有额外字符的复合键吗?

问题描述

我正在使用 MySQL 构建一个新的数据库来存储从各种项目中学到的经验教训。当我们在办公室谈论这个时,我们通过项目编号和课程编号来指代课程,即PR12-81,其中PR12指的是项目,81指的是该项目中的具体课程。我希望我的数据库中的主键也有一个连字符。

在 SQL 中定义复合键时,我可以使其引用项目和课程,但不使用连字符,即 PR1281。我还考虑过创建一个数据类型为 CHAR(1) 的单独列,在每一行中放置一个连字符并声明 PK 由 3 列组成。

还有另一种方法可以指定要以首选方式格式化的主键吗?

标签: mysqlsqldatabasecomposite-primary-key

解决方案


让你的表的主键是一个没有任何“意义”的无意义的自增数字。然后,在该表中,定义列: project_numberlesson_number。如果两者需要是唯一的,请定义一个UNIQUE包含这两个字段的索引。

不要(!)创建将信息嵌入其中的数据库键,即使企业这样做。如果业务需要引用类似 的字符串PR12,那就这样吧……创建一个列来存储适当的值,或者使用一对多的表。根据需要使用索引来强制唯一性。

注意(!)我现在描述了四列:

  1. 基于自动增量的“实际”主键,不包含任何信息。
  2. project_number,可能是表的外键projects
  3. 同上lesson_number。(如果需要,可以使用UNIQUE复合索引。)
  4. 包含“业务使用的字符串”的列(或表)。

随着时间的推移,商业惯例确实会发生变化。有朝一日,您可能会……不,您……遇到一个“业务使用的字符串”,该字符串被执行此类操作的人错误分配!您的数据库设计需要优雅地处理这个问题。我所描述的模式是所谓的第三范式。 如果您还没有,请在“普通表单”上进行 Google 搜索。


推荐阅读