このチュートリアルでは、Data Modelerを使用して、簡略化した図書館データベースのモデルを作成します。このデータベースには、本、利用者(図書館カードの所有者)および処理(本の貸出し、本の返却など)に関するエンティティが含まれます。
このチュートリアルで使用するエンティティは、SQL Developerのオンライン・ヘルプで提供されるチュートリアルのエンティティと同じです。このモデルは意図的に簡略化されているため、公共または組織内の実際の図書館での利用には適していません。(高度チュートリアルおよび教材については1.11「データ・モデリングの追加のリソース」を参照してください。)
特に説明しないダイアログ・ボックス、タブまたはフィールドには、何も指定しないでください。
簡略化したこのチュートリアルでは、トップダウン・モデリング・アプローチで考えられる手順のうち、一部のみを使用します。(アプローチの詳細は、1.4「データ・モデリングへのアプローチ」を参照してください。)
実行する主要な手順は次のとおりです。
データベースの論理モデルには、Books(図書館の各本を表現)、Patrons(図書館カードを持つ各利用者を表現)およびTransactions(利用者と本に関連する各処理を表現)という3つのエンティティが含まれます。ただし、これらのエンティティを作成する前に、エンティティの作成(および後のDDL生成)をより有効かつ具体的なものにするためのドメインを作成します。
論理モデルの作成を開始するには、2.1.1「ドメインの追加」に進みます。
データのニーズを計画する際に、何種類ものレコードに出現するフィールドの種類が複数あり、多くのフィールドで定義を共有できることを決定しました。決定事項の例は、次のとおりです。
利用者の姓および名は、それぞれ25文字以下で指定します。
通りの住所の行は、40文字以下で指定します。
市の名前は、25文字以下で指定します。
州コード(米国)は、2文字の標準略語で指定します。
zipコード(米国の郵便番号)は、10文字以下で指定します(nnnnn-nnnn)。
書籍識別子は、20文字以下で指定します。
その他の識別子は、数字7桁以下で指定します(小数位なし)。
(本、記事などの)タイトルは、50文字以下で指定します。
後でエンティティを作成する際に属性のデータ型を指定するのに使用できるよう、適切なドメインを追加することにします。(追加したドメインは、Data Modelerを終了して再起動した際に使用可能になります。)
「ツール」→「ドメイン管理」をクリックします。
「ドメイン管理」ダイアログ・ボックスに、次の定義を持つドメインを追加します。「追加」をクリックして各定義を開始し、それぞれの定義の終了時に「適用」をクリックします。
名前 | 論理型 | その他の情報 |
---|---|---|
利用者名 | VARCHAR | サイズ: 25 |
住所の行 | VARCHAR | サイズ: 40 |
市 | VARCHAR | サイズ: 25 |
州 | VARCHAR | サイズ: 2 |
郵便番号 | VARCHAR | サイズ: 10 |
書籍ID | VARCHAR | サイズ: 20 |
数値ID | NUMERIC | 精度: 7、スケール: 0 |
タイトル | VARCHAR | サイズ: 50 |
これらのドメインの定義が完了したら、「保存」をクリックします。これによって、Data Modelerをインストールした場所の下にあるdatamodeler/domains
ディレクトリまたはdatamodeler\domains
フォルダに、defaultdomains.xml
というファイルが作成されます。
オプションで、新しい場所(Data Modelerのインストール・ディレクトリの下以外)にdefaultdomains.xml
ファイルをコピーして、library_domains.xml
などの適切な名前を付けることもできます。このファイルは、他の設計を作成する際に、ドメインのインポート元として使用できます。
「閉じる」をクリックしてダイアログ・ボックスを閉じます。
2.1.2「Booksエンティティの作成」に進みます。
Booksエンティティは、図書館にある各本を表します。Booksエンティティの作成方法は、次のとおりです。
Data Modelerウィンドウのメイン領域(右側)で、「論理」タブをクリックします。
「新規エンティティ」アイコンをクリックします。
メイン領域の論理モデル・ペインをクリックします。「論理」ペインで、マウス・ボタンを押して斜めにドラッグして解放し、エンティティ・ボックスを描画します。「エンティティのプロパティ」ダイアログ・ボックスが表示されます。
左側の「一般」をクリックして、次を指定します。
名前: Books
左側の「属性」をクリックし、「追加」(+)アイコンを使用して次の属性を一度に1つずつ追加します。(データ型には、論理型であるrating以外のドメイン・タイプを選択します。)
名前 | データ型 | その他の情報および注意事項 |
---|---|---|
book_id | ドメイン: 書籍ID | プライマリUID(一意識別子)。(デューイ・コードまたはその他の書籍識別子。) |
title | ドメイン: タイトル | M(必須。NULLは指定できません)。 |
author_last_name | ドメイン: 利用者名 | M(必須。NULLは指定できません)。 |
author_first_name | ドメイン: 利用者名 | (作者の名。必須ではありませんが、作者の名がある場合は入力します。) |
rating | 論理型: NUMERIC(精度= 2、スケール= 0) | (図書館職員による個人的な本の評価で、1(つまらない)から10(すばらしい)で示されます。) |
「OK」をクリックして、Booksエンティティの作成を終了します。
2.1.3「Patronsエンティティの作成」に進みます。
Patronsエンティティは、図書館の各利用者(図書館カードを保持し、本を借りることのできる各利用者)を表します。Patronsエンティティの作成方法は、次のとおりです。
Data Modelerウィンドウのメイン領域(右側)で、「論理」タブをクリックします。
「新規エンティティ」アイコンをクリックします。
メイン領域の論理モデル・ペインをクリックします。「論理」ペインで、マウス・ボタンを押して斜めにドラッグして解放し、エンティティ・ボックスを描画します。(推奨: ボックスは、Booksボックスの右側に移動することをお薦めします。)「エンティティのプロパティ」ダイアログ・ボックスが表示されます。
左側の「一般」をクリックして、次を指定します。
名前: Patrons
左側の「属性」をクリックし、「追加」(+)アイコンを使用して次の属性を一度に1つずつ追加します。(データ型には、構造型SDO_GEOMETRYを使用する場所以外のドメイン・タイプを選択します。)
属性名 | 型 | その他の情報および注意事項 |
---|---|---|
patron_id | ドメイン: 数値ID | プライマリUID(一意識別子)。(一意の利用者ID番号で、図書館カード番号とも呼ばれます。) |
last_name | ドメイン: 利用者名 | M(必須。NULLは指定できません)。最大25文字。 |
first_name | ドメイン: 利用者名 | (利用者の名。) |
street_address | ドメイン: 住所の行 | (利用者の通りの住所。) |
city | ドメイン: 市 | (利用者が住む市または町。) |
state | ドメイン: 州 | (利用者が住む州を表す2文字のコード。) |
zip | ドメイン: 郵便番号 | (利用者が住む場所の郵便番号。) |
location | 構造型: SDO_GEOMETRY | ジオコーディングされた利用者の住所を表すOracle Spatialジオメトリ・オブジェクト。 |
「OK」をクリックして、Patronsエンティティの作成を終了します。
Transactionsエンティティは、本の貸出しや返却など、利用者および本に関連する各処理を表します。利用者が図書館デスクに持ってくる本の数にかかわらず、各エンティティでは1つの処理が記録されます。たとえば、利用者が2冊の本を返して3冊の本を借りる場合は、5つの処理(2つの返却と3つの貸出し)が記録されます。Transactionsエンティティの作成方法は、次のとおりです。
Data Modelerウィンドウのメイン領域(右側)で、「論理」タブをクリックします。
「新規エンティティ」アイコンをクリックします。
メイン領域の論理モデル・ペインをクリックします。「論理」ペインで、マウス・ボタンを押して斜めにドラッグして解放し、エンティティ・ボックスを描画します。(推奨: ボックスは、BooksボックスとPatronsボックスの中央下に移動することをお薦めします。)「エンティティのプロパティ」ダイアログ・ボックスが表示されます。
左側の「一般」をクリックして、次を指定します。
名前: Transactions
左側の「属性」をクリックし、「追加」(+)アイコンを使用して次の属性を一度に1つずつ追加します。(データ型には、論理型を使用するtransaction_date以外のドメイン・タイプを選択します。)
属性名 | 型 | その他の情報および注意事項 |
---|---|---|
transaction_id | ドメイン: 数値ID | プライマリUID(一意識別子)。(一意のトランザクションID番号) |
transaction_date | 論理型: Datetime | M(必須。NULLは指定できません)。処理の日時。 |
transaction_type | ドメイン: 数値ID | M(必須。NULLは指定できません)。(処理の種類を示す数値コード。たとえば、1は本の貸出しを示します。) |
エンティティ間でリレーションを作成すると(2.1.5を参照)、patron_idおよびbook_id属性が自動的にTransactionsエンティティに追加されるため、これらの属性を明示的に定義しないでください。リレーショナル・モデルを生成すると(2.2を参照)、これらの属性は外部キーとして追加されます。
「OK」をクリックして、Transactionsエンティティの作成を終了します。
2.1.5「エンティティ間のリレーションの作成」に進みます。
リレーションは、エンティティ間のリレーションシップ(1対多、多対1または多対多)を示します。エンティティ間には、次のリレーションシップがあります。
BooksとTransactions: 1対多各書籍は、連続した複数のトランザクションに含めることができます。各本は、0または1のアクティブな貸出し処理を持つことができます。貸し出された本は、返却されるまで、再び貸し出すことができません。
PatronsとTransactions: 1対多。各利用者は、複数の連続した同時トランザクションに含めることができます。各利用者は図書館を訪れた際に1冊以上の本を借りたり、複数回の訪問を反映するアクティブな貸出し処理を複数回行うことができます。また、各利用者は、借りた本を任意の時点で返却できます。
リレーションシップは次のようにして作成します。完了すると、メイン領域の論理モデル・ペインが次の図のように表示されます。この図では、Bachman表記法が使用されていることに注意してください(「表示」→「論理ダイアグラム表記法」→「Barker表記法」をクリックすると、Barker表記法に変更できます)。
メイン領域の論理モデル・ペインで、Booksが左側、Patronsが右側、TransactionsがBooksとPatronsの間またはそれらの中央下に来るよう、エンティティ・ボックスを配置します。(ポインタが十字形のままの場合は、左上の「選択」アイコンをクリックしてポインタを矢印に変更します。)
推奨: この演習では、自動的な行ルーティングをオフにします。「論理」ペインを右クリックし、「自動ルート」が選択されていないことを確認します。
「新規1:Nリレーション」アイコンをクリックします。
Booksボックスをクリックしてから、Transactionsボックスをクリックします。BooksからTransactionsに矢印付きの線が引かれます。
「新規1:Nリレーション」アイコンをクリックします。
Patronsボックスをクリックしてから、Transactionsボックスをクリックします。PatronsからTransactionsに矢印付きの線が引かれます。
オプションで、線をダブルクリック(または線を右クリックして「プロパティ」を選択)し、「リレーションのプロパティ」情報を表示することもできます。
2.2「リレーショナル・モデルの作成」に進みます。
チュートリアルの図書館データベースのリレーショナル・モデルは、論理モデルのエンティティ(Books、PatronsおよびTransactions)を反映する表と、各エンティティのすべての属性で構成されています。このチュートリアル用に簡略化されたデータ・モデルでは、1つのリレーショナル・モデルが論理モデル全体を反映していますが、他のデータ・モデルについては、1つ以上のリレーショナル・モデルを作成して、各モデルに論理モデル全体またはその一部を反映させることができます。(リレーショナル・モデルに論理モデルの一部を反映するには、リレーショナル・モデルのエンジニアリング用のダイアログ・ボックスで、フィルタ機能を使用します。)
リレーショナル・モデルの作成方法は、次のとおりです。
論理モデルを選択して、「リレーショナル・モデルに対するエンジニアリング」アイコンをクリックするか、ナビゲータで論理モデルを右クリックしてから、「リレーショナル・モデルに対するエンジニアリング」をクリックします。「エンジニアリング」ダイアログ・ボックスが表示されます。
デフォルトをすべて受け入れ(フィルタは使用しない)、「エンジニア」をクリックします。これによって、論理モデルを反映する表および他のオブジェクトが、Relational_1モデルに移入されます。
ウィンドウの左側にあるオブジェクト・ブラウザで「リレーショナル・モデル」ノードを展開し、Relational_1およびオプションで、その下にあり任意のエントリを含むノード(「表」、「列」など)を展開し、作成されたオブジェクトを表示することもできます。
リレーショナル・モデルの名前Relational_1を、表示するダイアグラムをよりわかりやすく表す名前(Library (relational)など)に変更します。具体的には、階層表示でRelational_1を右クリックして「プロパティ」を選択し、「モデルのプロパティ - <名前> (リレーショナル)」の「一般」ペインで、「名前」にLibrary (relational)
と指定し、「OK」をクリックします。
2.3「DDLの生成」に進みます。
指定したモデルを反映するデータベース・オブジェクトの作成に使用可能なデータ定義言語(DDL)文を生成します。DDL文は、指定した物理モデル(Oracle Database 11gなど、データベースのタイプ)を実装します。
物理モデルの作成方法は、次のとおりです。
オプションで、次の手順を実行して、DDL文を生成する前に物理モデルを表示します。
リレーショナル・モデルを選択し展開して、物理モデル・ノードを右クリックして、「新規」を選択します。物理モデルを作成するデータベースのタイプを選択するためのダイアログ・ボックスが表示されます。
データベースのタイプ(Oracle Database 11gなど)を指定して、「OK」をクリックします。物理モデル・ノードの下にデータベースのタイプが反映された物理モデルが作成されます。
Libraryリレーショナル・モデルの下の「物理モデル」ノードを展開し、その下の新しく作成された物理モデルおよび「表」ノードを展開して、作成された表オブジェクトを表示します。
「ファイル」→「エクスポート」→「DDLファイル」をクリックします。
データベース・タイプ(Oracle Database 11gなど)を選択して、「生成」をクリックします。「DDL生成オプション」ダイアログ・ボックスが表示されます。
デフォルトをすべて受け入れ、「OK」をクリックします。DDLファイル・エディタが表示され、表の作成および制約の追加のためのSQL文が示されます。(このウィンドウで文を編集できますが、このチュートリアルの演習では編集しないでください。)
「保存」をクリックして、ローカル・システムの.sqlスクリプト・ファイル(create_library_objects.sql
など)に文を保存します。
後でスクリプトを実行して(たとえば、データベース接続およびSQL DeveloperのSQLワークシートを使用して)、任意のデータベースにオブジェクトを作成できます。
「閉じる」をクリックしてDDLファイル・エディタを閉じます。
2.4「設計の保存」に進みます。
「ファイル」→「保存」をクリックして設計を保存します。基本的な構造情報を含むようにXMLファイルの場所および名前を指定します(library_design.xml
など)。ディレクトリまたはフォルダ構造は、設計の詳細情報を保持するように自動的に作成されます(1.3.1「データベース設計」を参照)。
必要に応じて、設計オブジェクトの作成および変更を続行します。完了したら、変更を行った場合は設計を保存した後、「ファイル」→「終了」をクリックしてData Modelerを終了します。
保存した設計を後で開いて、設計での作業を続行することもできます(1.6「設計の保存、オープン、エクスポートおよびインポート」を参照)。