InterBase クイック スタート:Part II - スクリプトを使用したテーブルの作成
InterBase クイック スタート:Part II - データ定義 へ戻る
ここまでで、テーブルの作成方法は理解しているはずです。残りのテーブルを、SQL スクリプトを使用して作成していきましょう。テーブルについての構文をさらに吟味したい場合には、TABLES.SQL
スクリプトを参照してください。たとえば、Employee
テーブルの定義には、salary
列のための複雑な CHECK
制約が含まれています。
CHECK ( salary >=
(
SELECT min_salary
FROM job
WHERE job.job_code = employee.job_code
AND job.job_grade = employee.job_grade
AND job.job_country = employee.job_country)
AND
salary <=
(
SELECT max_salary
FROM job
WHERE job.job_code = employee.job_code
AND job.job_grade = employee.job_grade
AND job.job_country = employee.job_country))
この制約は、社員の給与が、その社員の仕事の最低給与(job_code
、job_grade
、job_country
で指定される)よりも大きく、最大給与より小さいことを保証するためのものです。
目次
TABLES.SQL スクリプトを実行する
TABLES.SQL
スクリプトを読み込みます。- クエリを実行します。
- メモ: エラーが表示された場合、ヘルプのためにトラブルシューティング セクションを参照してください。
- テーブルが今存在していることを確認するには、IBConsole の左ペインにある テーブル 項目をクリックします。次のようなテーブルが表示されます:
バックアップの時間です
TABLES.SQL
スクリプトを正常に実行できたら、データベースをバックアップするのに良いタイミングでしょう。
トラブルシューティング
ドメイン定義を入力している際にミスを犯していると、TABLES.SQL
スクリプトを実行したり、テーブルを手動で定義した際に、エラー メッセージが表示されます。
エラーを識別するには:
- スクリプトを実行した場合: ログ ファイルを見ます。ログ ファイルは、スクリプト ファイルと同じディレクトリにあります。
- クエリを実行した場合: SQL 出力領域に、発生したエラーが表示されます。
どの場合でも、特定のテーブルに問題がある場合、このようなエラー メッセージが現れます:
Statement failed, SQLCODE = -607 Dynamic SQL Error -SQL error code = -607 -Invalid command -Specified domain or source column does not exist
問題を解決するには、次のステップを行います:
- エラー メッセージを読みます。 この例の場合、指定されたドメインが存在していない、と告げています。 つまり、ドメイン名を入力する際に、おそらくエラーを犯したのでしょう。
- IBConsole の左ペインで、ドメインを選択します。
- 手動で定義したドメインが 4 つあるのが確認できるはずです(
FIRSTNAME
、LASTNAME
、EMPNO
、DEPTNO
)。ドメインの名前が正しいか確認します。大抵の場合、名前のミススペルです。 - 次のコマンドを入力、実行して、誤ったドメインをドロップします:
DROP DOMAIN domain_name
- 適切な
CREATE DOMAIN
文を使用して、ドメインを再度作成します。 TABLES.SQL
スクリプトを再び実行します。
まだ、エラーが確認できます:
- エラーに関係しているテーブルを識別します。
- このテーブルに対して定義されているドメインがいずれも、データベース内に含まれており、存在していることを確認してください。ある場合には、問題はおそらくドメインの定義にあります。特定のドメインの定義を吟味するには、次の行います:
- IBConsole の左ペインで、ドメインを選択します。
- 右ペインにあるドメイン名を右クリックし、プロパティ を選択します。
- メタデータ タブに切り替えます。
- ドメイン定義が正確であることを確認します。エラーが参照しているドメインやテーブルに対して、これを行います。
たとえば、これは、COUNTRYNAME
ドメイン用のメタデータ タブです。
テーブルの変更
Department
テーブルの定義を見てみます。
- IBConsole の左ペインで、テーブルを選択します。
- 右ペインにある
Department
テーブルを右クリックし、プロパティ を選択します。 - メタデータ タブに切り替えます。 次の図のようなものが表示されているはずです:
既存のテーブルの構造は、ALTER TABLE
文で変更できます。 テーブルを変更するための、簡素化された構文は次の通りです:
ALTER TABLE table_name
<operation1> [,
<operation2>, …]
operation = ADD column
| ADD table_constraint
| ALTER [column] col_name <alt_col_clause>
| DROP column
| DROP CONSTRAINT constraint_name
制約は、作成時に名前を割り当てた場合、どのようにドロップできるか、注意してください。ALTER TABLE
文の定義の詳細については、「ALTER TABLE」を参照してください。
Department テーブルを変更する
このセクションでは、新しい列を 5 つと、外部キー制約 2 つを、Department
テーブルに追加していきます。
- 対話型 SQL ウィンドウを開き、次の文を入力します:
ALTER TABLE Department ADD head_dept DEPTNO, ADD mngr_no EMPNO, ADD budget BUDGET, ADD location VARCHAR(15), ADD phone_no PHONENUMBER DEFAULT '555-1234', ADD FOREIGN KEY (mngr_no) REFERENCES employee (emp_no) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT fkdept FOREIGN KEY (head_dept) REFERENCES department (dept_no) ON DELETE CASCADE ON UPDATE CASCADE
-
Department
テーブルの メタデータ を再び開き(「テーブルを変更する」セクションのステップを参照)、定義における違いを確認します:
さらなるトラブルシューティング
テーブルの変更時、またはデータの挿入時、エラー メッセージを受け取った場合、メタデータ タブを使用して調べます。
- 手入力したテーブルそれぞれの定義を吟味し、このチュートリアルが提供しているコード スニペットと比較します。
- 問題を見つけたら、テーブルをドロップしてそれを再構築するか、
ALTER TABLE
文を使用して、列をドロップし(ALTER TABLE table_name DROP column_name
)、それからその列を再び正しい定義を使用して追加します(ALTER TABLE table_name ADD column_name column_def
)。テーブルそのものの名前を打ち間違えていた場合、テーブルをドロップして(DROP TABLE table_name
)、再度作成します。