SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Eclipse 3.4からはじめるIDE入門

Eclipse 3.4を使ったデータベース操作 ~Eclipse 3.4 入門~

第7回

Eclipseからの主キー・外部キーの追加

主キー、外部キーを追加する機能

 最後に紹介するのは主キー、外部キー制約を追加する機能です。今回はテーブル「dept」を作成してから主キーを追加し、次にテーブル「emp」にテーブル「dept」への外部キーを設定します。まず、テーブル「dept」を作成します。列の情報のみを定義した下記のCREATE TABLE文を用います。

テーブル「dept」作成用のCREATE TABLE文
CREATE TABLE hellodb.dept
(
    deptno                      INT,
    dname                       CHAR(50)
)
/

 このSQLをSQL実行・ビューに入力し、[全てのSQLを実行]ボタンを押して実行してから、DBツリービューでTABLEを右クリックして[更新(F)]を実行します。

図41:(1)SQL実行・ビューに入力し、(2)[全てのSQLを実行]ボタンを押して実行、(3)DBツリービューでTABLEを右クリックし、(4)[更新(F)]を実行
図41:(1)SQL実行・ビューに入力し、(2)[全てのSQLを実行]ボタンを押して実行、(3)DBツリービューでTABLEを右クリックし、(4)[更新(F)]を実行
主キーの追加

 では、このテーブル「dept」に主キーを追加します。DBツリー・ビューでTABLEの下に現れたdeptをダブルクリックすると、右上にテーブルのビューが表示されるので、[定義情報]タブをクリックします。テーブル名、テーブルコメント、列ごとの情報の下に制約(CONSTRAIT)と索引(INDEX)の定義域が表示されるので、CONSTRAITを右クリックして[主キーの追加(P)]を実行します。

図42:(1)deptをダブルクリックし、(2)[定義情報]タブをクリックし、(3)CONSTRAITを右クリックして(4)[主キーの追加(P)]を実行
図42:(1)deptをダブルクリックし、(2)[定義情報]タブをクリックし、(3)CONSTRAITを右クリックして(4)[主キーの追加(P)]を実行

 「主キーの登録」ダイアログが表示されるので、カラムリストから主キーにしたい列を選んで、[>]ボタンをクリックします。今回は「deptno」を主キーとしました。

図43:カラムリストから主キーにしたい列を選んで[>]ボタンをクリック
図43:カラムリストから主キーにしたい列を選んで[>]ボタンをクリック

 「deptno」がカラムリストから対象カラムに移ったら、「制約名」を入力して[次へ(N)]ボタンをクリックします。今回は制約名を「pk」としました。

図44:制約名を入力して[次へ(N)]ボタンをクリック
図44:制約名を入力して[次へ(N)]ボタンをクリック

 ダイアログは「SQLの確認」に進み、「deptno」を主キーにするためのSQL文が表示されます。[終了(F)]ボタンをクリックします。

図45:SQLを確認して[終了(F)]ボタンをクリック
図45:SQLを確認して[終了(F)]ボタンをクリック

 ALTER TABLE文の実行が完了すると、[定義情報]タブの内容が書き換わります。主キー(PRIMARY KEY)の制約が追加されると共に、deptno列の[必須]のチェックがオンになり、初期値が設定されます。また画面では隠れていますが、主キーに無条件に用意される索引も作成されています。

図46:[定義情報]タブの内容が書き換わる
図46:[定義情報]タブの内容が書き換わる
外部キーの追加

 MySQLで外部キー制約のチェックをサポートするのはInnoDBテーブルに限られます。今回はバージョン5.1を多機能データベースとしてインストールしていますので、InnoDBストレージエンジンが有効であり問題ありませんが、バージョン5.0以前では設定や動作が異なる場合があります。例えば、バージョン5.0ではストレージエンジンを明示的にMyISAMからInnoDBに変更しないと外部キーの制約の設定ができません。

 次に外部キーを設定します。まず、テーブル「dept」にレコードを登録します。今回はテーブル「emp」のdeptnoの外部キーなので、[レコードの追加]ボタンを用いてテーブル「emp」に入力済みのdeptnoを全てテーブル「dept」に入力しておきます。

図47:[レコードの追加]ボタンを用いてテーブル「dept」にデータを入力
図47:[レコードの追加]ボタンを用いてテーブル「dept」にデータを入力

 では、このテーブル「emp」にテーブル「dept」への外部キーを追加します。DBツリー・ビューでTABLEの下のempをダブルクリックすると、右上にテーブルのビューが表示されるので、[定義情報]タブをクリックします。CONSTRAITを右クリックして[外部キーの追加(F)]を実行します。

