【問題ID: 8505】について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014-8-21 0:13
ikoma_guro  新米   投稿数: 2
初めてココを利用させて頂きます。
下記、表の作成と管理について質問させてください。

以下、問題文。

次のSQL文のうち、エラーとなるものはどれですか(該当するものを全て選択して下さい)。

CREATE TABLE temp
(
 id NUMBER(2) CONSTRAINT id_uq UNIQUE NOT NULL,
 name VARCHAR2(10) CONSTRAINT name_nn NOT NULL,
 birth DATE,
 CONSTRAINT temp_uq UNIQUE(id, name)
);

 ・・・・・

【質問】
上記のCreate文は、列制約になるのでしょうか?表制約なのでしょうか?
私としては、列制約と表制約が混ざっているCreate文だと思い、エラーになる認識だったんですが。。。


どなたか、ご教授の程お願い致します。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014-8-21 10:30
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
上記のCreate文は、列制約になるのでしょうか?表制約なのでしょうか?
両方、じゃないかと。
参考URL1個目の先でも
引用:
一意制約は、列を一意キーとして指定します。複合一意キーは、列の組合せを一意キーとして指定します。一意制約を表内に定義する場合に必要となるのは、UNIQUEキーワードのみです。一意制約を表外に定義する場合は、1つ以上の列も指定する必要があります。複合一意キーは、表外に定義する必要があります。

一意制約を満たすには、表の中の2つの行が一意キーに対して同じ値を持たないようにする必要があります。
とありますので、この選択肢の場合
・id列は一意キー指定された列
・複合一意キーとしてid, name列が表外に指定されている。
・id列は主キーではないので、参考URLの記述にある制限事項「同一の列または列の組合せを一意キーと主キーの両方には指定できません。」には該当しない
ですので、エラーにならないです。

実行環境も作って確認されるとよいかと思います。
参考:
http://ping-t.com/modules/forum/index.php?topic_id=2294
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014-8-21 11:00
ikoma_guro  新米   投稿数: 2
回答ありがとうございます。

そもそもの話、列制約と表制約を混合することができるんですね!
そのことを知らず、実行環境で試してもエラーにならなかったので、質問させて頂きました。

すっきりしました、ありがとうございます。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.