Database design 我们可以在MS access数据库上创建多列唯一索引吗?

Database design 我们可以在MS access数据库上创建多列唯一索引吗?,database-design,ms-access,Database Design,Ms Access,我们希望使用多列唯一索引防止MS access数据库中的记录重复。由于数据的发送方式(通过网络),有时会收到重复数据。数据源不发送唯一ID,因此最简单的选择是防止插入重复记录 根据: 对于多列唯一索引 索引保证每个组合 索引键中的值是唯一的。 例如,如果一个唯一索引是 基于LastName的组合创建, FirstName和MiddleName列,否 表中的两行可能有 这些值的相同组合 列 不过,这是针对SQL 2005的,所以我不确定是否可以使用MS access 我想另一种可能是使用查询(伪代

我们希望使用多列唯一索引防止MS access数据库中的记录重复。由于数据的发送方式(通过网络),有时会收到重复数据。数据源不发送唯一ID,因此最简单的选择是防止插入重复记录

根据:

对于多列唯一索引 索引保证每个组合 索引键中的值是唯一的。 例如,如果一个唯一索引是 基于LastName的组合创建, FirstName和MiddleName列,否 表中的两行可能有 这些值的相同组合 列

不过,这是针对SQL 2005的,所以我不确定是否可以使用MS access

我想另一种可能是使用查询(伪代码):

插入foobar(a,b,c)值('x','y','z'))
其中(a'x')、b'y')和(c'z'))

。。。但是我觉得索引会更好。

在MS Access的设计视图中打开表,选择要生成唯一索引的三列,然后单击工具栏上的小键。主键(set)中不能有空值。

事实证明,您可以在MS access数据库上创建多列唯一索引,但如果您想通过GUI执行此操作,则有点疯狂。还有一个限制;每个索引只能使用10列

无论如何,下面介绍如何在MS access数据库上创建多列唯一索引

  • 在设计模式下打开表格,然后设计,选择索引
  • 创建新行并在索引名称单元格中输入值
  • 从下拉菜单中选择第一列
  • 添加新行,并将“索引名称”单元格留空
  • 选择第二列,依此类推
  • 下面是它的外观:


    我们可以使多个数据成为唯一的数据,而无需将它们设置为主键

    注意:表中只有1个数据可以是主键)

    将数据值设置为唯一数据的步骤(对于MS ACCESS 2007-2010

  • 在设计视图中打开所选表格
  • 单击(突出显示)要设置为唯一的特定列/属性
  • 在表格底部,您将看到该特定列的“索引属性”
  • 查找“索引的”列,当前索引文本框中的数据为“否”,单击文本框末尾的更改数据,选择“是(无重复)
  • 真的希望这个方法能帮助你们大家!:)


    它将作为Ms Access 2007/2010中的唯一键

    为什么不为相关表格提供唯一索引?我不知道这是什么具体的C++,BTW.不-任何索引可以在一个以上的列-索引将是非常无用的,如果不是这样的话。这就是为什么我说您需要一些帮助-您似乎不了解数据库设计的基础知识。Neil,请您解释一下如何使用MS access在多个列上创建索引?这将非常有帮助。啊哈,我相信我正在搜索的术语是“多列唯一索引”。我以前从未用过这些。。。也许这个答案会有帮助:问题更新-希望这会更清楚我的目标。嗯,出于某种原因,这使得
    Foo
    本身是独一无二的,而不是与
    Foo
    条等组合使用。我需要允许
    (“a”、“b”、“c”、“d”)只允许一次,但也允许
    (“x”、“b”、“c”),“d”)
    --这种索引安排似乎不允许这样做,因为最后3个值已经存在。@Remou提供了一种更简单的方法,即选择多行并点击工具栏上的PK按钮。这对我来说似乎很直观,因为它是设置任何主键的GUI方式。@David-W-Fenton是的,就像Remou说的。哈,请放弃我的第一条评论!我今天又试了一次,效果如期。我不太确定我昨天做错了什么。空值问题很关键——如果任何字段都可以为空,那么就不能在索引上强制唯一性(因为没有两个空值是相等的,两个记录中有5个相同的字段和第6个空值字段都不会被视为重复)。这个答案是正确的。但有人应该告诉尼克,他真正想要的是一个唯一的约束,而不是一个唯一的索引。如果他创建了一个多列PK约束,他将得到一个多列唯一索引。但指数只是一种工具。他寻找的逻辑功能是约束。@Walter Mitty我想你是对的-请参阅我答案中的注释。在通过UI访问时,无法创建唯一的约束,只能通过DAO或DDL来创建。这就是如何在MSAccess中创建主键。。。。这是一个唯一的索引,但不是在任何字段上创建唯一索引的方法。如果您不需要任何其他内容的主键,这可以解决单个唯一索引的问题。但是@Ilmari Karonen的答案更切题。这只适用于单列。问题是关于多列的。@Andre451您可以将此方法用于多列的Andre451。只需为每个要设置为唯一的列设置此方法。您是否尝试在多个列中设置?因为这是我的工作。是的,当然你可以为多个列分别设置一个唯一的索引。但问题是设置一个覆盖多个列的唯一索引。
    insert into foobar (a, b, c) values ('x', 'y', 'z')
    where (a <> 'x') and (b <> 'y') and (c <> 'z')