MySQL 3列唯一约束不起作用,可能是由于NULL

时间:2012-02-12 12:13:04

标签: mysql sql null unique-constraint

这是我的表GameAdmin

game_id   company_id    user_id
1         5             NULL
1         5             NULL
1         NULL          2
1         NULL          3
1         NULL          3

它将游戏链接到可以编辑它们的实体(公司或用户)。

我在所有列上都有UNIQUE索引,但正如您所看到的那样,它没有按预期工作。

有什么问题?是因为NULL s?


我知道我可以通过将结构更改为:

来使其工作
game_id   admin_type    admin_id
1         company       5
1         company       5
1         user          2
1         user          3
1         user          3

但是这与我的JPA / Hibernate设置不兼容,或者至少非常不方便,因为它不允许我设置这样的关系:

@ManyToOne(optional=true)
private User user;

@ManyToOne(optional=true)
private Company company;

3 个答案:

答案 0 :(得分:1)

哦,解决方案很简单。我将约束分开了,因此game_idcompany_id以及game_iduser_id都有一个。

答案 1 :(得分:0)

这是因为NULL值。它们不被认为是独特的。如果这些字段上没有外键,则可以使用0而不是NULL。

答案 2 :(得分:0)

如果您知道(我的意思是知道,而不是猜测),您将永远不会有超过2个可能的类(用户/公司),只需使用否定ID其中之一。

  • 我知道这不是1NF
  • 我知道这很hacky
  • 我知道这不是很美丽

但恕我直言,这是“薄红线”的可接受方面。