過去の桐井戸端BBS (桐ver.8)
10783 実表の更新ができる1-n結合表の削除 ぺて 2001/04/08-02:19
主キーをもつ表Aと参照整合性が定義されている表Bで1−nの結合をして実表の更新ができる表Cがあります。

そこで表Cのデータを削除すると、主キーをもつ表Aのデータも削除されます。

1−n結合なので、表BおよびCには、主キーに対して複数のレコードがありますが、
表Cからそのひとつを削除すると、主キーをもつ表Aのレコードが削除されるため、
同じキーをもつ表Bのデータはすべてなくなることになります。
つまり、表Cからひとつのレコードを削除しただけで同じキーのレコードがごそっとなくなるわけです。

表Cから削除したとき、表Bの該当するレコードのみ削除してほしいのですが、
実表の更新ができる1−n結合とはこういうものなのでしょうか?

ちなみに表Cには、表Aから更新不可で3項目ほどもってきていますが、主キーは入れていません。
10788 Re:実表の更新ができる1-n結合表の削除 佐田 守弘 2001/04/08-13:54
記事番号10783へのコメント
ぺてさん
始めに確認いたします。
>主キーをもつ表Aと参照整合性が定義されている表Bで
>1−nの結合をして実表の更新ができる表Cがあります。
と書かれていますが、表Cではなくて、結合表Cですね。
そうでないと意味が通じませんので。

さて、Cは表ではなく、結合表であるとして話を進めます。

>表Cから削除したとき、表Bの該当するレコードのみ削除して
>ほしいのですが、実表の更新ができる1−n結合とは
>こういうものなのでしょうか?

おそらく参照整合性は、
「主キーを削除する時」「参照項目も削除する」
に設定してあると思います。この設定では御質問の様な挙動になります。
なぜなら、この結合表では、A表から主キー項目は入っていなくてもいくつかの項目を持って来ています。
A表のその値のレコードを削除する訳なので、該当する主キーを参照しているB表の全レコードが削除される訳です。

対策は、
「参照項目がある時は削除禁止」
に設定し直してみて下さい。
この設定により主キー表の該当レコードは削除されず、その結果として
その主キー値を参照しているB表のたのレコードは削除されません。

佐田守弘(KS-00119)
10789 Re:実表の更新ができる1-n結合表の削除 ぺて 2001/04/08-14:40
記事番号10788へのコメント
佐田さん回答ありがとうございます。
>
>さて、Cは表ではなく、結合表であるとして話を進めます。
おっしゃる通り表Cは結合表です。


>対策は、
>「参照項目がある時は削除禁止」
>に設定し直してみて下さい。
>この設定により主キー表の該当レコードは削除されず、その結果としてその主
>キー値を参照しているB表のたのレコードは削除されません。

「参照項目がある時は削除禁止」を選ぶと主キーのレコードは参照項目があるかぎり削除できなくなりますよね。
結合表Cから該当する表Bの1レコードだけ削除することはできないのでしょうか。
結合を、主キーをもつレコードの項目を参照する目的で使うなってことなのかなぁ・・

10793 Re:実表の更新ができる1-n結合表の削除 佐田 守弘 2001/04/08-18:30
記事番号10789へのコメント
ぺてさん

>「参照項目がある時は削除禁止」を選ぶと主キーのレコードは
>参照項目があるかぎり削除できなくなりますよね。
>結合表Cから該当する表Bの1レコードだけ削除することは
>できないのでしょうか。

私のテストでは、表Bの1レコードが削除できましたが。
どこか他に原因があるかも知れませんね。
10799 Re:実表の更新ができる1-n結合表の削除 ぺて 2001/04/09-02:02
記事番号10793へのコメント
佐田 守弘さんお世話になっています。

>私のテストでは、表Bの1レコードが削除できましたが。
>どこか他に原因があるかも知れませんね。

どこか設定があるのだと思って格闘しましたが
どうも私の言葉がたりなかったようです。
参照項目のデータがあるとして、

○「主キーを削除する時」「参照項目も削除する」の場合
  1.結合表Cから一つレコードを削除すると
    同じ主キーのレコードがごそっとなくなる
  2.表A(主キー)のレコードを削除することができる。

○「主キーを削除する時」「参照項目がある時は削除禁止」の場合
  1.結合表Cから一つレコードを削除すると
    表B(参照キー)の該当するレコードだけが削除される
  2.表A(主キー)のレコードは削除できない

