主キーはオートナンバー型の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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
テーブルに主キーを作らないデメリットは?
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
Accessで、固定アルファベット+オートナンバーを表示する
Excel(エクセル)
-
-
4
アクセスVBAのMe!と[ ]
Access(アクセス)
-
5
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
6
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
7
Acccessで2つのテーブルから1つのフォームをつくりたい
Access(アクセス)
-
8
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
9
ACCESS 「パラメータの入力」を消したい!!
Access(アクセス)
-
10
Accessで、一覧からクリックして詳細表示したい
その他(Microsoft Office)
-
11
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
12
accessでオートナンバーを使わずに「文字+数字」の自動採番する方法
Access(アクセス)
-
13
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
14
Accessのオートナンバーについて
Access(アクセス)
-
15
新規レコード行を非表示にしたい
Access(アクセス)
-
16
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
17
ACCESSのフォームからデータの追加ができない
その他(データベース)
-
18
Accessフォームのテキストボックス内改行無効の方法
その他(データベース)
-
19
ACCESSで日付ごとに自動連番(日付+連番)する方法
Access(アクセス)
-
20
Access2010 「演算子がありません」エラー
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
accessのレポートで元になるテ...
-
【Access】フォームで自動計算...
-
Accessのフィールド数が255しか...
-
通貨型で\\0の時、何も表示しな...
-
ACCESSでテーブルのフィールド...
-
ACCESS2000「定義されているフ...
-
ACCESSで400以上のフィールドが...
-
アクセス メモ型 255文字...
-
ExcelのデータをコピーでACCESS...
-
ACCESSでの改行コード
-
ACCESS 入力文字数制限
-
ファイルメーカープロVer.8のチ...
-
FileMakerの繰り返しフィールド...
-
ACCESSで和暦を西暦に・・・
-
Accessで別途保存の画像ファイ...
-
ODBC--リンクテーブル'XXXX'で...
-
Accessで連続データってできま...
-
アクセスで複数行の一括入力す...
-
アクセス エラーを数値「0」に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
アクセス エラーを数値「0」に...
-
ACCESSでの改行コード
-
Accessのフィールド数が255しか...
-
accessのレポートで元になるテ...
-
Accessで、固定アルファベット+...
-
INSERT INTO ステートメントに...
-
Access 昇順・降順で並び替え...
-
ExcelのデータをコピーでACCESS...
-
SQLServer2005のSQL文での別名...
-
ACCESSで400以上のフィールドが...
-
アクセス VBAで列の入れ替...
-
IT用語について質問です。 以前...
-
【Access】フォームで自動計算...
-
accessで重複を防ぎたい
-
ACCESSでテーブルのチェックを...
-
ACCESSで和暦を西暦に・・・
-
アクセス メモ型 255文字...
-
主キーはオートナンバー型のID...
-
ACCESSでオートナンバーを任意...
おすすめ情報