短
是否有可能,如果我有一个唯一的主键元组(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)?