Oracle SQL Developer Data Modeler 3.1を使用したデータベースのリエンジニアリング
概要
- 2つの表(EMPLOYEESおよびDEPARTMENTS)をHRスキーマからSQL Developer Data Modelerにインポートします。
- 新しい表(PROJECTS)を追加してDEPARTMENTS表に結合し、EMPLOYEES表に新しい列(MOBILE_NUMBER)を作成します。
- リレーショナル・モデルから論理モデルへのリバース・エンジニアリングを実行します。
- 属性とリレーションを持つ新しいエンティティを作成して、モデルを変更します。
- 論理モデルとリレーショナル・モデルとを同期します。
- 実施した変更からDLLを生成します。
- Oracle SQL Developer Data Modeler Release 3.1をインストールしていること
- サンプル・スキーマがインストールされているOracle Database 11gデータベースにアクセスできること
目的
このチュートリアルでは、Oracle SQL Developer Data Modeler 3.1のリレーショナル・モデルを使用してデータベースを変更する方法について説明します。
所要時間
約60分
はじめに
Oracle SQL Developer Data Modelerは、データベース・オブジェクトを図式的に表示および変更し、この変更に基づいて素早く簡単にスキーマを更新できるツールです。 このツールは独立したスタンドアロン製品であり、OTNからダウンロードして無償で使用できます。
さまざまなソースおよびターゲットに対してインポートとエクスポートを実行できます。 また、各種の書式設定オプションが提供されており、事前定義された一連の設計ルールを通じてモデルを検証できます。 このツールを使用すると、Oracleがサポートする任意のデータベースに接続できます。
シナリオ
このチュートリアルでは、Oracle SQL Developer Data Modeler Release 3.1を使用して次のタスクを実行します。
前提条件
このチュートリアルを始める前に以下のことを確認してください。
HRスキーマからの表のインポート
このトピックでは、HRスキーマへの接続を作成します。 この接続を使用して、SQL Developer Data ModelerにEMPLOYEES表とDEPARTMENTS表をインポートします。
デスクトップにある「Oracle SQL Developer Data Modeler」アイコンをダブルクリックします。
データ・ディクショナリから表をインポートするには、「File」→「Import」→「Data Dictionary」を選択します。

データ・ディクショナリのインポート・ウィザードが開きます。 データベースへの接続を作成するには、「Add」をクリックします。

New / Select Database Connectionダイアログが表示されます。 次のとおりに接続情報を入力し、「Test」をクリックします。
Connection Name: hr_orcl
User Name: hr
Password: oracle
Hostname: localhost
SID: orcl

StatusにSuccessと表示されたら、 「Connect」をクリックします。

データ・ディクショナリのインポート・ウィザードで先ほど作成した「hr_orcl」接続を選択し、「Next」をクリックします。

ここではHRスキーマのみをインポートするため、 「HR」スキーマを選択し、「Next」をクリックします。

「DEPARTMENTS」表と「EMPLOYEES」表を選択し、「Next」をクリックします。

「Finish」をクリックして設計を生成します。

作成されたログ・ファイルを確認し、「Close」をクリックします。

EMPLOYEES表とDEPARTMENTS表がSQL Developer Data Modelerのリレーショナル・モデル内に正しくインポートされました。 表が適切に並んでいない場合は、オブジェクトをドラッグして移動できます。

表とリレーションの位置が変更されました。 次のトピックでは、データ・ディクショナリからオブジェクトをインポートした際に自動的に作成された物理モデルを確認します。

物理モデルの確認
このトピックでは、データ・ディクショナリからオブジェクトをインポートした際に自動的に作成された物理モデルを確認します。
ナビゲーション・ブラウザで「Relational Models」→「Relational_1」と展開します。

物理モデルが1つ表示されます。 「Physical Models」→「Oracle Database 11g」と展開します。