図48:(1)empをダブルクリックし、(2)[定義情報]タブをクリックし、(3)CONSTRAITを右クリックして(4)[外部キーの追加(F)]を実行
図48:(1)empをダブルクリックし、(2)[定義情報]タブをクリックし、(3)CONSTRAITを右クリックして(4)[外部キーの追加(F)]を実行

 [外部キーの追加]ダイアログが表示されるので、[主キーの登録]と同じ手順でカラムリストからdeptno列を選んで[>]ボタンをクリックし、「deptno」がカラムリストから対象カラムに移ったら、制約名を入力して[次へ(N)]ボタンをクリックします。今回は制約名を「fk」としました。

図49:外部キーにしたい列を選んで[>]ボタンをクリックし、制約名を入力して[次へ(N)]ボタンをクリック
図49:外部キーにしたい列を選んで[>]ボタンをクリックし、制約名を入力して[次へ(N)]ボタンをクリック

 すると、ダイアログは「ForeginKey制約の登録」に進み、参照先のテーブルおよびカラムの選択を求められます。参照元テーブルでdeptを選択すると、カラムリストにテーブル「dept」の列名が表示されるので、deptno列を選んで[>]ボタンをクリックします。deptnoがカラムリストから対象カラムに移ったら、[次へ(N)]ボタンをクリックします。なお、この時、DELETE CASCADEオプションを無効にすることもできます(このオプションがONである場合、参照先テーブルからレコードを削除すると、そのレコードの値を参照している元テーブルのレコードも同時に削除されので注意しましょう)。

図50:(1)参照先のテーブルを選択し、(2)外部キーに参照される列を選んで、(3)[>]ボタンをクリックし、(4)[次へ(N)]ボタンをクリック
図50:(1)参照先のテーブルを選択し、(2)外部キーに参照される列を選んで、(3)[>]ボタンをクリックし、(4)[次へ(N)]ボタンをクリック

 ダイアログは「SQLの確認」に進み、外部キーを設定するためのSQL文が表示されます。[終了(F)]ボタンをクリックします。

図51:SQLを確認して[終了(F)]ボタンをクリック
図51:SQLを確認して[終了(F)]ボタンをクリック

 ALTER TABLE文の実行が完了すると、[定義情報]タブの内容が書き換わります。外部キー(FOREGIN KEY)の制約が追加されると共に、外部キーに無条件に用意される非一意索引も作成されています。

図52:[定義情報]タブの内容が書き換わる
図52:[定義情報]タブの内容が書き換わる

 これで主キーと外部キーが設定できたので、テーブル「emp」のDDLを確認してみましょう。[DDL]タブをクリックすると、元々あった主キー制約の下に外部キー制約が追加されていることがわかります。

図53:[DDL]タブの内容も反映されている
図53:[DDL]タブの内容にも反映している

 では、外部キーの働きを確認してみましょう。emp表のどれかのレコードのdeptnoをテーブル「dept」に存在しない値にしてみます。今回は5件目を400にしてEnterキーを押しました。

図54:5件目のdeptnoを400にしてEnterキーを押すと
図54:5件目のdeptnoを400にしてEnterキーを押すと

 すると、DBViewerのエラーダイヤログが表示されます。理由(英文)のとおり、外部キー制約(a foreign key constraint)により、参照する列の値をこのように変更することは認めないという制約が活きていることがわかります。

図55:エラーダイアログが表示される
図55:エラーダイヤログが表示される

まとめ

 今回の説明でデータベース操作プラグインを用いて、DBMSと連係してデータベースを操作する機能の初歩を理解できたと思います。

 データベース操作プラグインとしては、Data Tools Platform(DTP)なども知られており「Eclipse IDE for Java EE Developers」パッケージにはDTPが同梱されています。対応しているDBMSの種類やバージョン、プラグインに求める役割などによって使い分けると良いでしょう。また、各プラグインにはたくさんの機能がありますが、必要な機能から順に理解を進めていけば、EclipseをDBMSのフロントエンドとして使いこなすことができると思います。

 次回は、プログラミングの効率化と保守性の向上のためにEclipse 3.4が提供しているリファクタリング機能を説明します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Eclipse 3.4からはじめるIDE入門連載記事一覧

もっと読む

この記事の著者

平野正喜@ランドッグ・オーグ(ヒラノマサキ)

フリーのIT系執筆者&講使(※)の「ランドッグのマウ」こと平野正喜(HIRANO Masaki)です。【略歴】 1962年札幌市生まれ。今で言うIT企業のシステムエンジニア、プロジェクトリーダー、システムコンサルタント、採用担当などを経て独立し、2002年11月にランドッグ・オーグ平野正喜事務所(h...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3813 2009/04/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー