プロが教える店舗&オフィスのセキュリティ対策術

OracleBronzeのSQL基礎の本に
「一般的に主キーの値は変更できない。」
とあるのですがこの一般的にというのは子レコードが存在する場合でしょうか?

子レコードを持たない主キーをUpdate文で更新してみましたが、すんなり更新できたのですが・・・

A 回答 (2件)

主キー(プライマリ・キー)自体の制約は以下です。


・1テーブル内でユニーク(一意)を保証する。
・Nullを許容しない(NotNull)。

ですので、主キー自体の値は物理的には更新可能です。

ただし、例えば以下のような場合に製品テーブルの主キーが
更新された場合どうなるでしょうか。

・製品テーブル(マスタ)
 製品コードが「A1」※主キー
 名称が「ねじA」
・在庫テーブル
 製品コードが「A1」※主キー
 在庫数が100個

製品テーブルに該当するコードがなくなるので、在庫テーブル側からは名称がわからなくなります。リレーショナルが失われるので、製品テーブル側からは在庫数がわからなくなります。

ですので、通常、主キーの更新は行ないません。
しかし、現実世界では様々な統廃合が行なわれるので主キーを更新せざるを得ない場合もあります。その場合は、各テーブルの関係を考慮に入れて、関係するテーブルすべてのキーを更新する必要があります。

子テーブルにレコードがあった場合、親テーブルのレコードが削除できないのは外部キー(フォーリン・キー)です。
この場合は、子テーブルにデータがある限り、親テーブルからは、参照しているレコードを削除することはできません。
    • good
    • 0
この回答へのお礼

丁寧に説明して下さりありがとうございます!

お礼日時:2009/04/20 22:05

Bronzeの本を探し出してみてみましたが、これは「リレーショナルデータベースの用語」のところに書いてあるんですね。


そうしてみると、質問者さんの理解でもいいかもしれませんが、「リレーショナルデータベースでは、一般的に主キーの値は変更されないことを前提にデザインされる」という意味で理解された方がよいと思います。
    • good
    • 0
この回答へのお礼

リレーショナルデータベースの考え方なんですね
ありがとうございました。

お礼日時:2009/04/20 22:06

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

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