主キーはオートナンバー型のIDを使った方が良いのか、
独自の主キーを作った方がいいのか?
今は
テーブル1
-------------------
IDフィールド(オートナンバー型) 主キー
1
2
3
-------------------
伝票番号フィールド
A001
A001
A002
-------------------
部署フィールド
営業部
システム部
営業部
-------------------
金額フィールド
100
200
300
-------------------
という状態ですが、
新たに主キーフィールドを作り
更新クエリで
UPDATE テーブル1 SET テーブル1.主キー = [テーブル1]![伝票番号] & [テーブル1]![部署] & [テーブル1]![金額];
をして、主キーを独自に作った方がいいのか。
アクセスを作るにおいて、どちらの方が良いのでしょうか?
テーブルのレコードは削除したりする事もあるので、オートナンバー型だと空きができてしまいます。
レコードに空きができないデータベースなら、オートナンバー型、
空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?
No.4
- 回答日時:
主キー項目は確かに悩みどころですね。
心中、お察しして余りあるところです。
さてさて、今回ご提示のテーブルのサンプルに関してだけを観点にすると
主キーはオートナンバーに限らず、何か別に持つ必要がありますね。
主キーフィールドは重複不可ですから、
重複が発生している[伝票番号]・[部署]は設定できません。
[金額]を主キーにするという愚かしいことはしないでしょう。
よって、何か別の主キーたりえるフィールドが必要、と言うことです。
そこで一番考えやすいのは、オートナンバーによる[ID]付加ですね。
もう一つ、手段として抑えておきたいのは、
「複数フィールドを組み合わせて主キーとする」と言う方法です。
ご提示のサンプルで言えば、[伝票番号]&[部署]くらいの考え方でしょうか。
つまり、"A001営業部"・"A001システム部"となるフィールド、と言う考えです。
サンプルが多くないので難しいですが、「同じ伝票番号に同じ部署は発生しない」なら
このやり方も十分に有効と思います。
テーブルをデザインビューで開き、(エクセルの行指定の要領で)複数フィールドを選択、
主キーに設定すると、例の鍵のマークが複数あらわれます。
これで、複数のフィールドを組み合わせた主キーの設定が出来ます。
レスポンスが多少落ちるようですが、
例えば私の場合、伝票番号&商品番号で処理をしていますが、
約50万件を扱うテーブルでも(私は)気になる範囲ではありません。
とりあえず、ご参考までに。
No.3ベストアンサー
- 回答日時:
よい質問です。
この場合は伝票No.を主キーにすると
番号を間違えて入力してレコードが出来てしまえば
主キーの変更はできません。
削除して新規に入力することになります。
主キーは数値、文字列も可能ですがオートナンバー型を勧めます。
ただしフィールド名はIDのままにせずに
伝票IDとユニークなものに変えておきます。
オートナンバーにすると主キーはACCESS側にお任せになるので、
フォーム、レポート上では省略出来るので、番号に空きが出来ても問題ないでしょう
一般的に主キーとは別に伝票No.、商品コード、取引先コードを用意しますが
これはフォーム、レポートでのレコードの抽出条件、表示(リスト)の順番のためです。
良い質問ですかw実はずっと疑問に思ってた事なのです。
オートナンバー型の主キーで、フィールド名は替えた方が良いようですね。
ありがとうございました。
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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
Access サブフォームでの選択行の取得
その他(データベース)
-
テーブルに主キーを作らないデメリットは?
その他(Microsoft Office)
-
アクセスVBAのMe!と[ ]
Access(アクセス)
-
-
4
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
5
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
6
Accessのオートナンバーについて
Access(アクセス)
-
7
Acccessで2つのテーブルから1つのフォームをつくりたい
Access(アクセス)
-
8
ACCESS 「パラメータの入力」を消したい!!
Access(アクセス)
-
9
Accessで、固定アルファベット+オートナンバーを表示する
Excel(エクセル)
-
10
Accessで、一覧からクリックして詳細表示したい
その他(Microsoft Office)
-
11
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
12
accessでオートナンバーを使わずに「文字+数字」の自動採番する方法
Access(アクセス)
-
13
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
14
新規レコード行を非表示にしたい
Access(アクセス)
-
15
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
16
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
17
ACCESSのフォームからデータの追加ができない
その他(データベース)
-
18
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
19
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
20
ACCESSで日付ごとに自動連番(日付+連番)する方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IT用語について質問です。 以前...
-
ACCESSでテーブルのフィールド...
-
Accessでテーブルの値をテキス...
-
【Access】フォームで自動計算...
-
accessのレポートで元になるテ...
-
ExcelからAccessにデータを取り...
-
Access2003 空レコード挿入
-
ACCESSで和暦を西暦に・・・
-
アクセスのテーブルデータをCSV...
-
Accessでフィールドを追加したい
-
ACCESS VBAにてCSV...
-
オプショングループから文字を入力
-
アクセス エラーを数値「0」に...
-
ACCESSの既存テーブルに、EXCEL...
-
Accessで、フィールドにルック...
-
ACCESS検索★ある文字を複数のフ...
-
ACCESS.ルックアップの値以外...
-
Sqlserver2005でテーブルを作成...
-
accessで順位の合計の順位の求め方
-
view作成時にデータ型を変更し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
Accessのフィールド数が255しか...
-
ACCESSで400以上のフィールドが...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
accessのレポートで元になるテ...
-
アクセス エラーを数値「0」に...
-
ExcelのデータをコピーでACCESS...
-
Accessで、固定アルファベット+...
-
Access 昇順・降順で並び替え...
-
accessで重複を防ぎたい
-
アクセス VBAで列の入れ替...
-
SQLServer2005のSQL文での別名...
-
ACCESSで和暦を西暦に・・・
-
ACCESS2000「定義されているフ...
-
主キーはオートナンバー型のID...
-
ACCESSでオートナンバーを任意...
-
ACCESSでテーブルのフィールド...
-
アクセス A列コピー B列貼り...
-
IT用語について質問です。 以前...
おすすめ情報