 |
PSQL Programmer's Guide (v11) |
 |
|
キー (リレーショナル インターフェイス)
RI を使用するには、キーを定義する必要があります。キーには、主キーと外部キーの 2 つのタイプがあります。
主キーとは、テーブル内の各行を一意に識別する列または列のグループのことです。キー値は常に一意であるため、行の重複の検出または防止に使用することができます。
外部キーは、テーブルの関係における従属テーブルと親テーブルで共通の列または列のセットです。親テーブルは、主キーとして定義された一致する列または列のセットを持つ必要があります。外部キーは親テーブルの主キーを参照します。これは、1 つのテーブルから別のテーブルへの列の関係で、トランザクショナル データベース エンジンに参照制約を行わせる機能を提供します。
主キー
優れた主キーは次のような特性をもちます。
- これは必須で、非ヌル値を格納する必要があります。
- 一意であること。たとえば、Student または Faculty テーブルの ID 列は、それぞれ一意に定義されているため、優れたキーと言えます。人の名前を使用することは、複数の人が同一名である可能性があるため、あまり実用的ではありません。また、データベースは名前のバリエーション(たとえば、Andrew に対する Andy や Jennifer に対する Jen)を同一のものとして検出することができません。
- 安定性があること。学生の ID は、個人を一意に識別するだけでなく、人の名前が変更される可能性があるのに対し変更されることがないので、優れたキーです。
- 短いこと。文字数が少ないこと。小さな列はストレージのわずかなスペースしか占めず、データベースの検索が早く、入力ミスが少なくなります。たとえば、9 桁の ID 列は 30 文字の名前列より簡単にアクセスできます。
主キーの作成
テーブルに外部キーを作成することにより、参照制約を作成します。ただし、外部キーを作成する前に、外部キーが参照する親テーブルの主キーを作成する必要があります。
テーブルは主キーを 1 つだけ持つことができます。次のいずれかを使用して主キーを作成することができます。
- CREATE TABLE ステートメントの PRIMARY KEY 句
- ALTER TABLE ステートメントの ADD PRIMARY KEY 句
次の例は、サンプル データベースの Person テーブルに、主キー ID を作成します。
ALTER TABLE Person
ADD PRIMARY KEY (ID);
主キーを作成する場合、Pervasive PSQL は、一意、非ヌル、変更不可能なインデックスを使用して主キーをテーブル上に実装することを忘れないでください。指定した列にそのようなインデックスが存在しない場合、Pervasive PSQL は、これらの特性を持ち、主キー定義に指定された列を含む、名前のないインデックスを追加します。
主キーの削除
主キーを削除できるのは、それに依存する外部キーをすべて削除した後だけです。テーブルから主キーを削除するには、ALTER TABLE ステートメントで DROP PRIMARY KEY 句を使用します。テーブルには 主キーが 1 つしかないため、次の例に示すように、主キーを削除するときに列名を指定する必要はありません。
ALTER TABLE Person
DROP PRIMARY KEY;
主キーの変更
テーブルの主キーを変更するには、次の手順を行います。
- ALTER TABLE ステートメントで DROP PRIMARY KEY 句を使用して既存の主キーを削除します。
メモ
このことにより、主キーに使用された列やインデックスが削除されることはありません。主キー定義を削除するだけです。主キーを削除するには、その主キーを参照する外部キーがあってはいけません。
- ALTER TABLE ステートメントで ADD PRIMARY KEY 句を使用して新しい主キーを作成します。
外部キー
外部キーは、テーブルの関係における従属テーブルと親テーブルで共通の列または列のセットです。親テーブルは、主キーとして定義された一致する列または列のセットを持つ必要があります。外部キーを作成すると、従属テーブルとその親テーブルの間に参照制約またはデータ リンクを作成することになります。この参照制約には親テーブルの従属行を削除または更新する規則を含めることができます。
外部キー名は省略可能です。外部キー名を指定しない場合、Pervasive PSQL は外部キー定義の最初の列の名前を使用して外部キーを作成しようとします。外部キーとその他のデータベース要素の名前付け規則については、名前付け規則を参照してください。
Pervasive PSQL のキーワードは予約語であるため、これらはデータベース要素の名前付けには使用できません。Pervasive PSQL のキーワードの一覧は、『SQL Engine Reference』の SQL の予約語を参照してください。
既存のテーブルに外部キーを作成する
既存のテーブルに外部キーを作成するには、次の手順を行います。
- 参照する親テーブルに主キーが存在することを確認します。
- 主キーと外部キーのすべての列は同一のデータ型と長さで、一連の列の順序は両方の定義で同じである必要があります。
- Pervasive PSQL は、外部キー定義に指定された列または列のグループに非ヌル インデックスを作成します。テーブル定義に既にそのようなインデックスが存在する場合、Pervasive PSQL はそのインデックスを使用します。存在しなければ、Pervasive PSQL は非ヌルで、一意ではなく、変更可能なインデックス属性を持つ名前のないインデックスを作成します。
- ALTER TABLE ステートメントで ADD CONSTRAINT 句を使用して新しい外部キーを作成します。
- たとえば、次のステートメントは、サンプル データベースの Faculty テーブルの Dept_Name 列に Faculty_Dept という名前の外部キーを作成します。外部キーは Department テーブルに作成された主キーを参照し、削除制限規則を指定します。
ALTER TABLE Faculty
ADD CONSTRAINT Faculty_Dept FOREIGN KEY (Dept_Name)
REFERENCES Department
ON DELETE RESTRICT;
テーブル作成時に外部キーを作成する
テーブル作成時に外部キーを作成するには、次の手順を行います。
- 参照する親テーブルに主キーが存在することを確認します。
- 主キーと外部キーのすべての列は同一のデータ型と長さで、一連の列の順序は両方の定義で同じである必要があります。
- Pervasive PSQL は、外部キー定義に指定された列または列のグループに非ヌル インデックスを作成します。テーブル定義に既にそのようなインデックスが存在する場合、Pervasive PSQL はそのインデックスを使用します。存在しなければ、Pervasive PSQL は非ヌルで、一意ではなく、変更可能なインデックス属性を持つ名前のないインデックスを作成します。
- CREATE TABLE ステートメントを使用してテーブルを作成し、FOREIGN KEY 句を含めます。
- たとえば、次のステートメントは、Course テーブルの Dept_Name 列に Course_in_Dept という外部キーを作成します。
CREATE TABLE Course
(Name CHAR(7) CASE,
Description CHAR(50) CASE,
Credit_Hours USMALLINT,
Dept_Name CHAR(20) CASE)#
ALTER TABLE Course
ADD CONSTRAINT Course_in_Dept
FOREIGN KEY (Dept_Name)
REFERENCES DEPARTMENT(Name)
ON DELETE RESTRICT
外部キーの削除
テーブルから外部キーを削除するには、ALTER TABLE ステートメントで DROP CONSTRAINT 句を使用します。テーブルには複数の外部キーがある可能性があるため、外部キーの名前を指定する必要があります。
ALTER TABLE Course
DROP CONSTRAINT Course_in_Dept;
 テーブル間の関係の定義 (リレーショナル インターフェイス) |
 参照制約 (リレーショナル インターフェイス) |
|