【发布时间】:2012-12-14 17:04:20
【问题描述】:
是否可以自动增加一个非主键?
表“book_cmets”
book_id medium_int
timestamp medium_int
user_id medium_int
vote_up small_int
vote_down small_int
comment text
comment_id medium_int
Primary key -> (book_id, timestamp, user_id)
此表上不会有其他索引。但是,我想使 comment_id 列自动增量,以便我可以轻松地创建另一个表:
表“book_cmets_votes”
comment_id (medium_int)
user_id (medium_int)
Primary key -> (comment_id, user_id)
对于每本书的评论,用户只能投票一次。此表通过主键强制执行此规则。
问题:
是否可以自动增加一个非主键 - 如自动增加表“book_cmets”中的comment_id 列?
替代方案,讨论。
如上所述,为了简单起见,我想这样做。替代品没有希望。
- 制作 commnet_id PK 并通过
book_id, timestamp, user_id上的唯一索引强制执行完整性。在这种情况下,我会创建一个额外的索引。 - 保留 PK 并将
book_comments_votes中的 comment_id 替换为整个 PK。这将使表格的大小增加三倍以上。
建议?想法?
【问题讨论】:
-
为什么不能简单地将
comment_id设为主键?我不明白你为什么需要额外的唯一索引。我可能只是没有完全理解你的问题。 -
comment_id因为 PK 不足以强制执行数据完整性 - 特别是没有其他重复用户对特定书籍的投票。这就是为什么复合键需要唯一索引的原因。 -
所以用户每本书只能投票一次,而不是您在问题中所说的每本书评论一次?
标签: mysql primary-key innodb