假设这是表的SQL代码:
CREATE TABLE `user_is_in` (
`id_user` INT NULL ,
`id_city` INT NULL ,
`when` DATETIME NULL ,
INDEX `fk_user` (`id_user` ASC) ,
INDEX `fk_city` (`id_city` ASC) ,
CONSTRAINT `fk_user`
FOREIGN KEY (`id_user` )
REFERENCES `user` (`id` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_city`
FOREIGN KEY (`id_city` )
REFERENCES `city` (`id` )
ON DELETE SET NULL
ON UPDATE CASCADE)
ENGINE = InnoDB;
该表的使用是存储Foursquare签到的种类(用户一次在一个地方注册)。
现在我有两个选择:
使用3个字段创建唯一索引,但没有主键:
UNIQUE INDEX id_user_is_in_UNIQUE
(id_user
ASC,id_city
ASC,when
ASC)
创建一个额外的经典ID自动增量字段
我不喜欢第二个选项,因为我想在用户和城市上创建查询(即:搜索在一个城市在一个城市签到的所有用户)
提前致谢。
答案 0 :(得分:0)
你应该两个都做。添加自动递增主键并为所有三列添加唯一性约束。通过单独的系统分配键,您可以更轻松地定义此新表的外键,如果最终需要的话。对所有三列具有唯一性约束将确保不会创建重复数据。
一些快速的旁注:
NOT NULL
。