我有一张不需要主键的表。它由4列组成,分别是电子邮件,日期,时间,消息。每次用户登录,注销或执行任何重要的特定操作时,我都会记录电子邮件,日期,时间和操作(消息)。目前,该表设置为使用电子邮件作为主键,但我无法使用相同的电子邮件插入多个记录。我想我可以用时间作为PK,但是有可能两个动作同时出现。如何在没有PK的情况下使用该表?我已经尝试将其关闭以用于电子邮件列,但它不允许我这样做。
答案 0 :(得分:1)
是的,因为您已将电子邮件字段定义为主要电子邮件字段,因此它只能保存唯一数据且不允许重复。
所以你有两个选择:
1:删除电子邮件字段作为主键
2:添加新的整数字段作为主键并自动增加(我更喜欢这个)
答案 1 :(得分:0)
您可以使用natural primary key,它将是电子邮件+日期+时间+操作的组合。这种组合将是独一无二的。同一用户不可能同时执行2个不同的操作。这将有助于您保持信息的完整性。
希望这会对你有所帮助。
答案 2 :(得分:0)
要对表的主键做出决定,可以从考虑这些要点(适用于innodb)开始:
如何在写入数据后访问数据(如果不查询,为什么要存储它?)。如果您关心读取性能,则应通过主键查询数据,因为innodb主键是唯一可能的聚簇索引。
数据按主键排序存储,因此如果您关心写入性能,则应该按主键排序理想的数据,如果您有auto_increment,则始终会自动进行排序。此外,您没有明确指定主键的表将具有您无法访问的隐藏的auto_increment字段,即您以相同的成本获得更少的费用。