プロが教えるわが家の防犯対策術!

こんにちは。Windows NTでAccess2000を使っています。
製造業の伝票情報を整理するためAccessと格闘しているのですが
以下の3つのテーブルの構造と結合で悩んでいます。
T_伝票:伝票番号を始め、得意先名や担当営業名など
    別のデータベースから情報を引っ張る(ゆえに入力不要)
T_商品:その仕事の仕様等、商品の詳細情報を入力。
T_発送:その商品の発送日・納品日などの納期情報

T_伝票とT_商品の伝票番号は重複なしで設定できますが
T_発送は1つの商品を何回かに分けて送るときが多々あるため重複ありです。
3つのテーブルはそれぞれ入力する人が違う(T_商品は複数人)ことも要注意です。

クエリでT_伝票とT_商品の伝票番号をつないでフォームで伝票番号を入力したとき
T_伝票の得意先名や営業名が自動表示されるようにしたいのですが、
両方ともインデックスを重複なしにすると不可能でした。
(特に一対一のリレーションシップは設定していません。)
そこでT_商品の伝票番号インデックスを重複ありにするとクリアできました。
その後で1つの仕事に対して発送情報が複数のレコードになることが判明した為
始めはT_商品と一緒に収めていた発送情報を別テーブルにしなければならなくなりました。
しかしそうすると、どうT_商品とT_発送をつないでよいのかわからなくなりました。
T_商品から追加クエリでT_発送に同じ伝票番号を持たせることを思いつきましたが
T_発送の伝票番号は重複ありでなければならないため
追加のたびに過去のレコードが重複してしまいます。
かといって追加のたびにT_発送を削除していたら
送りが複数にわたる場合の情報が消えてしまうことになります。
(しかも複数人入力の為削除のタイミングも難しいため合理的でない)
どこをどうすればうまく回避できるのか打開策が尽きてしまいました。
どうかよい知恵があればご教授くださいm(_ _)m

A 回答 (3件)

一つの伝票番号に多くの発送情報を対応付けなくてはならないのなら、


T_発送に、伝票番号のフィールドのほか、その伝票番号の中で発送情報を
管理するような子番号(あるいは入力日時とか)のフィールドを別途設けて、
二つのフィールドを組み合わせてキーなりインデックスににすれば
よいのではないでしょうか。
そうすれば、T_発送で伝票番号一括の検索もできますし、
発送情報を個別に識別することもできます。
    • good
    • 0

お力に添えますかどうかわかりませんが



>どうT_商品とT_発送をつないでよいのか・・・
通常はT_商品の伝票番号とT_発送の伝票番号をリレーションするのではなく
T_発送は独自のIDなどを使うのが一般的と思うのですが・・。
例えば発送の際の出荷伝票番号とかです。(あくまで例ですが)
T_発送のテーブル内に発送IDと伝票番号を持たせる。主キーは発送IDで伝票番号は
重複ありのインデックスでOK。
T_商品とT_発送を切り離して考える方が解決方法を見つける近道だと思います。
発送の処理は独自の発送IDで処理するがそのレコード内に伝票番号のフィールドも
あるという考え方であればT_発送で該当する伝票番号の検索等もできT_商品との
リレーションもT_商品の伝票番号とT_発送の伝票番号のフィールドで行えます。
もしくはT_商品の伝票番号+商品IDとT_発送の伝票番号+商品IDで。
>T_発送は1つの商品を何回かに分けて送るときが多々あるため・・
T_商品のレコードに発送チェック用のYes/No型のフィールドを作っておき発送され
た商品はT_発送に発送レコードを保存する際にT_商品の発送チェックにYesを更新
し発送処理をするレコードは発送チェックがNoのレコードのみ表示できるように
しておけば良いのではないでしょうか。
発送処理後T_発送にレコードを追加する際も発送チェックがYesのレコードのみ保存
するようにすれば商品のレコードが重複保存されることがなくなると思います。

質問を一読したところではこんな感じで良いと思うのですが希望する回答でない時
は再度ご連絡をお願いします。

この回答への補足

返信ありがとうございましたm(_ _)m
T_発送に独自のIDを持たせるという件ですが、特に発送独自のナンバーというのがないのでオートナンバーで対処するしかなさそうです。でもこれだとT_商品との結合は不可能ではないでしょうか?
書き忘れましたが操作の手順としては伝票の情報(T_商品+T_発送)は
全て工務を担当する人間が入力し、この発送情報をもとに発送が複数に分かれる場合は
コピー+貼付けで発送日を変更して発送が終わったら済のチェックを入れる…という風にする予定です。
ふと思ったのですが、T_伝票とT_商品での一対一のリレーションシップにおいて
得意先名や営業名の更新がきちんとできないのはなぜなのでしょうか?
T_伝票の伝票番号にキーを持たせているのがまずいとか??
T_商品の伝票番号のインデックスを重複なしにできれば
少しはやりやすくなりそうな気がするのですが…素人意見ですみませんm(_ _)m

補足日時:2002/12/24 11:57
    • good
    • 0

>T_発送に・・でもこれだとT_商品との結合は不可能・・


T_伝票とT_商品は伝票番号でリレーションをとっているのならT_商品のフィールド
で伝票番号と商品IDなどありますよね。T_発送は独自の主キーを使うとして処理の
際にT_商品の伝票番号と商品IDを保存するフィールドを作ってリレーションする
場合はT_商品の伝票番号とT_発送の伝票番号・T_商品の商品IDとT_発送の商品ID
間で繋ぐようにすれば問題ないと思うのですが。
T_発送の独自の主キーは単にT_発送に保存しるレコードのIDとしてのみ使う。

>T_伝票とT_商品での一対一のリレーションシップ
T_伝票の伝票番号は主キー(重複なし)でT_商品の伝票番号はインデックスのみで
(重複あり)にしリレーションはT_伝票とT_商品が一対多のリレーション設定に
すれば良いのではないですか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す