Microsoft Access 掲示板

IDについて

5 コメント
views
4 フォロー

現在作成しているデータベースについてですが
それぞれのテーブルのID(主キー)が短いテキストと、数値が混在しています。
短いテキストは、元データがあってひっぱってきたID
数値は、フォーム入力データでオートナンバーです。
なんだか同じIDなのに紛らわしい感じで気になって、
引っ張ってきたIDも数値にしてみたところ
「00000」が存在するので、新規が全部「00000」のデータになってしまい諦めました。
実務では、このように混在させることはよくあることなのでしょうか?
経験者の意見を聞きたく、初心者ゆえの質問です。宜しくお願いいたします。

トマト
作成: 2020/09/04 (金) 11:27:50
通報 ...
1

実務では、このように混在させることはよくあることなのでしょうか?

ないです(キッパリ)。

ただ、その説明では曖昧な部分があるので、下記の点について補足してもらえますか。

数値は、フォーム入力データでオートナンバーです。

この「オートナンバー」というのは「オートナンバー型」のフィールドという意味ではなく、
VBAかなんかで自動採番する機能を実装しているという意味ですよね。

短いテキストは、元データがあってひっぱってきたID

外部のデータを既存のテーブルに追加インポートしたということですか。

あと、具体的に主キーフィールドにどのような値が格納されているか例示してもらえますか。

たぶん、下記のような設定にすればいいとは思います。
オートナンバー型のフィールドを追加してそれを主キーとする。
外部データのID(テキスト型)、フォームで自動採番したID(数値型) はそれぞれ別のフィールドにする。

2
トマト 2020/09/05 (土) 11:01:24 0029a@1c915

わかりづらく、すみません。
以下のような形です。(実際はもっとテーブルがあるのですが)
テーブルB,Cにおいてオートナンバー型のフィールドを追加し、
主キーとした方がよいということでしょうか。
今のところ桁数もバラバラですが、わかりやすいようにあわせたりしますでしょうか。

●テーブルごとの主キー
テーブルAの商品ID 01(オートナンバー型の数値フィールド)
テーブルBの顧客ID 0001(外部のデータを常に既存のテーブルに追加インポート。短いテキスト)
テーブルCの会社ID 0001(外部のデータを常に既存のテーブルに追加インポート。短いテキスト)
テーブルDの担当者ID 001(オートナンバー型の数値フィールド)

3

あ!それぞれ別のテーブルの主キーということですね。よくみたらそう書いてありますね。
一つのテーブルにフォームから入力したり、インポートしたりすると読み違えてました(;^_^A

なら、それぞれのテーブルに適したデータ型にすればいいので、現状でも問題ないです。

ただ、外部のデータの場合、仕様が変わったりデータミスがあったりする可能性があるなら、別にオートナンバー型フィールドを追加して主キーにした方かいいかも知れません。
また、追加順が必要な場合もオートナンバー型のフィールドは必要ですね。インポートした場合、Accessは入力順を保持しないので。

4
hiroton 2020/09/07 (月) 10:26:31 2d6b2@f966d

「サロゲートキー」「ナチュラルキー」という考え方があります

例えば、「型番」なんかはユニークであることも多いのでそのまま主キーとしたりすることがあります。英数混合だったりするとテキスト型である必要があったりもします

でもだいたい「型番」がユニークかどうかわからないという恐怖体験を味わうのでIDフィールドを作ってオートナンバー振ってしまいます

実務では、このように混在させることはよくあることなのでしょうか?

必要に応じて設定すればおのずとそうなるというものですね。また、外部とデータのやり取りをする場合はどうしてもデータ的にはテキスト型(文字列)となってしまうので、インポート時に数値に変換するというのもよくある話です。今回の質問も雰囲気的には数値型に変えてしまってもいいように見えます


「00000」が存在するので、新規が全部「00000」のデータになってしまい諦めました。

テーブル設計でフィールドの規定値を設定すると回避できます。数値型のフィールドはデフォルトの規定値が「0」なのでこの値を変える(または削除する)と良いでしょう

5
トマト 2020/09/07 (月) 23:17:00 0029a@1c915 >> 4

>今回の質問も雰囲気的には数値型に変えてしまってもいいように見えます

アドバイスありがとうございます。見た目が数値なのに数値とテキストが混ざっていると
自分も勘違いしたり引継時にもわずらわしいかなと思って悩んでいました。
全て数値に合わせる方向で検討してみようかと思います。
ありがとうございます!