「Tables」→「HR.DEPARTMENTS」→「Columns」と展開します。 リストを確認します。 物理モデルにあるその他の利用可能なオブジェクトに注意してください。 次の項では、リレーショナル・モデル内に表を作成します。

新しい表の作成
このトピックでは、PROJECTS表を作成します。 PROJECTS表には、PROJECT_ID、PROJECT_NAME、PROJECT_START_DATE、およびPROJECT_END_DATEという4つの列が含まれています。
Oracle SQL Developer Data Modelerツールバーにある「
」New Tableアイコンをクリックします。

ダイアグラムの任意の空白部分をクリックします。

Table Propertiesダイアログが開きます。 NameにPROJECTSと入力し、左側のナビゲータで「Columns」をクリックします。

「
」Create Columnアイコンをクリックして、列を追加します。

NameにPROJECT_IDと入力し、 Datatypeに「Logical」を、Typeに「NUMERIC」を選択します。

Precisionに6と入力します。 ここでは、PROJECT_ID列を主キーにします。 「PK」チェック・ボックスを選択したら、「Create Column」アイコンをクリックして別の列を追加します。

NameにPROJECT_NAMEと入力し、 Datatypeに「Logical」を、Typeに「VARCHAR」を選択します。

Sizeに100と入力したら、「Create Column」アイコンをクリックして別の列を追加します。

NameにPROJECT_START_DATEと入力し、 Datatypeに「Logical」を、Typeに「Date」を選択します。 「Create Column」アイコンをクリックして別の列を作成します。

NameにPROJECT_END_DATEと入力し、 Datatypeに「Logical」を、Typeに「Date」を選択します。 「OK」をクリックして表を作成します。

表が作成されました。

既存の表に対する新規表の結合
このトピックでは、PROJECTS表とDEPARTMENTS表の間に外部キーを作成します。
ツールバーから「
」New FK Relationアイコンをクリックします。

PROJECTS表に外部キーを作成するには、「DEPARTMENTS」表をクリックしてから「PROJECTS」表をクリックします。

Foreign Key Propertiesダイアログが開きます。 左側のナビゲータで、「Associated Columns」を選択します。

Child ColumnにDEPARTMENTS_DEPARTMENT_IDが選択されていることを確認したら、「OK」をクリックします。

ツールバーから「
」矢印を選択します。 FKリレーションが作成されます。 PROJECTS表のDEPARTMENTS_DEPARTMENT_ID列に付加された'F'によって、この列が外部キーであることが識別できます。

この外部キーをオプションにするには、2つの表を結合している線を右クリックして「Properties」を選択します。

「Mandatory」チェック・ボックスの選択を解除し、「OK」をクリックします。

「OK」をクリックします。

「Yes」をクリックします。

これで外部キーがオプションになりました。 つまり、Departmentを持たないProjectを作成できます。

既存の表に対する変更
このトピックでは、DEPARTMENTS表にCOST_CENTER列を追加します。
ダイアグラムで、「DEPARTMENTS」表をダブルクリックします。

左側のナビゲータから「Columns」プロパティを選択します。

「Create Column」アイコンをクリックして、新しい列を追加します。

NameにCOST_CENTERと入力し、Datatypeに「Logical」を、Typeに「VARCHAR」を選択し、Sizeに25と入力します。 「OK」をクリックして列を作成します。

DEPARTMENTS表にCOST_CENTER列が正しく作成されました。

リレーショナル・モデルのリバース・エンジニアリングによる論理モデルの作成
このトピックでは、リレーショナル・モデルのリバース・エンジニアリングを実行して論理モデルを作成します。
ツールバーから「Engineer to Logical Model」アイコンをクリックします。

Engineer to Logical Modelウィンドウが表示されます。 「Tables」を展開します。 論理モデル内に作成されるエンティティを確認します。 「Engineer」をクリックします。

論理モデルが表示されます。 エンティティと属性を確認します。 論理モデルを示したダイアグラムは、エンティティ・リレーションシップ・ダイアグラム(ERD)と呼ばれます。