ということですね。
編集は表Bに対して行い、表Aのデータも一覧表の一部に表示するということはできないのでしょうか。

名簿の表Aに主キーをもたせ、そこから参照項目をもつ複数の表をつくろうと思うのですが、
名簿から一名削除するのにすべての参照項目をチェックするのは大変ですね。
参照項目をもつ表にも名簿のデータをもたせて一つの表でやるべきなのでしょうか。
適せん、名簿と照らし合わせて併合、データの更新となるのかな・・?

10805 Re:実表の更新ができる1-n結合表の削除 みすず 2001/04/09-11:16
記事番号10799へのコメント
>編集は表Bに対して行い、表Aのデータも一覧表の一部に表示する
>ということはできないのでしょうか。

表Bの計算項目に表Aへの#表引き関数を設定するではどうでしょうか?
そのまんま、表Bに表Aの一部を表示するという目的は果たせます。

10812 Re:実表の更新ができる1-n結合表の削除 みすず 2001/04/09-15:47
記事番号10805へのコメント
自己レスです。
表引きだとAを変更しただけではBに反映しないのは玉にきずですね。
10823 Re:実表の更新ができる1-n結合表の削除 佐田 守弘 2001/04/09-21:48
記事番号10799へのコメント
ぺてさん

>編集は表Bに対して行い、表Aのデータも一覧表の一部に表示する
>ということはできないのでしょうか。
の意味が、良く分かりません。この部分ををもう少し詳しく伝えて下さい。

参考までに伝えますと、結合表とは結合された2つの表を同時に編集する機能であり、
一方のみを編集する機能ではありません。
もし外部キー側の表のみを編集するなら、結合表を使うのではなく、
みずずさんが書かれている表引き関数を使って主キー表を計算式で参照する形の表で編集して下さい。
なお、結合表でも主キー表の項目を加えず、外部キー表だけの項目で構成し、
計算項目として主キー表を表引き関数で参照する形のものはつくれます。
これは試した事はありませんが、事によるとお望みのものに近いかも知れません。

佐田守弘(KS-00119)
10824 Re:実表の更新ができる1-n結合表の削除 ぺて 2001/04/10-02:27
記事番号10823へのコメント
みすずさん、佐田さんありがとうございます。

>>編集は表Bに対して行い、表Aのデータも一覧表の一部に表示する
>>ということはできないのでしょうか。
>の意味が、良く分かりません。この部分ををもう少し詳しく伝えて下さい。

主キーをもつ表A(名簿など)を元にして、表Aと重複する項目をいくつかもつ表Bをつくるとします。
例えば、所属場所、年齢、識別番号(主キーとは別)などなど・・
そのときに、表Aと表Bを結合して使えば重複する項目のデータの整合をとるのがとても楽だと考えました。
そこで主キーと参照項目で結合表をつくろうとしたわけです。

>なお、結合表でも主キー表の項目を加えず、外部キー表だけの項目で構成し、
>計算項目として主キー表を表引き関数で参照する形のものはつくれます。
表引き関数を使おうとしたら、なんだかエラーがでて怒られたので
ふつうに主キー表の項目を計算項目として表示させる結合表を作ってみました.
佐田さんのおっしゃることと違うのではずしているかもしれませんが、
みすずさんや佐田さんの助言をためしてみて思ったことを書きます。

結合したとき
  ○.主キーを入れて行追加するとと表引きのように即座に
    表Aのデータが表示される。
  ○.データの整合性を気にする必要がない
  ○.重複する項目を作らなくてすむ。
  ×.結合表からのレコード削除が・・・(質問事項でした)
表引きを利用
  ○.扱いが楽でわかりやすい
  ×.重複する項目が多数あって気持ち悪い
  ×.データの整合性を取るために能動的な行動が必要
結合の計算項目
  ○.重複する項目をつくらなくてすむ(のかな?)
  ×.主キーを入れて行追加しても計算項目のデータの表示には
    再抽出が必要

結局、佐田さんやみすずさんのおっしゃるように、表引きを利用するのが一番楽なのかな・・
と自分なりに結論だしてみました。

桐以外にデータベースをさわったことがなく、このBBSをたよりに勉強しています。
他の方はどのようになさっているのか時々わからなくなります。(こんなんでいいのか・・??と(^^ゞ)
これからもよろしくおねがいします。


戻る