我可以创建一个带有额外字符的复合键吗?
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_number
和 lesson_number
。如果两者需要唯一,定义一个包含这两个字段的 UNIQUE
索引。
不要(!) 创建将信息嵌入其中的数据库密钥,即使企业这样做也是如此。如果业务需要引用像PR12
这样的字符串,那么...创建一个列来存储适当的值,或者使用一对多table。根据需要使用索引来强制唯一性。
注意 (!) 我现在描述了 四个 列:
- 基于自增的"actual"主键,不包含任何信息
project_number
列,可能是 projects
table. 的外键
- 同上
lesson_number
。 (如果需要,使用 UNIQUE
复合 index。)
- 包含"the string that the business uses."
的列(或table)
随着时间的推移,业务实践确实发生了变化。总有一天你可能 .. 不,你 会... ... 遇到 错误地 分配的 "business-used string"做这种事的人类!您的数据库设计需要优雅地处理这个问题。我描述的模式是所谓的 第三范式。 如果您还没有在 "normal forms" 上进行 Google 搜索。
我正在使用 MySQL 构建一个新的数据库来存储在各种项目中学到的经验教训。当我们在办公室谈论这个时,我们指的是项目编号和课程编号的课程,即 PR12-81,其中 PR12 指的是项目,81 指的是该项目中的具体课程。我希望我的数据库中的主键也有一个连字符。
在 SQL 中定义组合键时,我可以使其引用项目和课程但不带连字符,即 PR1281。我还考虑过创建一个数据类型为 CHAR(1) 的单独列,在每一行中放置一个连字符,并声明 PK 由 3 列组成。
是否有另一种方法可以指定要以首选方式格式化的主键?
让你的 table 的主键是一个没有任何 "meaning" 的无意义的自动递增数字。然后,在 table 中,定义 两个 列:project_number
和 lesson_number
。如果两者需要唯一,定义一个包含这两个字段的 UNIQUE
索引。
不要(!) 创建将信息嵌入其中的数据库密钥,即使企业这样做也是如此。如果业务需要引用像PR12
这样的字符串,那么...创建一个列来存储适当的值,或者使用一对多table。根据需要使用索引来强制唯一性。
注意 (!) 我现在描述了 四个 列:
- 基于自增的"actual"主键,不包含任何信息
project_number
列,可能是projects
table. 的外键
- 同上
lesson_number
。 (如果需要,使用UNIQUE
复合 index。) - 包含"the string that the business uses." 的列(或table)
随着时间的推移,业务实践确实发生了变化。总有一天你可能 .. 不,你 会... ... 遇到 错误地 分配的 "business-used string"做这种事的人类!您的数据库设计需要优雅地处理这个问题。我描述的模式是所谓的 第三范式。 如果您还没有在 "normal forms" 上进行 Google 搜索。