論理モデルの変更
このトピックでは、論理モデルを変更します。
ここでは、PROJECTSエンティティにいくつかの属性を追加します。 「PROJECTS」エンティティをダブルクリックします。

左側のナビゲータで「Attributes」プロパティを選択します。

「+」add attributesアイコンを選択します。

NameにSTATUSと入力し、Datatypeに「Logical」を、Typeに「VARCHAR」を選択し、Sizeに30と入力します。 リストから「DEPARTMENT_DEPARTMENT_ID」属性を選択します。

この属性は、DEPARTMENTSエンティティとPROJECTSエンティティ間のリレーションの結果として表示されています。 属性名は変更できない点に注意してください。 ここでは名前を変更する必要があるため、プリファレンス設定の1つを変更します。 「OK」をクリックします。

PROJECTSエンティティにSTATUS属性が追加されており、DEPARTMENTリレーションがダイアグラム内に表示されていないことを確認します。 現在参照しているのはBarker表記法であり、この表記法ではリレーション属性は表示されません。 この項の後半で表記法をBachmanに変更します。そうすると、ダイアグラムにリレーション属性が表示されます。

リレーション属性の名前を変更できるようにするため、デフォルト設定を変更します。 「Tools」→「Preferences」の順に選択します。

「Data Modeler」→Model」と展開し、「Logical」を選択します。 「Keep as the name of the Originating attribute」チェック・ボックスの選択を解除します。

「OK」をクリックします。

もう一度、「PROJECTS」エンティティをダブルクリックします。

「Attributes」プロパティを選択します。

リストから「DEPARTMENT_DEPARTMENT_ID」属性を選択します。

Nameが有効化されており、名前を変更できることがわかります。 名前をPROJECT_DEPTに変更して、「OK」をクリックします。

表記法をBachmanに変更します。 ダイアグラムの空白部分を右クリックしてコンテキスト・ウィンドウを表示します。 「Bachman Notation」を選択します。

表記法が変更されていることを確認します。 主キー属性に加えてリレーション属性('F'で表記)が表示されています。 各属性の前に表示された'*'は、この属性が必須属性であることを示しています。

論理モデルに別のエンティティを追加します。 ツールバーから「New Entity」アイコンを選択します。

ダイアグラムの任意の空白部分をクリックします。

NameにTASKSと入力し、「Attributes」プロパティを選択します。

「+」add attributesアイコンを選択します。

NameにTASK_IDと入力し、Datatypeに「Logical」を、Typeに「NUMERIC」を選択します。また、Precisionに6と入力し、「Primary UID」チェック・ボックスを選択します。 次に、「+」add attributeアイコンを選択して、別の属性を追加します。

NameにTASK_NAMEと入力し、Datatypeに「Logical」を、Typeに「VARCHAR」を選択します。また、Sizeに255と入力し、「create attribute」アイコンをクリックします。

NameにCOSTと入力し、Datatypeに「Logical」を、Typeに「NUMERIC」を選択します。また、Sizeに6と入力し、「create attribute」アイコンをクリックします。

NameにBUDGETと入力し、Datatypeに「Logical」を、Typeに「NUMERIC」を選択します。また、Sizeに6と入力し、「OK」をクリックしてエンティティとその属性を作成します。

ここでは、EMPLOYEESエンティティとTASKSエンティティ間、およびPROJECTSエンティティとTASKSエンティティ間に2つのリレーションを作成します。 ツールバーの「New 1:N Relation」アイコンをクリックします。

「EMPLOYEES」エンティティを選択してから、「TASKS」エンティティを選択します。

「OK」をクリックして、リレーションを作成します。

次に、2番目のリレーションを作成します。 「PROJECTS」エンティティをクリックしてから、「TASKS」エンティティをクリックします。

「OK」をクリックして、リレーションを作成します。

リレーションが表示されています。 ツールバーで「
」をクリックします。 TASKSエンティティ内のリレーション名を変更します。 「TASKS」エンティティをダブルクリックします。

