Mysql:唯一主键元组的条件

时间:2016-11-16 12:36:40

标签: mysql

是否有可能,如果我有一个唯一的主键元组(idUser,idRep),对于每个idUser n,只有某些与idRep的组合是可能的? 例如,允许以下键组:

(n,1);(n,2);(n,3)OR(n,1);(n,6)OR(n,2);(n,5)OR(n,4) ;(n,3)OR(n,7)

但不是键(n,1)和(n,7)在一起?

长问题

我有下表

 idUser | idGroup | idType |

其中主键为(idUser,idGroup)。 idGroup有三个不同的值:1,2,3。对于几乎所有用户而言,idType始终与组无关,但也有一些例外。因此该表看起来像

idUser | idGroup | idType 
--------------------------
   1   |    1    |   43
   1   |    2    |   43
   1   |    3    |   43
   2   |    1    |   22
   2   |    2    |   22
   3   |    1    |   12
   3   |    3    |   12
   4   |    2    |   5
   4   |    3    |   6

我以为我可以通过列idRep避免冗余,其中包含一个用户组的信息如下

  

1 - >用户在第1组

     

2 - >用户在第2组

     

3 - >用户在第1组和第2组(1 + 2 = 3)

     

4 - >用户在第3组

     

5 - >用户在第1组和第3组(4 + 1 = 5)

     

6 - >用户在第2组和第3组(4 + 2 = 6)

     

7 - >用户在组1和2和3(4 + 2 + 1 = 7)

这会减少冗余,上表会缩小到

 idUser | idRep  | idType
-------------------------
   1   |    7    |   43
   2   |    3    |   22
   3   |    5    |   12
   4   |    2    |   5
   4   |    4    |   6

然而,缺点是,即使(idUser,idRep)是主键,也有可能出现错误输入,如

 idUser | idRep  | idType
-------------------------
   1   |    7    |   43
   1   |    1    |   42

在这种情况下,组1中的idUser 1的idType存在矛盾。

所以我的问题是:是否可以说对于特定的idUser n,只允许以下几组密钥:

(n,1);(n,2);(n,3)OR(n,1);(n,6)OR(n,2);(n,5)OR(n,4) ;(n,3)OR(n,7)

但不适用于(n,1)和(n,7)?

0 个答案:

没有答案