是否可以自动增加非主密钥?
表“ book_comments”
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列自动递增,以便可以轻松创建另一个表:
comment_id
表格“ book_comments_votes”
comment_id (medium_int) user_id (medium_int) Primary key -> (comment_id, user_id)
用户将只能对每个书评进行一次投票。该表通过主键强制执行此规则。
题:
是否可以自动增加非主键-例如,自动增加comment_id表“ book_comments”中的列?
替代方案,讨论:
如上所述,我想这样做是为了简化。替代方案前景不佳。
book_id, timestamp, user_id
book_comments_votes
有什么建议吗?有什么想法吗?
是的你可以。您只需要使该列成为索引即可。
CREATE TABLE `test` ( `testID` int(11) NOT NULL, `string` varchar(45) DEFAULT NULL, `testInc` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`testID`), KEY `testInc` (`testInc`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; insert into test( testID, string ) values ( 1, 'Hello' ); insert into test( testID, string ) values ( 2, 'world' );
将为“ testInc”插入具有自动递增值的行。但是,这确实是一件愚蠢的事情。
您已经说过正确的做法:
“进行comment_id PK,并通过对book_id,timestamp和user_id的唯一索引来增强完整性。”
那正是您应该这样做的方式。它不仅为您提供了将来查询所需要的表的适当主键,而且还满足了最少惊讶的原则。