1

有没有办法让表定义基于两个字段的非重复?

通过这个我有 3 列 gid, cid, price

标准:

  • 只能有1cid对1gid
  • cid只要有多个gid并且不违反标准 1 就可以有多个

如果可能的话,我基本上希望在表格设计中有限制。不知道它是否可能只是想我会问。


编辑 (2010-08-27 11:18am CST)

好的,澄清一下,我也有两个索引,一个打开gid,另一个打开cid,我可以让这两个索引确定唯一性吗?该表基本上是一个连接表,因为绘制的两个表具有一对多的关系,只要它们的对应项对其 id 是唯一的。

表/索引声明:

  • gid {Numeric:Long}(主要:否,唯一:否,忽略空值:否)[FK]
  • cid {Numeric:Long}(主要:否,唯一:否,忽略空值:否)[FK]
  • 价格{数字:单}

用法:

  • cid 1 - 许多 gid
    • cid 源自 tblCat(作为 PK)
  • gid 1-许多 cid
    • gid 派生自 tblGrp(作为 PK)
4

2 回答 2

2

在 MS Access 中创建多字段索引没有任何困难。您只需单击索引按钮(闪电)并选择您需要的。

在此处输入图像描述

于 2012-08-28T14:26:49.497 回答
1

您的第一个要点是...

  • 1 gid 只能有 1 cid

但后来你说...

  • gid 1-许多 cid

所以我不确定你想要什么。如果此数据集代表可接受的样本值...

gid cid
  1   1
  2   1
  2   2

...我使用以下过程创建了该表。主键是gid和上的复合索引cid。这禁止这些字段的 Null 值,并确保只有唯一的值对可以存储在表中。

一个gid值可以与多个不同的cid值配对。一个cid可能与多个不同的gid值配对。

如果这不是你所追求的,请澄清你想要什么。如果您只需要一个额外的索引cid,您可以添加一个......它不会干扰主键索引。

这是我使用的程序。

Public Sub CreateTable_GoldBishop()
    Const cstrTable As String = "tblGoldBishop"
    Dim cn As Object
    Dim strSql As String

    Set cn = CurrentProject.Connection
    strSql = "CREATE TABLE " & cstrTable & "(" & vbCrLf & _
        "gid INTEGER," & vbCrLf & _
        "cid INTEGER," & vbCrLf & _
        "price SINGLE," & vbCrLf & _
        "CONSTRAINT pkey PRIMARY KEY" & _
        "(gid, cid)" & vbCrLf & _
        ");"
    Debug.Print strSql
    cn.Execute strSql
    Set cn = Nothing
End Sub

顺便说一句,我并不是要告诉您使用 DDL 创建表,但如果这是您想要的表设计,您可以运行该过程,然后在设计视图中检查表。

于 2012-08-27T18:36:07.143 回答