「Attributes」プロパティを選択します。

リストから「EMPLOYEES_EMPLOYEE_ID」属性を選択します。

名前をASSIGNED_TOに変更したら、リストから「PROJECTS_PROJECT_ID」属性を選択します。

名前をPROJECT_IDに変更して、「OK」をクリックします。

以上で論理モデルの変更は完了です。 次のトピックでは、リレーショナル・モデルに対して変更を同期します。

論理モデルとリレーショナル・モデルの同期
このトピックでは、論理モデルとリレーショナル・モデルを同期します。
「Engineer to Relational Model」アイコンをクリックします。

Engineer to Relational Modelウィンドウが表示されます。 「Entities」→「PROJECTS」→「Attributes」と展開します。 両者の違いを確認します。 「Engineer」をクリックします。

新しいSTATUS列、PROJECT_DEPTという名前に変更された外部キー、および新しいTASKS表を確認します。

データベース更新用のDDLの生成
ここまででモデルは完成したため、次にデータ・ディクショナリをモデルに同期し、DDLを生成します。
ツールバーから「Synchronize Data Dictionary with Model」アイコンをクリックします。

Compare Modelsダイアログが開きます。 変更されたノードには三角マーク(
)が付いています。 ここではTablesノードにマークが付いています。 「Tables」ノードを展開し、PROJECTS表とTASKS表が新しく作成されていることを確認します。 DEPARTMENTS表も変更されていることがわかります。

「DEPARTMENTS」→「Columns」と展開します。 COST_CENTER列が追加されます。 「DDL Preview」をクリックします。

生成されたコードが表示されます。 CREATE文とALTER文を確認します。 PROJECTS表とTASKS表が作成され、主キーを作成するように変更されています。 ページの下までスクロールします。

このページには新しい列と外部キー制約が表示されています。 「Save」をクリックします。
このスクリプトをSQL Developerで実行して、データベースを更新することができます。 この作業は次のチュートリアルで実行します。

デスクトップにファイルを保存します。 「Save」をクリックします。

「Close」をクリックして、Compare Modelsウィンドウを閉じます。

モデルを保存します。 「File」→「Save」を選択します。

デスクトップにファイルを保存します。 「Save」をクリックします。

SQL Developer Data Modelerを終了します。 「File」→「Exit」を選択します。

まとめ
- データ・ディクショナリからの表のインポート
- 物理モデルの確認
- 新規表の作成と既存表への結合
- 既存表に対する新規列の作成
- リバース・エンジニアリングによる論理モデルの作成
- 論理モデルの変更
- 論理モデルとリレーショナル・モデルの同期
- データベース更新用のDDLの生成
- このチュートリアルのソリューションはfiles.zipファイルに含まれています。
- Oracle SQL Developer Data Modelerホームページ
- OTN上のOracle SQL Developerホームページ
- Oracle Data Modeling and Relational Database Designコース
- Oracle Learning Library
- Oracle University
このチュートリアルで学習した内容は、以下のとおりです。
参考資料
このOracle by Exampleをナビゲートする際、次の機能を使用できます。
- ヘッダー・ボタンの非表示:
- ヘッダー内のボタンを非表示にするには、タイトルをクリックします。 ボタンを再表示するには、もう一度タイトルをクリックします。
- トピック一覧ボタン:
- すべてのトピックの一覧です。 いずれかのトピックをクリックすると、その項に移動します。
- すべてのトピックを開く/閉じる:
- すべての項に対する詳細を表示または非表示にします。 デフォルトでは、すべてのトピックが閉じられています。
- すべてのイメージを表示/非表示:
- すべてのスクリーンショットを表示または非表示にします。 デフォルトでは、すべてのイメージが表示されています。
- 印刷:
- コンテンツを印刷します。 現在表示または非表示にされているコンテンツが印刷されます。
このチュートリアルの特定の項に移動するには、一覧からトピックを選択してください。