
Access2003を使用しています。
前任者が作成したデータベースに修正を加えています。
顧客からの問合せを記録しているT対応履歴という名のテーブルがあります。
対応履歴ID・・・主キー(オートナンバー型)
顧客No
顧客名
商品番号
問合せ区分
問合日
完了日
弊社担当者
内容
原因
対応
備考
などがあります。
その中に修理料金が発生し、修理を依頼した取引先との記録も残すフィールドを加えました。
でも、これは1レコードにつき全て発生するというわけではなくて、どちらかと言えばまれです。
内容としては、次のものがメインになります。
数量
実施日
請求日
支払日
入金確認日
取引先ID・・・取引先テーブルとつながっているため必要
テーブルの設計をするのがはじめての頃だったので、対応履歴の中に加えてしまいました。
別々のテーブルにわけることも考えたのですが、フォームやレポートのリンクがうまくいかなかったので結局一緒にしてしまいました。
やはりこのような場合は、テーブルをわけたほうがよかったのでしょうか?
そのように思うのですが、設計の自信がないため確認させていただきたいのです。
今のところ、その料金が発生した場合のデータは10件ほどです。
今からでも、テーブルをわけたほうがよいのでしょうか?
2ヵ月後ぐらいには料金が発生するような事例が増えると言われています。
直すなら今のうちだと思っています。
設計にお詳しい方、どうぞよきアドバイスをいただけないでしょうか?
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
> フォームやレポートのリンクがうまくいかなかった
私がクエリを使い始めた頃に引っかかった辺りを思い出しつつになりますが・・・
2つのテーブルを「-」で結合したクエリでは、双方のテーブルにデータがある
レコードのみが表示の対象になります。
テーブル1とテーブル2があり、テーブル2での該当レコードの有無に関係なく
テーブル1のレコードは全て表示したい場合は、デザインビューで、以下の
ように「→」での連結にする必要があります。
(ご質問の例で言うと、「-」結合だと修理料金が発生したレコードのみを表示、「→」
結合だと全てのレコードを表示(修理料金が未発生のものは実施日などは空欄))
┌テーブル1┐ ┌テーブル2┐
|* | |* |
|ID |→|ID |
|~ | | |
└――――┘ └――――┘
(以下、この形を「テーブル1→テーブル2」と表記することにし、「-」結合の
場合は「テーブル1-テーブル2」と表記することにします)
また、さらに、3つ以上のテーブルからクエリを作成する場合は、結合の仕方に
よって、データ表示が可能なパターンと、「あいまいな結合が~」というエラーが
表示されるパターンとがあります:
<データシートビューを表示可能>
・「テーブル1-テーブル2-テーブル3」 (全て「-」で結合)
・「テーブル1→テーブル2→テーブル3」 (全て「→」で結合)
・「テーブル1-テーブル2→テーブル3」 (「-」と「→」が混在、矢印の元側に「-」)
・「テーブル1←テーブル2→テーブル3」 (「←」と「→」が混在、矢印の元側が共通)
<「あいまいな結合」エラー発生>
・「テーブル1→テーブル2-テーブル3」 (「-」と「→」が混在、矢印の先側に「-」)
・「テーブル1→テーブル2←テーブル3」 (「←」と「→」が混在、矢印の先側が共通)
クエリが原因だとすると、上記のようなことが考えられるように思いますが、上記の
ようなエラーだったとすると、クエリの作り方で解決できますので、375Kさんご自身で
お考えの通り、また他の方の回答にもあるように、私もテーブルの分割をお勧めします。
分割させました。今のところはうまく動作しているように見えます。
前に設計をたてたときフォームやレポートがうまくいかなかったのは、ご推測いただいてますように結合の仕方を間違えていたからだと思います。
結合の仕方がいまだにしっかりと理解できていなくて、望む結果が得られなくて、VBAが必要なのかもしれないなどと思ってしまうのですが、たいていは結合の仕方を正しく行えば解決できます。
アクセスはリレーショナルシップが大事だとつくづく思いますね。
まだまだ理解できていないので細かく教えていただいて本当に助かります。
おかげで別の設計でもつまづいていたのですが、結合をいろいろと変えて望みのクエリを作ることができました。
ご回答ありがとうございました!
No.3
- 回答日時:
分けたほうがいいでしょうね
案件と対応という親子関係にするといいでしょう
現在の対応履歴から対応関係を外し
料金の有無にかかわらず対応記録として残していけばいいんじゃないですか
そうすれば1案件に対し複数(回)の対応が発生しても記録できるようになります
インタフェースにはメイン・サブフォームを使います
ご回答ありがとうございます。
お知恵をいただきましたことを参考に「案件」と「修理料金」という形でわけました。
ひとつの案件に生ずる細かなやりとりは、メインフォーム「案件」の備考をやりとりメモとみなしてひとつのフィールドにどっか~んと記録することにしたのです。
ひとつのフィールドに記録できる方法を使用者が望んでいるためです。
ですが、複数の回答者様からこの部分を指摘されているので、ここの設計ももう一度考え直す必要がありそうです。
詳細は、QNo.3551458のNo3の回答者様の補足のところにも記入してあります。

