我可以创建一个带有额外字符的复合键吗?

Can I create a composite key with an extra character?

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

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

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

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

不要(!) 创建将信息嵌入其中的数据库密钥,即使企业这样做也是如此。如果业务需要引用像PR12这样的字符串,那么...创建一个列来存储适当的值,或者使用一对多table。根据需要使用索引来强制唯一性。

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

  1. 基于自增的"actual"主键,不包含任何信息
  2. project_number 列,可能是 projects table.
  3. 的外键
  4. 同上 lesson_number。 (如果需要,使用 UNIQUE 复合 index。)
  5. 包含"the string that the business uses."
  6. 的列(或table)

随着时间的推移,业务实践确实发生了变化。总有一天你可能 .. 不,你 会... ... 遇到 错误地 分配的 "business-used string"做这种事的人类!您的数据库设计需要优雅地处理这个问题。我描述的模式是所谓的 第三范式。 如果您还没有在 "normal forms" 上进行 Google 搜索。