是/否列最多只有一个是

时间:2013-12-05 23:45:27

标签: sql ms-access ms-access-2010

我有一个包含不同版本对象的表格,例如对象A版本1,版本2,B版本24 ...等。一列将外键存储到对象,另一列存储版本号。很明显,这些组合应该是唯一的,并且易于实现,并且两者都具有唯一索引。

但是,我希望能够跟踪IsCurrent Yes / No列的当前版本。当前版本不一定是编号最高的版本。这里的问题是没有办法定义一个索引,该索引对于yes值是唯一的,但允许很多nos。

我在搜索此问题时发现了很多结果,但它们似乎都不适用于Access。我尝试了一个“hack”,我在其中创建一个计算列,用于唯一索引,如果current为true则为-1,否则为PK,但Access不允许您索引计算列。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

有一个技巧,但是你必须只允许isCurrent列的“yes / null”值 - “yes”表示“此行是当前的”,否则为“null”。
这可以使用验证检查[isCurrent]="yes" Or [isCurrent] Is Null来完成
然后在id + isCurrent字段上创建复合+唯一+忽略空值索引,并允许空值。

只需单击“索引”按钮并以这种方式定义它: enter image description here

这可以防止在'isCurrent'列中插入两个具有相同id +“yes”的行,但允许在'isCurrent'列中使用相同id + null的许多行。