SQL Anywhere は、INSERT 文の実行時に整合性検査を実行します。たとえば、部署を新設しようとする場合に、すでに使用されている DepartmentID 値を指定すると仮定します。
INSERT INTO Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES ( 200, 'Eastern Sales', 902 ); |
テーブルのプライマリ・キーがユニークでなくなるため、INSERT は拒否されます。DepartmentID カラムはプライマリ・キーなので、重複する値は許可されません。
次の文は SalesOrders テーブルに新しいローを挿入しますが、Employees テーブル内には存在しない SalesRepresentative ID を誤って指定します。
INSERT INTO SalesOrders ( ID, CustomerID, OrderDate, SalesRepresentative) VALUES ( 2700, 186, '2000-10-19', 284 ); |
Employees テーブルと SalesOrders テーブルとの関係は、SalesOrders テーブルの SalesRepresentative カラムと Employees テーブルの EmployeeID カラムに基づいた 1 対多の関係です。プライマリ・テーブル (Employees) にレコードが入力されている場合にのみ、外部テーブル (SalesOrders) 内の対応するレコードを挿入できます。
Employees テーブルのプライマリ・キーは従業員 ID 番号です。SalesRepresentative テーブル内の営業担当者 ID 番号は、Employees テーブルの外部キーです。つまり、SalesOrders テーブル内にある各営業担当者 ID 番号と、Employees テーブル内にある同じ従業員の従業員 ID 番号を一致させる必要があります。
ID 番号が 284 の営業担当者に対して注文を追加しようとすると、「テーブル 'SalesOrders' の外部キー 'FK_SalesRepresentative_EmployeeID' に対するプライマリ・キーの値がありません。
」のようなエラー・メッセージが表示されます。
Employees テーブルには、その ID 番号を持つ従業員は存在しません。これによって、有効な営業担当者 ID のない注文が挿入されるのを防ぐことができます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |