ORACLEMASTER 備忘録8(3/10)
続き
データの整合性
Oracleでは、表の1つ以上の列に「整合性制約」を定義できる。整合性制約とは、“列に格納されるデータを制限するルール”。整合性制約を正しく定義することで、表内のデータを常に正しい状態にすることができる。例えば、NULL値が入ってはいけない例がある場合、その列に“NOT NULL制約”を定義しておけば、その列にNULL値が格納されるのを防ぐ。
列にデータを挿入/更新する際に、ユーザーが使用するアプリケーション側でチェックすることも可能だが、整合性を利用すれば、アプリケーション側で特別なコードを書くことなく、格納されるデータを制限できる。Oracleには次の整合性がある。
データベースにおける整合性制約
NOT NULL:NOT NULL:値が“NULL”になることを禁止する。
一意キー:UNIQUE:複数の行で、同じ列の組み合わせで同じ値を持つことを禁止する。ただし、値がNULLになることは“許可される”。一つの表に複数設定できる。
主キー:PRIMARY KEY:“NOT NULLと一意キーが組み合わさるのと同じ動作になる”。主キーの値は重複することはなく、必ず値が存在しなければならない。主キー制約は、一つの表に“最大1つ”設定できる。
“複合主キー”(複数の列の組合せで主キーとする)の場合は、主キー列の組合せで、複数の行の値が同じにならないように、また各列の値がNULLにならないようにする。
外部キー:FOREIGN KEY:複数の表に関連付けるための“共通する列”。表の各行について、外部キーの列の値が親キー(参照先の列)の値に一致することが要求される。“参照整合性制約”とも呼ばれる。
チェック:CHECK:データベースの値が“指定された条件”を満たすようにする。例えば、給与の値は100000以上、性別の値は男女どちらかにしたい場合など。
※Oracleでは、列に対して主キー制約や一意キー制約を作成すると、暗黙的に“一意索引”が作成される。
※外部キー制約において、外部キー制約で参照する表を「親表」、参照先の列を「親キー列」という。また、外部キー制約が定義されている表を「子表」という。外部キー制約は主キー制約、一意キー制約が定義されている列しか参照できない。
表の作成
表を作成すると、表の定義情報はSYSTEM表領域にあるデータディクショナリに格納される。表にデータを挿入すると、表セグメントに対する一つ目のエクステントが、指定した表領域に割り当てられる。