No.2
- 回答日時:
問い合わせ・クレーム関係事項と修理発注事項はおっしゃるように別テーブルにすべきです。
修理発注にはしない案件もあり、複数の案件をまとめて発注することもありえますから。
ほかにひとつ考えておくべきこととしてひとつの案件について何回も問い合わせ、クレームがくるかもしれません。それをどのように処理するかということです。
ご回答ありがとうございます。
別テーブルに設計をしなおしました。
>ほかにひとつ考えておくべきこととしてひとつの案件について何回も問い合わせ、クレームがくるかもしれません。それをどのように処理するかということです。
ひとつの案件についての問合せは、メインフォームの中の「備考」を「やりとりメモ」とみなして、メモ型にどっか~んと記録することになっています。
それが使用者の希望なんです。
詳細は、QNo.3551458のNo3の回答者様の補足のところに記入してありますので、よろしかったらご覧ください。そちらのアドバイスもいただけると大変助かります。
No.1
- 回答日時:
服飾デザイナで本職のプログラマじゃありませんので参考程度に・・・。
顧客名簿:
ID__顧客名______取引先_ID
1___鈴木 一郎______________1
2___中村 主水______________2
問合せ履歴:
ID__顧客名簿_ID__問合区分__問合日_________完了日__担当者_ID__内容__原因__対応__備考
1__________________1____________1__2007/11/11________________________1__XX____XX_____XX____XX
2__________________2____________1__2007/11/12________________________2__XX____XX_____XX____XX
料金管理簿:
ID__問合せ履歴_ID__数量__実施日________請求日__支払日__入金確認日
1_____________________1______2__2007/11/11
1、オートナンバーは可能であれば利用しない。(採番テーブル方式が良い)
2、リレーショナルデータベースの機能を利用するにはテーブルは当然に分割。
3、[取引先_ID]は、本来はテーブル[顧客名簿]にあるべきじゃないのでは?
クエリ1:
取引先_ID__顧客名_______問合区分__数量__実施日
____________1__鈴木 一郎__1_________________2___2007/11/11
____________2__中村 主水__1
なお、上記設計でクエリを作成しデータを表示した場合、このようになります。
[問合せ履歴]と[料金管理簿]とを同一テーブルにする必要性がない理由です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) accessについて 2 2022/05/31 16:58
- エアコン・クーラー・冷暖房機 エアコン初期不良の対応について 4 2022/08/04 19:37
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- リフォーム・リノベーション リフォームのトラブルの件で質問失礼します 8 2022/11/09 20:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
私が考えたAccessのテーブル設...
-
ACCESSツール自動バージョンア...
-
データベースの基本についてです。
-
Access2003 リレーションされ...
-
デザインビューで、連結式 を...
-
Accessの計算について
-
Accessで突然編集できなくなり...
-
アクセス2000のルックアッ...
-
Accessでテーブルからテーブル...
-
Accessでエラー
-
テーブルの書き出し?
-
集計方法のアドバイスほしいです!
-
accessのマクロでODBC接続で外...
-
会社別一覧表を作りたい
-
関数の実行について
-
注文した商品名をマスターで作るか
-
2つのテーブルを比較して一致し...
-
Excelについてご質問です。 テ...
-
ACCESSに同時アクセス(編集)を...
-
Accessレコードの追加や変更が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルからテーブル...
-
Accessレコードの追加や変更が...
-
Accessでvlookupみたいなことは...
-
ACCESSのSQLで数値型に変換する...
-
デザインビューで、連結式 を...
-
Accessクエリでの、LIKE条件
-
2つのテーブルを比較して一致し...
-
access テーブル内のレコード...
-
テーブル作成クエリで主キーを設定
-
SQLで条件指定結合をしたいがNU...
-
3つの表を1つに縦に連結する
-
ACCESSに同時アクセス(編集)を...
-
Accessの追加クエリで既存のテ...
-
ファイルメーカ 検索実行せず...
-
リンクテーブルを CopyObject ...
-
DAOのTableDefs("TblName").Con...
-
INSERT時にデータ登録とmaxの発...
-
ODBCで接続するとDBに変更/追加...
-
SQLで日付を条件に削除したい
おすすめ情報