相关疑难解决方法(0)

在Postgresql中,强制在两列的组合上唯一

我想在postgresql中设置一个表,这样两列一起必须是唯一的.任何一个值都可以有多个值,只要没有两个值共享两者.

例如:

CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

所以,col1col2可以重复,但不能在同一时间.所以,这是允许的(不包括id)

1 1
1 2
2 1
2 2
Run Code Online (Sandbox Code Playgroud)

但不是这个:

1 1
1 2
1 1 -- would reject this insert for violating constraints
Run Code Online (Sandbox Code Playgroud)

sql postgresql unique

160
推荐指数
4
解决办法
7万
查看次数

UNIQUE约束,仅当字段包含特定值时

我正在尝试为两列创建一个UNIQUE INDEX约束,但仅当另一列包含值1.例如,column_1并且column_2只有当时才应该是UNIQUE active = 1.包含任何行active = 0可以共享价值观column_1column_2与另一行,不管其它行的价值是什么active是.但行active = 1不能共享column_1column_2具有的另一行的值active = 1.

我所说的"共享"是两行在同一列中具有相同的值.示例:row1.a = row2.a AND row1.b = row2.b. 仅当row1中的两列与row2中的其他两列匹配时,才会共享值.

我希望我清楚自己.:\

mysql unique-constraint

14
推荐指数
3
解决办法
6495
查看次数

SQL我可以在表上有一个"条件唯一"约束吗?

我有这个拿出几次在我的职业生涯,并没有我的地方的同龄人似乎可以回答这个问题.说我有,有一个"描述"字段是一个候选键,但表有时用户会经由过程中途停止.因此,对于大约25%的记录,此值为null,但对于所有非NULL的记录,它必须是唯一的.

另一个例子是,必须维护多个记录的"版本"的表,和位值表示哪一个是"活动"之一.因此总是填充"候选键",但可能有三个版本相同(在活动位中为0)并且只有一个是活动的(活动位中为1).

我有其他方法来解决这些问题(在第一种情况下,在存储过程或业务层中强制执行规则代码,在第二种情况下,在需要历史记录时使用触发器和UNION表填充表) .我不想要替代方案(除非有明显更好的解决方案),我只是想知道SQL的任何风格是否能以这种方式表达"条件唯一性".我正在使用MS SQL,所以如果有办法在那里做,那很好.我大多只是在学术上对这个问题感兴趣.

sql sql-server sql-server-2005 check-constraints unique-constraint

10
推荐指数
1
解决办法
2万
查看次数