◆◇------------------------------------------------------------------◆◇
【問い】対象試験:Oracle入門
住所表(ADDRESS)の社員番号には外部キーが設定されており、社員表(EMP)
の社員番号を参照します。社員が退職した場合、社員表からデータを削除しま
すが、住所表のデータについても同時に削除させるためのDELETE文のオプショ
ンとして適切なものを1つ選びなさい。
a.CASCADE
b.ON DELETE CASCADE
c.CASCADE DELETE
d.ON DELETE SET NULL
e.オプションはなくても、外部キーが設定されているため自動で削除される
【答え】
b
【解説】
参照整合性制約(FOREIGN KEY)の問題になります。
上記の場合、親表(参照表)である社員表の社員番号列(親キー)を、
住所表の社員番号列が外部キーとして参照しているということになります。
社員表に存在しない社員の住所は、住所表には登録できない・・という
ことですね。
外部キーを設定する時の約束事として、下記のようなものがあります。
・両方の列のデータ型が同一である
・親キー=主キーまたは一意キー
また、親表内の行を削除時、以下のようなオプションをDELETE文に付加す
ることができます。
・ON DELETE CASCADE:親表内の行削除時、子表の依存行削除
・ON DELETE SET NULL:親表内の行削除時、子表の列値をNULLに更新
親表に対応する列値がないと、子表のデータは存在してはいけないため、
逆に親表のデータを削除する際に、紐づく子表のデータも削除してしまおう
というのが「ON DELETE CASCADE」であり、子表のレコード自体は残したい
ので、NULLに更新しておこうというのが「ON DELETE SET NULL」です。
今回の場合は、EMP 表のデータ削除時にADDRESS表のデータも削除させたい
ため、「ON DELETE CASCADE」を使用します。
◆◇------------------------------------------------------------------◆◇
親表の主キーの追加、SQL 文:
ALTER TABLE LOCATION
ADD ( PRIMARY KEY (LOCATION_CD) )
子表の外部キーの設定、SQL文:
alter table LOCATIONMACHINEMST add constraint FK_2 foreign key (LOCATION_CD)
references LOCATION