質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

11297閲覧

Accessで簡易E-BOM作りたい。テーブル設計教えてください。

Ryoooful

総合スコア11

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

1グッド

0クリップ

投稿2018/09/13 13:24

Accessで簡易E-BOMを作りたい。

データベース設計を身近に相談できる人がいないので教えてください。
Accessで簡易E-BOMを構築しています。

基本的には製品番号に部品番号がN数ぶら下がるように下記のようなテーブル構造を考えました。
イメージ説明

しかし、製品番号に別の製品番号がくっつくこともあるため、t_構成部品一覧の部品番号に製品番号が入る場合もあり、ここの設計で困っています。

製品①と製品②をASSYして製品③を作る
[製品①と製品②をジョイントでつなげて製品③を作る]

t_製品番号とt_部品番号をUNIONクエリでまとめて、それをt_構成部品一覧と外部結合させて登録用フォームを作成すると更新や追加ができず、t_製品番号を複製してとt_製品番号1とt_部品番号を参照整合性を付けると片方に存在しない番号はエラーではじかれてしまう。
イメージ説明
[UNIONクエリでt_製品番号とt_部品番号を結合させたクエリ1]
イメージ説明

t_構成部品一覧の部品番号にはt_製品番号かt_部品番号のどちらに番号があればOKみたいなかたちで設計することはできませんか?

また、こういった問題が発生した場合、どうやって設計を行うのか教えていただけませんか?
よろしくお願いします。

Ta-tun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

製品番号と部品番号の番号体系が別で重複しないなら不要ですが、重複する場合を考慮してその識別は項目として持っていた方が良い気がします。
その場合、Accessの特性上冗長になりますが、joinする項目はそれぞれのテーブルに持たせた方が良いです。

t_構成部品一覧(製品番号,識別,構成部品番号)
t_製品番号(識別,製品番号)
t_部品番号(識別,部品番号)
※識別=(0:部品,1:製品)などとする。

上記構成を、[UNIONクエリでt_製品番号とt_部品番号を結合させたクエリ1]と同等の関係は以下のようなSQLで表わせます。

SQL

1select * 2from (( 3 t_製品番号 as t1 4 left join t_構成部品一覧 as t2 5 on t1.製品番号=t2.製品番号 6 ) left join t_製品番号 t3 7 on t2.識別=t3.識別 and t2.構成部品番号=t3.製品番号 8 ) left join t_部品番号 t4 9 on t2.識別=t4.識別 and t2.構成部品番号=t4.部品番号

基本的には、元の構成でもunionクエリーを使わずに同じ表現はできると思います。
unionクエリーを使用すると更新できないクエリーになるので、それが根本的な理由だと思います。

投稿2018/09/13 16:46

編集2018/09/13 16:52
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問