アプリ版:「スタンプのみでお礼する」機能のリリースについて

主キーはオートナンバー型のIDを使った方が良いのか、
独自の主キーを作った方がいいのか?

今は
テーブル1
-------------------
IDフィールド(オートナンバー型) 主キー
1
2
3
-------------------
伝票番号フィールド
A001
A001
A002
-------------------
部署フィールド
営業部
システム部
営業部
-------------------
金額フィールド
100
200
300
-------------------
という状態ですが、
新たに主キーフィールドを作り
更新クエリで
UPDATE テーブル1 SET テーブル1.主キー = [テーブル1]![伝票番号] & [テーブル1]![部署] & [テーブル1]![金額];
をして、主キーを独自に作った方がいいのか。

アクセスを作るにおいて、どちらの方が良いのでしょうか?
テーブルのレコードは削除したりする事もあるので、オートナンバー型だと空きができてしまいます。

レコードに空きができないデータベースなら、オートナンバー型、
空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?

A 回答 (5件)

よい質問です。



この場合は伝票No.を主キーにすると
番号を間違えて入力してレコードが出来てしまえば
主キーの変更はできません。
削除して新規に入力することになります。

主キーは数値、文字列も可能ですがオートナンバー型を勧めます。
ただしフィールド名はIDのままにせずに
伝票IDとユニークなものに変えておきます。

オートナンバーにすると主キーはACCESS側にお任せになるので、
フォーム、レポート上では省略出来るので、番号に空きが出来ても問題ないでしょう

一般的に主キーとは別に伝票No.、商品コード、取引先コードを用意しますが
これはフォーム、レポートでのレコードの抽出条件、表示(リスト)の順番のためです。
    • good
    • 1
この回答へのお礼

良い質問ですかw実はずっと疑問に思ってた事なのです。
オートナンバー型の主キーで、フィールド名は替えた方が良いようですね。
ありがとうございました。

お礼日時:2012/10/07 03:44

>新たに主キーフィールドを作り



手順の一例です
1.旧テーブルをコピペ
2.新テーブルの全レコードを削除
3.新テーブルの主キーを数値型に変更、
4.新テーブルの末尾にオートナンバー型のフィールド例えば[伝票ID]を追加
5.旧レコードの全レコードをコピー
6.新テーブルの[*]の位置へ張り付け
6.新テーブルのIDフィールドを削除
7.[伝票ID]を先頭に移動して主キーに設定
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

お礼日時:2012/10/24 22:02

主キー項目は確かに悩みどころですね。


心中、お察しして余りあるところです。

さてさて、今回ご提示のテーブルのサンプルに関してだけを観点にすると
主キーはオートナンバーに限らず、何か別に持つ必要がありますね。

主キーフィールドは重複不可ですから、
重複が発生している[伝票番号]・[部署]は設定できません。
[金額]を主キーにするという愚かしいことはしないでしょう。
よって、何か別の主キーたりえるフィールドが必要、と言うことです。
そこで一番考えやすいのは、オートナンバーによる[ID]付加ですね。



もう一つ、手段として抑えておきたいのは、
「複数フィールドを組み合わせて主キーとする」と言う方法です。
ご提示のサンプルで言えば、[伝票番号]&[部署]くらいの考え方でしょうか。
つまり、"A001営業部"・"A001システム部"となるフィールド、と言う考えです。
サンプルが多くないので難しいですが、「同じ伝票番号に同じ部署は発生しない」なら
このやり方も十分に有効と思います。

テーブルをデザインビューで開き、(エクセルの行指定の要領で)複数フィールドを選択、
主キーに設定すると、例の鍵のマークが複数あらわれます。
これで、複数のフィールドを組み合わせた主キーの設定が出来ます。



レスポンスが多少落ちるようですが、
例えば私の場合、伝票番号&商品番号で処理をしていますが、
約50万件を扱うテーブルでも(私は)気になる範囲ではありません。



とりあえず、ご参考までに。
「主キーはオートナンバー型のIDを使った方」の回答画像4
    • good
    • 0
この回答へのお礼

ありがとうございました。大変参考になりました。

お礼日時:2012/10/24 22:02

>レコードに空きができないデータベースなら、オートナンバー型、


>空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?

空きができるとなにか困ることがあるのでしょうか?
空きができるかどうかはあまりこだわらないほうがいいでしょう。


主キーはユニーク(重複なし)である必要があります。

伝票番号&部署&金額がユニークでないならオートナンバー型にするしかありません。
ユニークになるならどちらでもかまいませんが、わざわざ独自に作るメリットもないでしょう。


ただし、オートナンバー型というのはアクセス独特の型なので、他のデータベースとの互換性を考えるならあまりお勧めできません。

一般的なデータベースの場合は、伝票番号&部署&金額がユニークになるなら3つのフィールドをまとめて主キーとします。
アクセスでもその方法が可能です。

伝票番号&部署&金額がユニークでない場合は、「主キーを設定しない」「ユニークとなるフィールドを捜して主キーとする」「ユニークキーとなるフィールドを独自に作る」のいづれかになります。
    • good
    • 0
この回答へのお礼

>オートナンバー型というのはアクセス独特の型なので、
他のデータベースとの互換性を考えるならあまりお勧めできません。

そうなのですか、知りませんでした。
なるべくオートナンバー型は使わないようにします。ありがとうございました。

お礼日時:2012/10/07 03:27

> オートナンバー型だと空きができてしまいます。


何に困るのですか?
空きが出来ても問題無いでしょう。OrderByで作成順にできるし。

> テーブルのレコードは削除したりする事もあるので
どうしてもイヤなら、「削除フラグ列」設けて論理削除方式にするとか。
    • good
    • 0
この回答へのお礼

空き番号があると、なんだかソワソワしてしまうんですw
冷静に考えてみれば確かに困りはしないですね。
ありがとうございました。

お礼日時:2012/10/07 03:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A