0

在我的问题中,我的“人员”数据库中有两列。一列存储此人所属的组,一列存储他是该组的管理员。一次组只能有一个管理员。

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

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

示例数据库

----------------------------------
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 应用唯一约束,它们是唯一的,但在此人不是管理员的情况下则不然。

4

2 回答 2

2

考虑创建一个新表来包含有关您的组的信息,group_id主索引在哪里,并且类似的列作为外键admin_id引用您的表。person这样一来,您就可以is_admin完全消除该列并进行更相关的设计。

于 2013-01-13T17:45:35.033 回答
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)
于 2013-01-13T17:41:38.803 回答