【问题标题】:Distinct Row - Based on two fieldsDistinct Row - 基于两个字段
【发布时间】:2012-08-27 15:50:52
【问题描述】:

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

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

标准:

  • 1 个gid 只能有1 个cid
  • 可以有多个cid,只要有多个gid并且不违反条件1

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


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

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

表/索引声明:

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

用法:

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

【问题讨论】:

  • 如果你问你是否有一个基于两个字段的唯一索引,是的,你可以。只要不是主要的,你甚至可以有空值。
  • 添加了更多细节,但仍在适应新的(对我而言)Access 设计。
  • 您是否在问如何使用 MS Access 中的两个字段创建索引?现有索引不相关。
  • 你说的是复合主键吗?如果是这样,请在设计模式下按住 shift 或 ctrl。突出显示所有相关字段,然后单击主键按钮,这将显示多个主键。
  • 我记得能够在另一个 DBMS 中执行复合键(不记得是哪个),但它允许我根据两个或多个字段限制不同的行条目,类似于执行 PK/FK 限制.我目前正在通过 SQL 语句进行限制,但如果我可以在表级别而不是 VBA 中的各个点定位限制,将会容易得多。我会尝试Daniel 的建议,看看是否得到所需的限制。

标签: ms-access ms-access-2010


【解决方案1】:

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

【讨论】:

  • 从来不知道你可以用 PK 来做到这一点,在 Access 中从多个字段创建一个约束。
  • 如何在关系中使用复合stackoverflow.com/questions/11730619/…
  • 我在 Access 中发现的这个功能让我很开心。我的乐趣才刚刚开始:)
【解决方案2】:

您的第一个要点是...

  • 1 个 gid 只能有 1 个 cid

但后来你说……

  • gid 1-许多 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 创建表,但如果这是您想要的表设计,您可以运行该过程,然后在设计视图中检查表。

【讨论】:

  • 是的,它是一个连接表,我可以在其中对特定 gid 进行临时样式查找并获取与其关联的所有 cid,反之亦然,查找 cid 并获取所有 gid。但在任何一种情况下,都应该只有一个 cid 与特定 gid 配对,即使该特定 cid 可能有多个条目,但只有一个与唯一 gid 配对
猜你喜欢
  • 2015-11-10
  • 2015-01-02
  • 2021-12-18
  • 2012-04-26
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2012-11-07
  • 2011-12-31
相关资源
最近更新 更多