
主キーはオートナンバー型のIDを使った方が良いのか、
独自の主キーを作った方がいいのか?
今は
テーブル1
-------------------
IDフィールド(オートナンバー型) 主キー
1
2
3
-------------------
伝票番号フィールド
A001
A001
A002
-------------------
部署フィールド
営業部
システム部
営業部
-------------------
金額フィールド
100
200
300
-------------------
という状態ですが、
新たに主キーフィールドを作り
更新クエリで
UPDATE テーブル1 SET テーブル1.主キー = [テーブル1]![伝票番号] & [テーブル1]![部署] & [テーブル1]![金額];
をして、主キーを独自に作った方がいいのか。
アクセスを作るにおいて、どちらの方が良いのでしょうか?
テーブルのレコードは削除したりする事もあるので、オートナンバー型だと空きができてしまいます。
レコードに空きができないデータベースなら、オートナンバー型、
空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?
No.3ベストアンサー
- 回答日時:
よい質問です。
この場合は伝票No.を主キーにすると
番号を間違えて入力してレコードが出来てしまえば
主キーの変更はできません。
削除して新規に入力することになります。
主キーは数値、文字列も可能ですがオートナンバー型を勧めます。
ただしフィールド名はIDのままにせずに
伝票IDとユニークなものに変えておきます。
オートナンバーにすると主キーはACCESS側にお任せになるので、
フォーム、レポート上では省略出来るので、番号に空きが出来ても問題ないでしょう
一般的に主キーとは別に伝票No.、商品コード、取引先コードを用意しますが
これはフォーム、レポートでのレコードの抽出条件、表示(リスト)の順番のためです。
良い質問ですかw実はずっと疑問に思ってた事なのです。
オートナンバー型の主キーで、フィールド名は替えた方が良いようですね。
ありがとうございました。
No.4
- 回答日時:
主キー項目は確かに悩みどころですね。
心中、お察しして余りあるところです。
さてさて、今回ご提示のテーブルのサンプルに関してだけを観点にすると
主キーはオートナンバーに限らず、何か別に持つ必要がありますね。
主キーフィールドは重複不可ですから、
重複が発生している[伝票番号]・[部署]は設定できません。
[金額]を主キーにするという愚かしいことはしないでしょう。
よって、何か別の主キーたりえるフィールドが必要、と言うことです。
そこで一番考えやすいのは、オートナンバーによる[ID]付加ですね。
もう一つ、手段として抑えておきたいのは、
「複数フィールドを組み合わせて主キーとする」と言う方法です。
ご提示のサンプルで言えば、[伝票番号]&[部署]くらいの考え方でしょうか。
つまり、"A001営業部"・"A001システム部"となるフィールド、と言う考えです。
サンプルが多くないので難しいですが、「同じ伝票番号に同じ部署は発生しない」なら
このやり方も十分に有効と思います。
テーブルをデザインビューで開き、(エクセルの行指定の要領で)複数フィールドを選択、
主キーに設定すると、例の鍵のマークが複数あらわれます。
これで、複数のフィールドを組み合わせた主キーの設定が出来ます。
レスポンスが多少落ちるようですが、
例えば私の場合、伝票番号&商品番号で処理をしていますが、
約50万件を扱うテーブルでも(私は)気になる範囲ではありません。
とりあえず、ご参考までに。

No.2
- 回答日時:
>レコードに空きができないデータベースなら、オートナンバー型、
>空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?
空きができるとなにか困ることがあるのでしょうか?
空きができるかどうかはあまりこだわらないほうがいいでしょう。
主キーはユニーク(重複なし)である必要があります。
伝票番号&部署&金額がユニークでないならオートナンバー型にするしかありません。
ユニークになるならどちらでもかまいませんが、わざわざ独自に作るメリットもないでしょう。
ただし、オートナンバー型というのはアクセス独特の型なので、他のデータベースとの互換性を考えるならあまりお勧めできません。
一般的なデータベースの場合は、伝票番号&部署&金額がユニークになるなら3つのフィールドをまとめて主キーとします。
アクセスでもその方法が可能です。
伝票番号&部署&金額がユニークでない場合は、「主キーを設定しない」「ユニークとなるフィールドを捜して主キーとする」「ユニークキーとなるフィールドを独自に作る」のいづれかになります。
>オートナンバー型というのはアクセス独特の型なので、
他のデータベースとの互換性を考えるならあまりお勧めできません。
そうなのですか、知りませんでした。
なるべくオートナンバー型は使わないようにします。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Oracle update文で質問です。 下記の条件でupdateをしたいですが、どのようにしたら良いでしょうか。 2 2022/06/23 10:51
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessのオートナンバーについて
Access(アクセス)
-
テーブルに主キーを作らないデメリットは?
その他(Microsoft Office)
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
-
4
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
5
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
6
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
7
ACCESSでオートナンバーを任意の書式で付けたい
Access(アクセス)
-
8
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
9
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
10
Accessで、固定アルファベット+オートナンバーを表示する
Excel(エクセル)
-
11
Access サブフォームでの選択行の取得
その他(データベース)
-
12
サブフォームのイベント取得
Visual Basic(VBA)
-
13
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
14
「フォームを作成できませんでした」
Access(アクセス)
-
15
accessでオートナンバーを使わずに「文字+数字」の自動採番する方法
Access(アクセス)
-
16
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
17
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
18
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
19
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
20
ACCESSのコンボボックスで入力した値がTABLEに反映されずに数字がでます
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLServer2005のSQL文での別名...
-
INSERT INTO ステートメントに...
-
Accessのフィールド数が255しか...
-
ACCESS検索★ある文字を複数のフ...
-
ACCESS VBAにてCSV...
-
Accessでテーブルの値をテキス...
-
アクセス エラーを数値「0」に...
-
ACCESSでオートナンバーを任意...
-
ExcelのデータをコピーでACCESS...
-
ACCESSでテーブルのフィールド...
-
ACCESSで400以上のフィールドが...
-
アクセス メモ型 255文字...
-
主キーはオートナンバー型のID...
-
フィールド数の多すぎる・フィ...
-
ACCESSでの連番作成
-
アクセス A列コピー B列貼り...
-
ODBC--リンクテーブル'XXXX'で...
-
accessで重複を防ぎたい
-
ACCESS レーダーチャートのデー...
-
ACCESSでテーブルのチェックを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド数が255しか...
-
INSERT INTO ステートメントに...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
SQLServer2005のSQL文での別名...
-
アクセス エラーを数値「0」に...
-
accessのレポートで元になるテ...
-
アクセス メモ型 255文字...
-
【Access】フォームで自動計算...
-
Accessで、固定アルファベット+...
-
アクセス A列コピー B列貼り...
-
ACCESSでオートナンバーを任意...
-
ACCESSでの改行コード
-
ファイルメーカーでCountifの様...
-
主キーはオートナンバー型のID...
-
ACCESS VBAにてCSV...
-
accessで重複を防ぎたい
-
ACCESSで和暦を西暦に・・・
-
Access:リンクテーブルマネー...
-
ACCESSでテーブルのフィールド...
おすすめ情報