在我的问题中,我的'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上应用唯一约束,则它们是唯一的,但不适用于此人不是管理员的情况。
答案 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)