Distinct Row - 基于两个字段

时间:2012-08-27 15:50:53

标签: ms-access ms-access-2010

有没有办法让一个表定义将其非复制基于两个字段?

由此我有3列 gid,cid,价格

标准:

  • 1 cid
  • 只能有1 gid
  • 只要有多个cid并且标准1未被违反,就可以有多个gid

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


编辑(2010-08-27美国中部时间上午11:18)

好一点澄清,我有两个索引,一个在gid,另一个在cid上,我可以让两个索引确定唯一性吗?该表基本上是一个Join表,因为绘制的两个表具有1-Many关系,因为它们的对应物对于其id是唯一的。

表/索引声明:

  • gid {数字:长}(小学:不,独特:不,忽略无效:否)[FK]
  • cid {Numeric:Long}(小学:不,独特:不,忽略无效:否)[FK]
  • price {Numeric:Single}

用法:

  • cid 1-many gid
    • cid源自tblCat(作为PK)
  • gid 1-many cid
    • gid源自tblGrp(作为PK)

2 个答案:

答案 0 :(得分:2)

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

enter image description here

答案 1 :(得分:1)

你的第一个要点是......

  • 1 gid只能有1个cid

但后来你说......

  • gid 1-Many cid

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

gid cid
  1   1
  2   1
  2   2

...我使用以下程序创建了该表。主键是gidcid上的综合索引。这禁止那些字段的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创建表,但如果这是你想要的表设计,你可以运行该过程,然后在设计视图中检查表。