1

非複製を2つのフィールドに基づくテーブル定義を作成する方法はありますか?

これにより、gid、cid、priceの3つの列があります

基準:

  • cid1対1しか存在できませんgid
  • 複数のが存在し、基準1に違反しないcid限り、複数のが存在する可能性があります。gid

可能であれば、基本的にテーブルデザインに制限を設けたいと思います。その可能性がちょうど私が尋ねるだろうと思ったかどうかわからない。


編集(2010-08-27 11:18 am CST)

少し説明します。2つのインデックスもあります。1つgidはオンで、もう1つはオンcidです。2つのインデックスで一意性を判断できますか?描画された2つのテーブルは1対多の関係にあるため、対応するテーブルがそのIDに固有である限り、テーブルは基本的に結合テーブルです。

テーブル/インデックス宣言:

  • gid {Numeric:Long}(Primary:No、Unique:No、Ignore Nulls:No)[FK]
  • cid {Numeric:Long}(Primary:No、Unique:No、Ignore Nulls:No)[FK]
  • 価格{数値:単一}

使用法:

  • cid1-多くのgid
    • cidはtblCatから派生しています(PKとして)
  • gid1-多くのcid
    • gidはtblGrpから派生しています(PKとして)
4

2 に答える 2

2

MSAccessでマルチフィールドインデックスを作成するのに問題はありません。インデックスボタン(稲妻)をクリックして、必要なものを選択するだけです。

ここに画像の説明を入力してください

于 2012-08-28T14:26:49.497 に答える
1

あなたの最初の箇条書きは...

  • 1つのgidに対して1つのcidしか存在できません

しかし後であなたは言った...

  • gid1-多くのcid

だから私はあなたが何を望んでいるのかわかりません。このデータセットが許容可能なサンプル値を表す場合..。

gid cid
  1   1
  2   1
  2   2

...以下の手順を使用してそのテーブルを作成しました。gid主キーはとの複合インデックスcidです。これにより、これらのフィールドのNull値が禁止され、一意の値のペアのみがテーブルに格納されるようになります。

1つのgid値を複数の異なるcid値と組み合わせることができます。また、1つ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 に答える