具有Null值的多个MySQL列的UNIQUE约束

时间:2013-01-13 17:14:24

标签: mysql database

在我的问题中,我的'Person'数据库中有两列。一列存储该人所属的组以及存储该组的管理员的列。一旦组只能有一个管理员。

我的想法是,我应该在两个列上加上一个独特的约束。但问题是,对于不是管理员的其他用户,他们唯一的约束会被破坏。

什么应该是他问题的正确解决方案。

示例数据库

----------------------------------
Person_id | Group_Id  |  Is_admin
----------------------------------
1         | 9         | null
2         | 9         | null
3         | 9         | null
4         | 9         | 1
5         | 9         | null
6         | 4         | null
7         | 4         | null
8         | 4         | null
9         | 4         | 1

现在,如果我在Group_Id和Is_admin上应用唯一约束,则它们是唯一的,但不适用于此人不是管理员的情况。

2 个答案:

答案 0 :(得分:2)

考虑创建一个新表来包含有关您的组的信息,其中group_id是主索引,而admin_id列则将person表作为外键引用。这样您就可以完全消除is_admin列并进行更多关系设计。

答案 1 :(得分:1)

对我来说没问题......

DROP TABLE IF EXISTS person_group;

CREATE TABLE person_group
(Person_id INT NOT NULL PRIMARY KEY
,Group_Id  INT NOT NULL
,Is_admin TINYINT NULL
,UNIQUE (group_id,is_admin)
);

INSERT INTO person_group VALUES
(1         , 9         , null),
(2         , 9         , null),
(3         , 9         , null),
(4         , 9         , 1),
(5         , 9         , null),
(6         , 4         , null),
(7         , 4         , null),
(8         , 4         , null),
(9         , 4         , 1);

SELECT * FROM person_group;
+-----------+----------+----------+
| Person_id | Group_Id | Is_admin |
+-----------+----------+----------+
|         6 |        4 |     NULL |
|         7 |        4 |     NULL |
|         8 |        4 |     NULL |
|         9 |        4 |        1 |
|         1 |        9 |     NULL |
|         2 |        9 |     NULL |
|         3 |        9 |     NULL |
|         5 |        9 |     NULL |
|         4 |        9 |        1 |
+-----------+----------+----------+

INSERT INTO person_group VALUES (10, 9, null);
Query OK, 1 row affected (0.00 sec)

INSERT INTO person_group VALUES (11, 9, null);
Query OK, 1 row affected (0.00 sec)