DROP TABLE IF EXISTS `media_publications`;
CREATE TABLE `media_publications` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`media_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`description` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY (`id`,`user_id`)
) ENGINE=INNODB;
将id
作为主键是否毫无意义?我是否应该将id + user_id
作为主键考虑我需要它作为另一个表的外键?
答案 0 :(得分:2)
您必须将id
作为主键,因为它是AUTO_INCREMENT并且您正在使用InnoDB。您可以在2列上创建一个唯一索引(我将user_id放在第一位)以在子表外键中使用
答案 1 :(得分:0)
并非每个唯一的行组合都应该是主键。 可能你可以这样使用它,但这将是一个尴尬的解决方案。
答案 2 :(得分:0)
明确将主键标记为主键是个好主意。
这样你就不必添加另一个索引,它将部分复制你的主键或用户表的外键(虽然后者当前不存在)。
P.S。许多人似乎将身份字段与主键混淆。标识字段很容易成为主键的一部分(但如果表是InnoDB且字段是自动增量整数,则应该是前缀。)
答案 3 :(得分:0)
在id,user_id上键入是没有意义的,因为主键始终是InnoDB中二级索引中的最后一个键(虽然优化器并不总是利用这一点),并且因为键只能在左侧使用时 - 大部分是指定的。因此,要么仅在user_id上创建密钥,要么在user_id / id上创建唯一的user_id,id。这样,您就可以在查询WHERE id =
和WHERE user_id =