2016-09-17 5 views
1

私は今直面している問題に最適な解決策を見つけようとしています。私は理解していないことを嫌うので、誰かが助けてくれることを願っています。主キーの自動番号とテキスト文字列?

私は、ホテル情報を格納するテーブルを持つAccessデータベースと、次に予定表を格納する別のテーブルを持っています。旅程表は、ホテルの表のホテルのリストから選択します。

私は適切な関係を作りたいと思っていますが、ホテルテーブルのオートナンバープライマリキーを使用して、旅程表のホテルのフィールドに接続することはできません。

A.文字列の長さはかなり得る場合であっても、ホテルのテーブルの主キーとしてホテル名を使用します(。オートナンバーIDは、ホテル名と一致しないため)

は、それがすることをお勧めします長いです?

B. ItinerariesテーブルのHotelsフィールドの表示コントロールをHotelsテーブルのオートナンバープライマリキーを一覧表示するコンボボックスに変更しますが、非表示にします。代わりにホテル名の列が表示されます。私はその解決策をここに見つけました:http://www.trigonblue.com/accesslookup.htm

私はソリューションAが長いテキスト文字列でインデックスを遅くする可能性があり、ソリューションBがテーブルに新しいフィールドが挿入された場合、ソリューションBがうんざりになると思われます。

私はここで間違った答えを選んで道路に問題があるのは嫌です。

誰でもお手伝いできますか?私の質問の一部を明確にする必要があるかどうか、私に知らせてください。

ありがとうございます!

+0

ホテルIDを使用してホテルと旅程の関係を追加することもできます。 - 「Duplicates」を使用して旅程に「HotelID」を追加するだけです。 – dbmitch

+0

お返事ありがとう。申し訳ありませんが、私は初心者であり、おそらく理解していません。ホテルIDは、旅程のフィールドに数字ではありませんか?私はあなたの質問に答えるために、どのオートナンバーがホテル名 – arbitel

+0

に対応しているのかわかりません。オプションBは行く方法です!その最も安全で推奨された方法:) 理由:あなたはキーを使用しているだけで、キーです! :) :) –

答えて

1

自動番号は主キーを設定する最も効率的な方法ですが、DBMSが探しているものを見つけるためにDBMSが最も簡単に作業します。これは、テーブルにプライマリ/外部キーの関係がある場合に特に当てはまります。

このようにして、ストレージやインデックス作成の目的でこのようにすることは、言うまでもありません(Accessでは大したことではありませんが、他のものでもそうです)。

+0

あなたの応答をありがとう - オプションBはここで最高ですか?それとも、私がまだAutonumberを使って関係を設定できる別の方法はありますか? – arbitel

+1

新しいフィールドがテーブルに挿入されていると「*ソリューションBがうまくいかない」と思う理由がわかりません*それは正しい方法です - コンボボックスを変更してホテル名を並べ替えるだけです - ディスプレイに表示されます。 – dbmitch

+0

唯一の解決策は、列数と列幅を選択することです。つまり、キーは列1、表示は2列目です。ルックアップツールを2列に設定し、幅を0 "; 1"に設定します。 2番目の列の前に新しいフィールドを挿入した場合は、代わりにそのフィールドが表示されます。 私はフィールドを挿入しないことを覚えていたと思いますが、より良い方法があるはずです。 – arbitel

1

ほとんどの場合、名前は主キーとして使用しないでください。 CODEまたはIDという形式の一意のIDを使用する方がはるかに安全な方法です。名前の使用を避けることにあなたを可能にする:

  • 抽象識別子
  • ストア単一の場所
  • 変更名に名前から名前、
  • 使用少ない単一の場所に、必要に応じてディスクスペースとメモリ。
  • インデックス作成、挿入、削除、結合、並べ替え、グループ化を高速に実行します。

コードやIDが既に存在する場合や、内部/外部ルールによって制約されることがありますが、ほとんどの場合、AutoNumbered Primary Keyは非常に便利です。これは、次のとおりです。

  • 数値、それは
  • 新しいエントリは常にテーブルの最後に挿入し、最小限の労力を必要と一意であることが保証
  • で動作するように速いですので、それは、数値
  • 効率的に保存されていますので、ページの移動またはインデックスの変更。
+0

"ユニークであることが保証されています" - 新しい行が重複を生成するように、自動番号を1に再シードすることができます。また、意図的に重複を作成するautonumberプロパティを持つ列を更新することもできます。お客様が主張する保証は、主キーのみであり、オートナンバーとは関係ありません。 – onedaywhen

+0

これ以外はアクセスです。 DDLを使ってシードを盗むことは可能ですが、それは推奨されません(http://superuser.com/questions/288087/how-do-i-set-the-first-value-of-autonumber-in-access #comment301363_288087) – ThunderFrame

+0

"新しいエントリは常にテーブルの最後に挿入されます" - オートナンバーおよび/またはプライマリキーを持っているかどうかに関係なく、どのテーブルでも同じことが言えます。自動番号がインクリメンタル(ランダムではない)で、最大値に達していない場合、ファイルが圧縮されているときに、PKがクラスタ化インデックスを指示するため、ディスク上の物理的な順序は変更されません。これは、最も最近作成された行に対して競合が頻繁に発生するため、疑わしい利点です。同じ物理ページにある場合、ロックの問題が発生する可能性があります。ランダムオートナンバーが良いかもしれません。 – onedaywhen

関連する問題