0

假设这是表的 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 个字段且没有主键的唯一索引:

    唯一索引id_user_is_in_UNIQUEid_userASC、id_cityASC、whenASC)

  • 创建一个额外的经典 id 自动增量字段

我不喜欢第二个选项,因为我想创建对用户和城市的查询(即:搜索在某个日期在一个城市签到的所有用户)

提前致谢。

4

1 回答 1

0

你应该两者都做。添加一个自动递增的主键并针对所有三列添加唯一性约束。使用单独的系统分配键,如果最终需要,您可以更轻松地为这个新表定义外键。并且对所有三列都具有唯一性约束将确保不会创建重复数据。

一些快速的旁注:

  • 由于这是一个关联表,因此您的列确实应该是 NOT NULL.
  • 您可能希望将一个城市的 CASCADE 删除项向下添加到关联表中。
于 2012-04-19T14:18:10.040 回答