SQL Anywhere サーバ SQL の使用法ftp2.ianywhere.jp/tech/SQLA10_manuals/dbugja10.pdf『SQL...

936
SQL Anywhere サーバ SQL の使用法 改訂 2007 3

Transcript of SQL Anywhere サーバ SQL の使用法ftp2.ianywhere.jp/tech/SQLA10_manuals/dbugja10.pdf『SQL...

  • SQL Anywhere サーバSQL の使用法

    改訂 2007 年 3 月

  • 版権と商標

    Copyright (c) 2007 iAnywhere Solutions, Inc. Portions copyright (c) 2007 Sybase, Inc. All rights reserved.

    iAnywhere Solutions, Inc. は Sybase, Inc. の関連会社です。

    iAnywhere は、(1) すべてのコピーにこの情報またはマニュアル内のその他の版権と商標の表示を含める、(2) マニュアルの偽装表示をしない、(3) マニュアルに変更を加えないことが遵守されるかぎり、このマニュアルをご自身の情報収集、教育、その他の非営利の目的で使用することを許可します。このマニュアルまたはその一部を、iAnywhere の書面による事前の許可なく発行または配布することは禁じられています。

    このマニュアルは、iAnywhere が何らかの行動を行う、または行わない責任を表明するものではありません。このマニュアルは、iAnywhere の判断で予告なく内容が変更される場合があります。iAnywhere との間に書面による合意がないかぎり、このマニュアルは「現状のまま」提供されるものであり、その使用または記載内容の誤りに対して iAnywhere は一切の責任を負いません。

    iAnywhere (R)、Sybase (R)、http://www.ianywhere.com/trademarks に示す商標は Sybase, Inc. またはその関連会社の商標です。(R)は米国での登録商標を示します。

    Java および Java 関連のすべての商標は、米国またはその他の国での Sun Microsystems, Inc. の商標または登録商標です。

    このマニュアルに記載されているその他の会社名と製品名は各社の商標である場合があります。

    http://www.ianywhere.com/trademarks

  • 目次

    はじめに ........................................................................................................ ix

    SQL Anywhere のマニュアル ...................................................................................... x表記の規則 .................................................................................................................. xiii詳細情報の検索/フィードバックの提供 .................................................................. xvii

    I. データベースの設計と作成 ......................................................................... 1

    データベースの設計 ...................................................................................................... 3データベースの設計の概要 .................................................................................... 4データベース設計の概念 ....................................................................................... 5設計のプロセス .................................................................................................... 11テーブル・プロパティの設計 .............................................................................. 24

    データベース・オブジェクトの使用 ........................................................................... 29データベース・オブジェクトを使用した作業の概要 .......................................... 30データベースの編集 ............................................................................................ 31テーブルの編集 .................................................................................................... 45ビューの編集 ....................................................................................................... 60インデックスの編集 ............................................................................................ 87テンポラリ・テーブルの編集 .............................................................................. 94

    データ整合性の確保 .................................................................................................... 95データ整合性の概要 ............................................................................................ 96カラム・デフォルトの使い方 ............................................................................ 100テーブル制約とカラム制約の使い方 ................................................................. 106ドメインの使い方 .............................................................................................. 110エンティティ整合性と参照整合性の確保 .......................................................... 113システム・テーブルの整合性ルール ................................................................. 117

    トランザクションと独立性レベル ............................................................................. 119トランザクションの概要 ................................................................................... 120独立性レベルと一貫性 ....................................................................................... 125トランザクションのブロックとデッドロック ................................................... 140独立性レベルの選択 .......................................................................................... 143独立性レベルのチュートリアル ........................................................................ 147

    Copyright © 2007, iAnywhere Solutions, Inc. iii

  • ロックの仕組み .................................................................................................. 166特殊な同時性の問題 .......................................................................................... 181まとめ ................................................................................................................ 183

    チュートリアル:SQL Anywhere データベースの作成 ........................................... 185SQL Anywhere データベース作成のチュートリアルの概要 ............................. 186レッスン 1:データベース・ファイルの作成 ................................................... 187レッスン 2:データベースへの接続 .................................................................. 188レッスン 3:テーブルの作成 ............................................................................. 190レッスン 4:カラムのプロパティ設定 .............................................................. 192レッスン 5:外部キーを使用したテーブル間の関係作成 ................................. 194まとめ ................................................................................................................ 195

    II. データベース・パフォーマンスのモニタリングと改善 ......................... 197

    パフォーマンスのモニタリングと改善 ..................................................................... 199パフォーマンスのモニタリングと改善の概要 ................................................... 200アプリケーション・プロファイリング .............................................................. 202診断トレーシングを使用した詳細なアプリケーション・プロファイリング .... 216その他の診断ツールと方法 ................................................................................ 235データベースのパフォーマンスのモニタリング ............................................... 243パフォーマンス向上のためのヒント ................................................................. 257

    III. データのクエリと変更 ........................................................................... 281

    クエリ:テーブルからのデータの選択 ..................................................................... 283クエリの概要 ..................................................................................................... 284SELECT リスト:カラムの指定 ........................................................................ 287FROM 句:テーブルの指定 ............................................................................... 295WHERE 句:ローの指定 ................................................................................... 296ORDER BY 句:結果の順序付け ....................................................................... 308データの要約 ..................................................................................................... 311

    クエリ結果の要約、グループ化、ソート .................................................................. 315集合関数を使用したクエリ結果の要約 .............................................................. 316GROUP BY 句:クエリ結果のグループへの編成 ............................................. 321GROUP BY 句の概要 ........................................................................................ 323HAVING 句:データ・グループの選択 ............................................................. 327

    SQL Anywhere サーバ - SQL の使用法

    iv Copyright © 2007, iAnywhere Solutions, Inc.

  • ORDER BY 句:クエリ結果のソート ............................................................... 329UNION、INTERSECT、EXCEPT を使用した、クエリ結果に対する集合操作の実行 ................................................................................................................ 332標準と互換性 ..................................................................................................... 338

    ジョイン:複数テーブルからのデータ検索 .............................................................. 341概要 .................................................................................................................... 342サンプル・データベース・スキーマ ................................................................. 344ジョイン操作 ..................................................................................................... 346ジョインの概要 .................................................................................................. 347明示的なジョイン条件 (ON 句) ......................................................................... 352クロス・ジョイン .............................................................................................. 356内部ジョインと外部ジョイン ............................................................................ 358特殊なジョイン .................................................................................................. 365ナチュラル・ジョイン ....................................................................................... 373キー・ジョイン .................................................................................................. 377

    共通テーブル式 ......................................................................................................... 391共通テーブル式の概要 ....................................................................................... 392共通テーブル式の一般的な使用例 ..................................................................... 395再帰共通テーブル式 .......................................................................................... 398構成部品の問題 .................................................................................................. 400再帰共通テーブル式でのデータ型宣言 .............................................................. 404最短距離の問題 .................................................................................................. 406複数の再帰共通テーブル式の使用 ..................................................................... 410

    OLAP のサポート ...................................................................................................... 413OLAP 機能の概要 .............................................................................................. 414GROUP BY 句の拡張 ........................................................................................ 416Window 関数 ...................................................................................................... 425

    サブクエリの使用 ...................................................................................................... 461サブクエリの概要 .............................................................................................. 462WHERE 句でのサブクエリの使用 ..................................................................... 468HAVING 句でのサブクエリ ............................................................................... 469サブクエリ比較テスト ....................................................................................... 471ANY と ALL を使用した限定比較テスト ........................................................... 472IN 条件によるセット・メンバシップのテスト .................................................. 475存在テスト ......................................................................................................... 477

    SQL Anywhere サーバ - SQL の使用法

    Copyright © 2007, iAnywhere Solutions, Inc. v

  • 外部参照 ............................................................................................................ 479サブクエリとジョイン ....................................................................................... 480ネストされたサブクエリ ................................................................................... 482サブクエリ操作 .................................................................................................. 484

    データの追加、変更、削除 ....................................................................................... 493データ修正文 ..................................................................................................... 494INSERT によるデータの追加 ............................................................................ 499UPDATE によるデータの変更 ........................................................................... 504INSERT によるデータの変更 ............................................................................ 506DELETE によるデータの削除 ........................................................................... 507

    クエリの最適化と実行 ............................................................................................... 509クエリ処理のフェーズ ....................................................................................... 510セマンティック・クエリ変形 ............................................................................ 512オプティマイザの仕組み ................................................................................... 523クエリ実行アルゴリズム ................................................................................... 546実行プランの解釈 .............................................................................................. 571物理データの編成とアクセス ............................................................................ 590

    IV. SQL のダイアレクトと互換性 .............................................................. 601

    他の SQL ダイアレクト ............................................................................................ 603SQL Anywhere の準拠の概要 ............................................................................ 604SQL FLAGGER を使用した SQL 準拠のテスト ................................................ 605他の SQL ソフトウェアにはない機能 ............................................................... 608Transact-SQL との互換性 ................................................................................. 610Adaptive Server のアーキテクチャ ................................................................... 613Transact-SQL との互換性を意識したデータベースの設定 ............................... 619互換性のある SQL 文の記述方法 ...................................................................... 626Transact-SQL のプロシージャ言語の概要 ........................................................ 631ストアド・プロシージャの自動変換 ................................................................. 634Transact-SQL プロシージャから返される結果セット ...................................... 635Transact-SQL プロシージャの中の変数 ............................................................ 636Transact-SQL プロシージャでのエラー処理 ..................................................... 637

    V. データベースにおける XML ................................................................... 639

    SQL Anywhere サーバ - SQL の使用法

    vi Copyright © 2007, iAnywhere Solutions, Inc.

  • データベースにおける XML の使用 .......................................................................... 641XML の概要 ........................................................................................................ 642リレーショナル・データベースにおける XML 文書の格納 ............................... 643リレーショナル・データを XML としてエクスポートする ............................... 644XML 文書をリレーショナル・データとしてインポートする ............................ 645クエリ結果を XML として取得する ................................................................... 652SQL/XML を使用してクエリ結果を XML として取得する ................................ 670

    VI. リモート・データとバルク・オペレーション ...................................... 679

    データのインポートとエクスポート ......................................................................... 681データベースとの間でのデータの転送 .............................................................. 682データのインポート .......................................................................................... 684データベースからのデータのエクスポート ...................................................... 694データベースの再構築 ....................................................................................... 706データベースの抽出 .......................................................................................... 715SQL Anywhere へのデータベースの移行 .......................................................... 716SQL コマンド・ファイルの使用 ....................................................................... 720Adaptive Server Enterprise の互換性 ................................................................ 723

    リモート・データへのアクセス ................................................................................ 725リモート・データ・アクセスの概要 ................................................................. 726リモート・データ・アクセスの基本概念 .......................................................... 727リモート・サーバの使用 ................................................................................... 729ディレクトリ・アクセス・サーバの使用 .......................................................... 734外部ログインの使用 .......................................................................................... 737プロキシ・テーブルの編集 ................................................................................ 739リモート・テーブルのジョイン ........................................................................ 743複数のローカル・データベースのテーブルのジョイン .................................... 745ネイティブ文のリモート・サーバへの送信 ...................................................... 746リモート・プロシージャ・コール (RPC) の使用 .............................................. 747トランザクションの管理とリモート・データ ................................................... 750内部オペレーション .......................................................................................... 752リモート・データ・アクセスのトラブルシューティング ................................. 756

    リモート・データ・アクセスのサーバ・クラス ....................................................... 759リモート・データ・アクセスのサーバ・クラスの概要 .................................... 760

    SQL Anywhere サーバ - SQL の使用法

    Copyright © 2007, iAnywhere Solutions, Inc. vii

  • JDBC ベースのサーバ・クラス ......................................................................... 761ODBC ベースのサーバ・クラス ........................................................................ 764

    VII. ストアド・プロシージャとトリガ ....................................................... 775

    プロシージャ、トリガ、バッチの使用 ..................................................................... 777プロシージャとトリガの概要 ............................................................................ 778プロシージャとトリガの利点 ............................................................................ 779プロシージャの概要 .......................................................................................... 780ユーザ定義関数の概要 ....................................................................................... 787トリガの概要 ..................................................................................................... 790バッチの概要 ..................................................................................................... 799制御文 ................................................................................................................ 802プロシージャとトリガの構造 ............................................................................ 805プロシージャから返される結果 ........................................................................ 808プロシージャとトリガでのカーソルの使用 ...................................................... 813プロシージャとトリガでのエラーと警告 .......................................................... 817プロシージャでの EXECUTE IMMEDIATE 文の使用 ........................................ 825プロシージャとトリガでのトランザクションとセーブポイント ...................... 826プロシージャを作成するときのヒント .............................................................. 827プロシージャ、トリガ、イベント、バッチで使用できる文 ............................. 829プロシージャからの外部ライブラリの呼び出し ............................................... 830

    プロシージャ、関数、トリガ、イベントのデバッグ ................................................ 837SQL Anywhere のデバッガの概要 ..................................................................... 838チュートリアル:デバッガの使用開始 .............................................................. 840ブレークポイントの活用 ................................................................................... 845変数の編集 ......................................................................................................... 847接続の活用 ......................................................................................................... 848

    索引 ................................................................................................................................... 849

    SQL Anywhere サーバ - SQL の使用法

    viii Copyright © 2007, iAnywhere Solutions, Inc.

  • はじめに

    このマニュアルの内容

    このマニュアルでは、データベースの設計と作成の方法、データのインポート・エクスポート・変更の方法、データの検索方法、ストアド・プロシージャとトリガの構築方法について説明します。

    対象読者

    このマニュアルは、SQL Anywhere のすべてのユーザを対象としています。

    始める前に

    このマニュアルは、読者にデータベース管理システムや SQL Anywhere についての基礎知識があることを前提としています。慣れていない方は、『SQL Anywhere 10 - 紹介』を読んでから、このマニュアルを読んでください。

    Copyright © 2007, iAnywhere Solutions, Inc. ix

  • SQL Anywhere のマニュアルこのマニュアルは、SQL Anywhere のマニュアル・セットの一部です。この項では、マニュアル・セットに含まれる各マニュアルと使用法について説明します。

    SQL Anywhere のマニュアルSQL Anywhere の完全なマニュアルは、各マニュアルをまとめたオンライン形式とマニュアル別の PDF ファイルで提供されます。いずれの形式のマニュアルも、同じ情報が含まれ、次のマニュアルから構成されます。

    ♦ 『SQL Anywhere 10 - 紹介』 このマニュアルでは、データの管理および交換機能を提供する包括的なパッケージである SQL Anywhere 10 について説明します。SQL Anywhere を使用すると、サーバ環境、デスクトップ環境、モバイル環境、リモート・オフィス環境に適したデータベース・ベースのアプリケーションを迅速に開発できるようになります。

    ♦ 『SQL Anywhere 10 - 変更点とアップグレード』 このマニュアルでは、SQL Anywhere 10 とそれ以前のバージョンに含まれる新機能について説明します。

    ♦ 『SQL Anywhere サーバ - データベース管理』 このマニュアルでは、SQL Anywhere データベースの実行、管理、設定について説明します。管理ユーティリティとオプションのほか、データベース接続、データベース・サーバ、データベース・ファイル、バックアップ・プロシージャ、セキュリティ、高可用性、Replication Server を使用したレプリケーションについて説明します。

    ♦ 『SQL Anywhere サーバ - SQL の使用法』 このマニュアルでは、データベースの設計と作成の方法、データのインポート・エクスポート・変更の方法、データの検索方法、ストアド・プロシージャとトリガの構築方法について説明します。

    ♦ 『SQL Anywhere サーバ - SQL リファレンス』 このマニュアルは、SQL Anywhere で使用する SQL 言語の完全なリファレンスです。また、SQL Anywhere のシステム・ビューとシステム・プロシージャについても説明しています。

    ♦ 『SQL Anywhere サーバ - プログラミング』 このマニュアルでは、C、C++、Java プログラミング言語、Visual Studio .NET を使用してデータベース・アプリケーションを構築、配備する方法について説明します。Visual Basic や PowerBuilder などのツールのユーザは、それらのツールのプログラミング・インタフェースを使用できます。

    ♦ 『SQL Anywhere 10 - エラー・メッセージ』 このマニュアルでは、SQL Anywhere エラー・メッセージの完全なリストを、その診断情報とともに説明します。

    ♦ 『Mobile Link - クイック・スタート』 このマニュアルでは、セッションベースのリレーショナル・データベース同期システムである Mobile Link について説明します。Mobile Link テクノロジは、双方向レプリケーションを可能にし、モバイル・コンピューティング環境に非常に適しています。

    ♦ 『Mobile Link - サーバ管理』 このマニュアルでは、Mobile Link アプリケーションを設定して管理する方法について説明します。

    はじめに

    x Copyright © 2007, iAnywhere Solutions, Inc.

  • ♦ 『Mobile Link - クライアント管理』 このマニュアルでは、Mobile Link クライアントを設定、構成、同期する方法について説明します。Mobile Link クライアントには、SQL Anywhere または Ultra Light のいずれかのデータベースを使用できます。

    ♦ 『Mobile Link - サーバ起動同期』 このマニュアルでは、Mobile Link のサーバによって開始される同期について説明します。サーバによって開始される同期とは、統合データベースから同期またはその他のリモート・アクションの開始を可能にする Mobile Link の機能です。

    ♦ 『QAnywhere』 このマニュアルでは QAnywhere について説明します。QAnywhere は、従来のデスクトップ・クライアントやラップトップ・クライアント用のメッセージング・プラットフォームであるほか、モバイル・クライアントや無線クライアント用のメッセージング・プラットフォームでもあります。

    ♦ 『SQL Remote』 このマニュアルでは、モバイル・コンピューティング用の SQL Remote データ・レプリケーション・システムについて説明します。このシステムによって、SQL Anywhereの統合データベースと複数の SQL Anywhere リモート・データベースの間で、電子メールやファイル転送などの間接的リンクを使用したデータ共有が可能になります。

    ♦ 『SQL Anywhere 10 - コンテキスト別ヘルプ』 このマニュアルには、[接続] ダイアログ、クエリ・エディタ、Mobile Link モニタ、SQL Anywhere コンソール・ユーティリティ、インデックス・コンサルタント、Interactive SQL のコンテキスト別のヘルプが収録されています。

    ♦ 『Ultra Light - データベース管理とリファレンス』 このマニュアルでは、小型デバイス用 UltraLight データベース・システムの概要を説明します。

    ♦ 『Ultra Light - AppForge プログラミング』 このマニュアルでは、Ultra Light for AppForge について説明します。Ultra Light for AppForge を使用すると、Palm OS、Symbian OS、またはWindows CE を搭載しているハンドヘルド、モバイル、または埋め込みデバイスに対してデータベース・アプリケーションを開発、配備できます。

    ♦ 『Ultra Light - .NET プログラミング』 このマニュアルでは、Ultra Light.NET について説明します。Ultra Light.NET を使用すると、PC、ハンドヘルド、モバイル、埋め込みデバイスのデータベース・アプリケーションを開発し、これらのデバイスに配備できます。

    ♦ 『Ultra Light - M-Business Anywhere プログラミング』 このマニュアルは、Ultra Light for M-Business Anywhere について説明します。Ultra Light for M-Business Anywhere を使用すると、Palm OS、Windows CE、または Windows XP を搭載しているハンドヘルド、モバイル、または埋め込みデバイスに対して Web ベースのデータベース・アプリケーションを開発、配備できます。

    ♦ 『Ultra Light - C/C++ プログラミング』 このマニュアルでは、Ultra Light C および Ultra LightC++ のプログラミング・インタフェースについて説明します。Ultra Light を使用すると、ハンドヘルド、モバイル、埋め込みデバイスに対してデータベース・アプリケーションを開発、配備できます。

    マニュアルの形式

    SQL Anywhere のマニュアルは、次の形式で提供されています。

    ♦ オンライン・マニュアル オンライン・マニュアルには、SQL Anywhere の完全なマニュアルがあり、SQL Anywhere ツールに関する印刷マニュアルとコンテキスト別のヘルプの両方が含

    SQL Anywhere のマニュアル

    Copyright © 2007, iAnywhere Solutions, Inc. xi

  • まれています。オンライン・マニュアルは、製品のメンテナンス・リリースごとに更新されます。これは、最新の情報を含む最も完全なマニュアルです。

    Windows オペレーティング・システムでオンライン・マニュアルにアクセスするには、[スタート] − [プログラム] − [SQL Anywhere 10] − [オンライン・マニュアル] を選択します。オンライン・マニュアルをナビゲートするには、左ウィンドウ枠で HTML ヘルプの目次、索引、検索機能を使用し、右ウィンドウ枠でリンク情報とメニューを使用します。

    UNIX オペレーティング・システムでオンライン・マニュアルにアクセスするには、SQLAnywhere のインストール・ディレクトリまたはインストール CD に保存されている HTMLマニュアルを参照してください。

    ♦ PDF ファイル SQL Anywhere の完全なマニュアル・セットは、Adobe Reader で表示できるAdobe Portable Document Format (pdf) 形式のファイルとして提供されています。

    Windows では、PDF 形式のマニュアルはオンライン・マニュアルの各ページ上部にある PDFのリンクから、または Windows の [スタート] メニュー ([スタート] − [プログラム] − [SQLAnywhere 10] − [オンライン・マニュアル - PDF フォーマット]) からアクセスできます。

    UNIX では、PDF 形式のマニュアルはインストール CD にあります。

    はじめに

    xii Copyright © 2007, iAnywhere Solutions, Inc.

  • 表記の規則この項では、このマニュアルで使用されている書体およびグラフィック表現の規則について説明します。

    SQL 構文の表記規則SQL 構文の表記には、次の規則が適用されます。

    ♦ キーワード SQL キーワードはすべて次の例に示す ALTER TABLE のように大文字で表記します。

    ALTER TABLE [ owner.]table-name

    ♦ プレースホルダ 適切な識別子または式で置き換えられる項目は、次の例に示す owner や table-name のように表記します。

    ALTER TABLE [ owner.]table-name

    ♦ 繰り返し項目 繰り返し項目のリストは、次の例に示す column-constraint のように、リストの要素の後ろに省略記号 (ピリオド 3 つ …) を付けて表します。

    ADD column-definition [ column-constraint, … ]

    複数の要素を指定できます。複数の要素を指定する場合は、各要素間をカンマで区切る必要があります。

    ♦ オプション部分 文のオプション部分は角カッコで囲みます。

    RELEASE SAVEPOINT [ savepoint-name ]

    この例では、角カッコで囲まれた savepoint-name がオプション部分です。角カッコは入力しないでください。

    ♦ オプション 項目リストから 1 つだけ選択する場合や、何も選択しなくてもよい場合は、項目間を縦線で区切り、リスト全体を角カッコで囲みます。

    [ ASC | DESC ]

    この例では、ASC と DESC のどちらか 1 つを選択しても、選択しなくてもかまいません。角カッコは入力しないでください。

    ♦ 選択肢 オプションの中の 1 つを必ず選択しなければならない場合は、選択肢を中カッコで囲み、縦棒で区切ります。

    [ QUOTES { ON | OFF } ]

    QUOTES オプションを使用する場合は、ON または OFF のどちらかを選択する必要があります。角カッコと中カッコは入力しないでください。

    表記の規則

    Copyright © 2007, iAnywhere Solutions, Inc. xiii

  • オペレーティング・システムの表記規則

    ♦ Windows デスクトップおよびラップトップ・コンピュータ用の Microsoft Windows オペレーティング・システムのファミリのことです。Windows ファミリには Windows Vista や WindowsXP も含まれます。

    ♦ Windows CE Microsoft Windows CE モジュラ・オペレーティング・システムに基づいて構築されたプラットフォームです。Windows Mobile や Windows Embedded CE などのプラットフォームが含まれます。

    Windows Mobile は Windows CE 上に構築されています。これにより、Windows のユーザ・インタフェースや、Word や Excel といったアプリケーションの小規模バージョンなどの追加機能が実現されています。Windows Mobile は、モバイル・デバイスで最も広く使用されています。

    SQL Anywhere の制限事項や相違点は、基盤となっているオペレーティング・システム (WindowsCE) に由来しており、使用しているプラットフォーム (Windows Mobile など) に依存していることはほとんどありません。

    ♦ UNIX 特に記述がないかぎり、UNIX は Linux プラットフォームと UNIX プラットフォームの両方のことです。

    ファイルの命名規則

    マニュアルでは、パス名やファイル名などのオペレーティング・システムに依存するタスクと機能を表すときは、通常 Windows の表記規則が使用されます。ほとんどの場合、他のオペレーティング・システムで使用される構文に簡単に変換できます。

    ♦ ディレクトリ名とパス名 マニュアルでは、ドライブを示すコロンや、ディレクトリの区切り文字として使用する円記号など、Windows の表記規則を使用して、ディレクトリ・パスのリストを示します。次に例を示します。

    MobiLink¥redirector

    UNIX、Linux、Mac OS X では、代わりにスラッシュを使用してください。次に例を示します。

    MobiLink/redirector

    SQL Anywhere がマルチプラットフォーム環境で使用されている場合、プラットフォーム間でのパス名の違いに注意する必要があります。

    ♦ 実行ファイル マニュアルでは、実行ファイルの名前は、Windows の表記規則が使用され、拡張子 .exe が付きます。UNIX、Linux、Mac OS X では、実行ファイルの名前には拡張子は付きません。NetWare では、実行ファイルの名前には、拡張子 .nlm が付きます。

    たとえば、Windows では、ネットワーク・データベース・サーバは dbsrv10.exe です。UNIX、Linux、Mac OS X では、dbsrv10 になります。NetWare では、dbsrv10.nlm になります。

    ♦ install-dir インストール・プロセスでは、SQL Anywhere をインストールするロケーションを選択できます。マニュアルでは、このロケーションは install-dir という表記で示されます。

    はじめに

    xiv Copyright © 2007, iAnywhere Solutions, Inc.

  • インストールが完了すると、環境変数 SQLANY10 によって SQL Anywhere コンポーネントがあるインストール・ディレクトリのロケーション (install-dir) が指定されます。SQLANYSH10は、SQL Anywhere が他の Sybase アプリケーションと共有しているコンポーネントがあるディレクトリのロケーションを指定します。

    オペレーティング・システム別の install-dir のデフォルト・ロケーションの詳細については、「SQLANY10 環境変数」 『SQL Anywhere サーバ - データベース管理』を参照してください。

    ♦ samples-dir インストール・プロセスでは、SQL Anywhere に含まれるサンプルをインストールするロケーションを選択できます。マニュアルでは、このロケーションは samples-dir という表記で示されます。

    インストールが完了すると、環境変数 SQLANYSAMP10 によってサンプルがあるディレクトリのロケーション (samples-dir) が指定されます。Windows の [スタート] メニューから、[プログラム] − [SQL Anywhere 10] − [サンプル・アプリケーションおよびプロジェクト] を選択すると、このディレクトリで [Windows エクスプローラ] ウィンドウが表示されます。

    オペレーティング・システム別の samples-dir のデフォルト・ロケーションの詳細については、「サンプル・ディレクトリ」 『SQL Anywhere サーバ - データベース管理』を参照してください。

    ♦ 環境変数 マニュアルでは、環境変数設定が引用されます。Windows では、環境変数を参照するのに、構文 %envvar% が使用されます。UNIX、Linux、Mac OS X では、環境変数を参照するのに、構文 $envvar または ${envvar} が使用されます。

    UNIX、Linux、Mac OS X 環境変数は、.cshrc や .tcshrc などのシェルとログイン・スタートアップ・ファイルに格納されます。

    グラフィック・アイコン

    このマニュアルでは、次のアイコンを使用します。

    ♦ クライアント・アプリケーション

    ♦ SQL Anywhere などのデータベース・サーバ

    ♦ Ultra Light アプリケーション

    表記の規則

    Copyright © 2007, iAnywhere Solutions, Inc. xv

  • ♦ データベース。高度な図では、データベースとデータベースを管理するデータ・サーバの両方をこのアイコンで表します。

    ♦ レプリケーションまたは同期のミドルウェア。ソフトウェアのこれらの部分は、データベース間のデータ共有を支援します。たとえば、Mobile Link サーバ、SQL Remote Message Agentなどが挙げられます。

    ♦ Sybase Replication Server

    ♦ プログラミング・インタフェース

    インタフェース

    はじめに

    xvi Copyright © 2007, iAnywhere Solutions, Inc.

  • 詳細情報の検索/フィードバックの提供

    詳細情報の検索

    詳しい情報やリソース (コード交換など) については、iAnywhere Developer Network (http://www.ianywhere.com/developer/) を参照してください。

    ご質問がある場合や支援が必要な場合は、次に示す Sybase iAnywhere ニュースグループのいずれかにメッセージをお寄せください。

    ニュースグループにメッセージをお送りいただく際には、ご使用の SQL Anywhere バージョンのビルド番号を明記し、現在発生している問題について詳しくお知らせくださいますようお願いいたします。バージョン情報は、コマンド・プロンプトで dbeng10 -v と入力して確認できます。

    ニュースグループは、ニュース・サーバ forums.sybase.com にあります (ニュースグループにおけるサービスは英語でのみの提供となります)。以下のニュースグループがあります。

    ♦ sybase.public.sqlanywhere.general

    ♦ sybase.public.sqlanywhere.linux

    ♦ sybase.public.sqlanywhere.mobilink

    ♦ sybase.public.sqlanywhere.product_futures_discussion

    ♦ sybase.public.sqlanywhere.replication

    ♦ sybase.public.sqlanywhere.ultralite

    ♦ ianywhere.public.sqlanywhere.qanywhere

    ニュースグループに関するお断り

    iAnywhere Solutions は、ニュースグループ上に解決策、情報、または意見を提供する義務を負うものではありません。また、システム・オペレータ以外のスタッフにこのサービスを監視させて、操作状況や可用性を保証する義務もありません。iAnywhere のテクニカル・アドバイザとその他のスタッフは、時間のある場合にかぎりニュースグループでの支援を行います。こうした支援は基本的にボランティアで行われるため、解決策や情報を定期的に提供できるとはかぎりません。支援できるかどうかは、スタッフの仕事量に左右されます。

    フィードバック

    このマニュアルに関するご意見、ご提案、フィードバックをお寄せください。

    マニュアルに関するご意見、ご提案は、SQL Anywhere ドキュメンテーション・チームの[email protected] 宛てに電子メールでお寄せください。このアドレスに送信された電子メールに返信はいたしませんが、お寄せいただいたご意見、ご提案は必ず読ませていただきます。

    マニュアルまたはソフトウェアについてのフィードバックは、上記のニュースグループを通してお寄せいただいてもかまいません。

    詳細情報の検索/フィードバックの提供

    Copyright © 2007, iAnywhere Solutions, Inc. xvii

    http://www.ianywhere.com/developer/http://www.ianywhere.com/developer/news://forums.sybase.com/sybase.public.sqlanywhere.generalnews://forums.sybase.com/sybase.public.sqlanywhere.linuxnews://forums.sybase.com/sybase.public.sqlanywhere.mobilinknews://forums.sybase.com/sybase.public.sqlanywhere.product_futures_discussionnews://forums.sybase.com/sybase.public.sqlanywhere.replicationnews://forums.sybase.com/sybase.public.sqlanywhere.ultralitenews://forums.sybase.com/ianywhere.public.sqlanywhere.qanywheremailto:[email protected]

  • xviii

  • パート I. データベースの設計と作成

    パート I では、データベースの設計と構築に関わる主要な概念と方式について説明します。データベースの設計、およびテーブル、ビュー、インデックスを扱う技術を取り上げます。また、参照整合性や

    トランザクションについても説明します。

  • 第 1 章

    データベースの設計

    目次

    データベースの設計の概要 ........................................................................................... 4データベース設計の概念 ............................................................................................... 5設計のプロセス ........................................................................................................... 11テーブル・プロパティの設計 ...................................................................................... 24

    Copyright © 2007, iAnywhere Solutions, Inc. 3

  • データベースの設計の概要中規模までのデータベースの設計は、難しくはありませんが、非常に重要な作業です。設計が良くないと、データベース・システムは非効率的で信頼性の低いものになってしまいます。クライアント・アプリケーションはデータベースの特定の部分に対して処理を行うように構築されており、データベースの設計に依存しています。このため、設計のよくないデータベースをあとから修正するのは困難です。

    詳細については、データベース設計の入門書も参考にしてください。

    データベースの設計

    4 Copyright © 2007, iAnywhere Solutions, Inc.

  • データベース設計の概念

    データベースを設計する上で、何についての情報を格納するか、それぞれについてどの情報を保持するかを計画します。また、これらの情報がどのように関連しているかを調べます。データベース設計の一般的な用語では、この手順で作成するものを「概念データベース・モデル」といいます。

    エンティティと関係

    情報を格納する対象となる、識別可能なオブジェクトまたは物事を「エンティティ」と呼びます。エンティティの間の結合は「関係」と呼びます。データベース記述言語では、エンティティを名詞、関係を動詞と捉えることができます。

    概念モデルは、エンティティと関係の間の識別を明確にするので便利です。これらのモデルは、特定のデータベース管理システムに設計を実装するときに伴う細部が表示されないようにします。これによって、ユーザは基本的なデータベース構造に焦点をしぼることができます。また、概念モデルは、データベース設計のための共通言語を形成します。

    ER (実体関連) 図概念データベース・モデルの主なコンポーネントは、エンティティとの関係を表す図です。この図は一般に「ER (実体関連) 図」と呼ばれています。多くの人が概念データベース・モデルを作成する作業のことを ER モデリングと呼びます。

    概念データベース設計はトップ・ダウン設計方法です。Sybase PowerDesigner などのツールは、この方法を実行するのに役立ちます。この章では紹介にとどめますが、実際には簡単なデータベースを設計するのに必要な情報が含まれています。

    エンティティ

    「エンティティ」は、データベースにおける名詞の役割を果たします。従業員、注文品目、部署、製品などの個別オブジェクトはすべてエンティティの例です。データベースでは、テーブルが各エンティティを表します。データベースに構築されるエンティティは、客先訪問の記録や、従業員データの管理など、データベースを使用する活動 (アクティビティ) から生じるものです。

    属性

    各エンティティには多くの「属性」があります。属性は、格納する対象に固有の特性です。たとえば、従業員エンティティでは、従業員 ID、姓と名前、住所、その他の特定の従業員に関する情報などを格納します。属性はプロパティともいいます。

    エンティティは四角いボックスで表します。中には、エンティティに関連する属性をリストします。

    Employee NumberFirst NameLast NameAddress

    Employee

    データベース設計の概念

    Copyright © 2007, iAnywhere Solutions, Inc. 5

  • 「識別子 (identifier)」 は他のすべての属性が依存する 1 つ以上の属性です。エンティティの中の項目をユニークに識別します。識別子となる属性の名前に下線を引きます。

    図の Employee エンティティでは、従業員番号 (Employee Number) が従業員をユニークに識別します。他の属性は、すべてある従業員にだけ関係する情報を格納しています。たとえば、従業員番号は従業員の名前 (Name) や住所 (Address)をユニークに決定します。同じ名前や同じ住所の従業員が 2 人いるかもしれませんが、同じ従業員番号ではありません。識別子であることを示すために、Employee Number に下線を引きます。

    各エンティティの識別子を作成すると実用的です。あとで説明しますが、これらの識別子はテーブルのプライマリ・キーになります。プライマリ・キーの値はユニークである必要があり、NULLまたは未定義にはできません。プライマリ・キーはテーブルの各ローをユニークに識別し、データベース・サーバのパフォーマンスを改善します。

    関係

    エンティティ間の「関係」は、データベースにおける動詞の役割を果たします。従業員は部署のメンバであり、事業所は都市にあります。後述するとおり、データベース内の関係はテーブル間の外部キー関係として表示されることも、それ自体が独立したテーブルとして表示されることもあります。

    データベースの関係は、エンティティのデータを管理する規則や習慣の符号化です。各部署に部長が 1 人いる場合、部長を識別する、部署と従業員の間の 1 対 1 の関係を作成できます。

    一度データベースの構造に関係が組み込まれると、例外はあり得ません。部長をもう 1 人入力することはできません。部署のエントリの重複は、識別子である部署 ID の重複にも関係します。識別子の重複は許可されません。

    ヒント

    厳密なデータベース構造は、部署に 2 人マネージャがいるなどの矛盾を排除できるので便利です。一方で、設計者としては、予測していない使用があった場合のために、多少の拡張ができる程度に柔軟に設計してください。設計が良くできているデータベースを拡張するのは、通常それほど難しくありませんが、既存のテーブル構造を変更すると、データベース全体およびそのクライアント・アプリケーションが使えなくなるおそれがあります。

    関係のカーディナリティ

    テーブルの間には 3 種類の関係があります。これは関係に関わるエンティティの「カーディナリティ (数)」に相当します。

    ♦ 1 対 1 の関係 2 つのエンティティを線で結んで関係を示します。線上には 2 つの小さい円などの他のマークがあります。あとの項でこれらのマークの目的を説明します。次の図では、1 人の従業員が 1 つの部署を管理しています。

    データベースの設計

    6 Copyright © 2007, iAnywhere Solutions, Inc.

  • Department Employee

    管理関係

    ♦ 1 対多の関係 エンティティ 2 と結ばれた複数の線は、エンティティ 1 の 1 つの項目がエンティティ 2 の複数のエンティティに関連付けられるということを示しています。次の図では、1 つの事業所に多数の電話があります。

    Office Telephones

    電話配置関係

    ♦ 多対多の関係 この関係では、両方のエンティティへの接続を示す複数の線を引きます。つまり、1 つの倉庫に各種部品を保管でき、複数の倉庫に 1 種類の部品を保管できます。

    Parts Warehouses

    保管関係

    役割

    各関係は 2 つの「役割」を使用して表すことができます。役割はそれぞれの視点から関係を説明する動詞または句です。たとえば、従業員と部署の間の関係は次の 2 つの役割で説明できます。

    1. 従業員は部署のメンバです。

    2. 部署は従業員を含みます。

    Department

    Department IDDepartment Name

    Employee

    Employee NumberFirst NameLast NameAddress

    所属

    配属社員

    役割は非常に重要です。これは作業を検証する便利で効率的な手段を提供するためです。

    データベース設計の概念

    Copyright © 2007, iAnywhere Solutions, Inc. 7

  • ヒント

    左から右に読む場合も、右から左に読む場合も、次のルールに従うことでこれらの図を間単に読むことができます。最初のエンティティの名前を読み込み、最初のエンティティの横にある役割を読み込み、2 つめのエンティティへの接続のカーディナリティを読み込んで、2 つめのエンティティの名前を読み込みます。上の図で、左から右に読み込むと、各従業員は 1 つの部門の構成メンバになります。右から左に読み込むと、1 つの部門には複数の従業員が含まれます。

    必須要素

    関係を示す線の端のすぐ手前にある小さい円は、重要な目的を示すものです。円は対応する要素がもう一方のエンティティになくても、あるエンティティ内で要素が存在できることを意味しています。

    円の場所に横棒がある場合は、エンティティにはもう一方のエンティティの要素ごとに少なくとも 1 つの要素があります。例でこれらの文について説明します。

    Publisher

    ID NumberPublisher Name

    Book

    ID NumberTitle

    Author

    ID NumberFirst NameLast Name

    発行元

    発行物

    著者

    著作物

    この図は次の 4 つの文に対応しています。

    1. 1 つの出版社は 0 または 1 冊以上の本を出版します。

    2. 1 冊の本は 1 つの出版社のみから出版されます。

    3. 1 冊の本は 1 人または複数の作家によって書かれます。

    4. 1 人の作家は 0 または 1 冊以上の本を書きます。

    ヒント

    小さい円を数字の 0、横棒を数字の 1 と考えます。円は最低 0 を表します。横棒は最低 1 を表します。

    データベースの設計

    8 Copyright © 2007, iAnywhere Solutions, Inc.

  • 再帰関係

    場合によっては、単一のエンティティ内のエントリ間で関係が存在することがあります。このような場合、関係を「再帰」と呼びます。関係の両端は単一のエンティティに付加されます。

    Employee

    Employee NumberFirst NameLast NameAddress

    管理 レポート先

    この図は次の 2 つの文に対応します。

    1. 1 人の従業員は最大 1 人の他の従業員にレポートします。

    2. 1 人の従業員は 0 人以上の従業員を管理します。

    この関係の場合、両方向において関係が必然的に任意になることに注意してください。マネージャでない従業員もいます。同様に、少なくとも 1 人の従業員は組織の長で、だれの監督下にもありません。

    当然、従業員は自分自身のマネージャにはなれません。この制限は一種のビジネス・ルールです。ビジネス・ルールについては、後述の「設計のプロセス」 11 ページを参照してください。

    多対多の関係をエンティティに変更

    エンティティにではなく関係に関連する属性がある場合は、関係をエンティティに変更できます。このような状況は、関係に特有の属性があり、それをどちらのエンティティにも合理的に追加できない場合に、多対多の関係でしばしば起こります。

    部品の在庫が複数の倉庫に置かれているとします。この場合、次のような図を描くことができます。

    Warehouse

    Warehouse IDAddress

    Parts

    Part NumberDescription

    しかし、それぞれの場所に格納されている各部品数を記録したいとします。この属性は関係にだけ関連付けできます。各部品数は、関係する部品と倉庫の両方に依存します。この状況を表すには、次のように図を再作成します。

    データベース設計の概念

    Copyright © 2007, iAnywhere Solutions, Inc. 9

  • Parts

    Part NumberDescription

    Warehouse

    Warehouse IDAddress

    保管場所

    Inventory

    Quantity 保管内容

    変換に関して次の点に注意してください。

    1. 2 つの新しい関係は、関係エンティティと 2 つの元のエンティティのそれぞれをジョインします。これらは元の関係の 2 つの役割から名前を継承して、それぞれ保管場所と保管内容にします。

    2. Inventory エンティティの各エントリには、Part エンティティの必須エントリが 1 つとWarehouse エンティティの必須エントリが 1 つ必要です。在庫関係は特定の部品と特定の倉庫と関連付けられなければ意味がないため、これらの関係が必須になります。

    3. 新しいエンティティは Part エンティティと Warehouse エンティティの両方に依存します。これは、新しいエンティティが両方のエンティティの識別子によって識別されるということです。この新しい図では、Part エンティティからのある識別子と Warehouse エンティティからのある識別子が Inventory エンティティのエントリをユニークに識別します。2 つの新しい関係を新しい Inventory エンティティにジョインする、円と複数の線の間に表示される三角は依存性を表します。

    Inventory エンティティに Part Number 属性、または Warehouse ID 属性を追加しないでください。Inventory エンティティの各エントリは、特定の部品と特定の倉庫の両方に依存していますが、三角はこの依存をより明確に表しています。

    データベースの設計

    10 Copyright © 2007, iAnywhere Solutions, Inc.

  • 設計のプロセス

    設計には主に次に示す 5 つの手順があります。

    ♦ 「手順 1:エンティティと関係を決定する」 11 ページ♦ 「手順 2:必要なデータを決定する」 13 ページ♦ 「手順 3:データを正規化する」 15 ページ♦ 「手順 4:関係を解析する」 19 ページ♦ 「手順 5:設計を検証する」 22 ページ

    データベース設計の実装の詳細については、「データベース・オブジェクトの使用」 29 ページを参照してください。

    手順 1:エンティティと関係を決定する

    ♦ 設計のエンティティとそれらの間の関係を決定するには、次の手順に従います。

    1. 上位レベルのアクティビティの定義 このデータベースを使用する一般的なアクティビティを決定します。たとえば、従業員に関する情報を追跡して、変更があればそれをすぐ利用できるように記録しておくことです。

    2. エンティティを決定する 作成したアクティビティ・リストから、情報の管理に必要なサブジェクト領域を決定します。これらのサブジェクトがエンティティになります。たとえば従業員の採用、部署への配属、スキル・レベルの決定などです。

    3. 関係を決定する アクティビティを検討し、エンティティ間の関係がどのようなものか決定します。たとえば、部品と倉庫の間には関係があります。各関係を表す 2 つの役割を定義します。

    4. アクティビティを分解する ここでは上位アクティビティを定義しました。ここでは上位レベルのアクティビティが、下位レベルのアクティビティに分解できるかどうかを検討します。たとえば、従業員データを管理するという上位レベルのアクティビティは、次に示す下位レベルのアクティビティに分解できます。

    ♦ 新しい従業員の追加

    ♦ 現在の従業員データの更新

    ♦ 退社した従業員データの削除

    5. ビジネス・ルールの決定 業務内容を検討し、どのようなルールに従っているかを調べます。たとえば、各部署は 1 人の長を持つ、ただし複数の長は持たないというのは 1 つのルールです。これらのルールはデータベースの構造に組み込まれます。

    設計のプロセス

    Copyright © 2007, iAnywhere Solutions, Inc. 11

  • エンティティと関係の例

    ACME Corporation は 5 か所に事業所を持つ中規模な企業です。現在従業員数は 75 名です。この企業は急速な成長に備えており、それぞれ長を持つ 9 つの部署があります。

    新しい従業員の採用のため、人事部はこれからの同社に必要となる 68 のスキルを決定しました。新規に従業員が採用されたときには、その従業員のスキルごとのスキル・レベルが識別されます。

    上位レベルのアクティビティの定義

    次に ACME Corporation の上位レベルのアクティビティをいくつか示します。

    ♦ 従業員の採用

    ♦ 従業員の退職の処理

    ♦ 個人別の従業員情報の管理

    ♦ 企業に必要なスキルの管理

    ♦ 各従業員がどのスキルを持っているかの管理

    ♦ 部署のデータの管理

    ♦ 事業所のデータの管理

    エンティティと関係の決定

    エンティティ (サブジェクト) とそれらを接続する関係 (役割) を決定します。各サブジェクトの記述と上位レベルのアクティビティから図を作成します。

    エンティティは四角で表し、関係は線で表します。2 つの役割を使用して各関係にラベルを付けます。関係が 1 対多、1 対 1、多対多のどれにあたるかも適切な注釈を使って決定します。

    次に示すのは、大まかな ER 図です。この例を通じて徐々に詳細なものになります。

    取得者

    有するスキル

    勤務先

    勤務者

    管理 レポート先

    管理者

    管理

    配属社員

    所属

    SkillDepartment

    Employee

    Office

    データベースの設計

    12 Copyright © 2007, iAnywhere Solutions, Inc.

  • 上位レベルのアクティビティの分解

    前述の上位レベルのアクティビティをもとに分解した下位レベルのアクティビティを次に示します。

    ♦ 従業員の追加または削除

    ♦ 事業所の追加または削除

    ♦ 部署の従業員のリスト

    ♦ 新しいスキルのスキル・リストへの追加

    ♦ 従業員のスキルの決定

    ♦ 各スキルに対する従業員のスキル・レベルの決定

    ♦ 特定のスキルに関して同一スキル・レベルにある従業員すべての決定

    ♦ 従業員のスキル・レベルの変更

    これらの下位レベルのアクティビティは、新しくテーブルや関係が必要となるかどうかを決定するのに使用できます。

    ビジネス・ルールの決定

    ビジネス・ルールは、1 対多、1 対 1、多対多の関係を決定します。

    データベースに関係する可能性があるビジネス・ルールを次に示します。

    ♦ 現在 5 つの事業所があり、拡張計画は最大 10 の事業所まで可能

    ♦ 従業員は部署または事業所を移動できる

    ♦ 各部署には 1 人の長がいる

    ♦ 各事業所の電話番号は最大 3 つある

    ♦ 各電話番号には 1 つまたは複数の内線番号がある

    ♦ 新しく従業員が採用された場合には、スキルごとのスキル・レベルが決定される

    ♦ 各従業員は 3 から 20 のスキルを持つ

    ♦ 従業員は事業所に属すことも属さないこともある

    手順 2:必要なデータを決定する

    ♦ 必要なデータを決定するには、次の手順に従います。

    1. 基本となるデータを決定します。

    2. 追跡する必要があるデータをすべてリストします。

    3. 各エンティティのデータを準備します。

    設計のプロセス

    Copyright © 2007, iAnywhere Solutions, Inc. 13

  • 4. 各エンティティで使用可能なデータをリストします。エンティティ (サブジェクト) を記述するデータは、誰が、何を、どこで、いつ、なぜ、の基準を満たすようにします。

    5. 各関係 (動詞) に必要なデータをリストします。

    6. 各関係のデータがある場合はリストします。

    基礎となるデータの決定

    決定する基礎データはエンティティの属性の名前になります。たとえば、Employee エンティティ、Skill エンティティ、Expert In 関係に適用されるデータを次に示します。

    Employee Skill Expert In

    Employee ID Skill ID Skill level

    Employee first name Skill name Date skill was acquired

    Employee last name Description of skill

    Employee department

    Employee office

    Employee address

    この図は、次のようになります。

    取得者

    有するスキルEmployee

    Employee IDFirst nameLast nameHome address

    Skill

    Skill IDSkill nameSkill description

    この図には、リストした属性すべてが表示されているわけではない点に注意してください。足りない項目は 2 種類のカテゴリに分かれます。

    1. 他の関係に暗黙的に含まれている場合。たとえば、Employee department と Employee officeは Department と Office エンティティの関係によってそれぞれ示されます。

    2. どのエンティティとも関連しておらず、エンティティ間の関係と関連しているため存在しない場合。この図は不適当です。

    項目の 1 つ目のカテゴリは ER 図全体を作成すれば自然に収まります。

    この多対多の関係をエンティティに変換すると、2 つ目のカテゴリを追加できます。

    データベースの設計

    14 Copyright © 2007, iAnywhere Solutions, Inc.

  • 取得者有するスキル

    Employee

    Employee IDFirst nameLast nameHome address

    Expert In

    Skill levelDate acquired

    Skill

    Skill IDSkill nameSkill description

    新しいエンティティは、Employee エンティティと Skill エンティティの両方に依存します。このエンティティは両方のエンティティに依存するため、これらのエンティティから識別子を借ります。

    注意

    ♦ 基礎となるデータを確認するときは、先に確認したアクティビティを参照してデータへのアクセス方法を考慮します。

    たとえば、従業員を姓や名前でソートする必要があるとします。そのためには、データを FirstName (名前) 属性と Last Name (姓) 属性に分け、氏名 (姓と名前の両方を含む) という 1 つの属性とはしません。姓と名前に分けることで、各作業に適した 2 つのインデックスを後で作成できます。

    ♦ 名前には一貫性を持たせます。一貫性があればデータベースのメンテナンスが簡単で、レポートや出力ウィンドウの内容も読みやすくなります。

    たとえば、従業員の状況属性に Emp_status などの省略名を使用する場合は、別の属性で、Employee_ID などの完全な名前は使用しないようにします。この場合は Emp_status とEmp_ID、としてください。

    ♦ この段階では、データはエンティティに最初から正しく関連している必要はありません。適切と思われる入力をしておきます。次の項で、それが正しかったかどうかを確認します。

    手順 3:データを正規化する

    正規化とはデータの冗長性を排除し、データが正しくエンティティまたは関係に属していることを確認する一連のテストのことです。テストは 5 つあります。この項では、その内の最初の 3 つを説明します。この 3 つのテストは最も重要なので、頻繁に使用されています。

    正規化が必要な理由

    正規化の目的は、冗長性を排除し一貫性を高めることです。たとえば、顧客の住所を複数のロケーションに格納すると、変更があった場合に正しくすべてを更新するのが難しくなります。

    正規化テストの詳細については、データベース設計に関連する書籍を参照してください。

    正規形

    データの正規化には、複数のテストがあります。データが最初のテストに通ればそのデータは第 1 正規形と呼ばれます。2 番目のテストに通れば第 2 正規形、3 番目のテストに通れば第 3 正規形と呼ばれます。

    設計のプロセス

    Copyright © 2007, iAnywhere Solutions, Inc. 15

  • ♦ データベースのデータを正規化するには、次の手順に従います。

    1. データをリストします。

    ♦ 各エンティティが少なくとも 1 つのキーを持つことを確認します。各エンティティは識別子を持つ必要があります。

    ♦ 関係のキーを確認します。関係のキーとはジョインしている 2 つのエンティティからのキーです。

    ♦ 基本となるデータのリストの中に計算されたデータがないか確認します。通常、計算されたデータはリレーショナル・データベースには格納されません。

    2. データを第 1 正規形にします。

    ♦ 属性が同じエントリに対して複数の値を持つ可能性がある場合は、繰り返されるデータを削除します。

    ♦ 削除したデータで 1 つまたは複数のエンティティか関係を作成します。

    3. データを第 2 正規形にします。

    ♦ 複数の属性からなるキーを持つエンティティと関係を確認します。

    ♦ 複数のキーのうち、一部にのみ依存するデータを削除します。

    ♦ 削除したデータで 1 つまたは複数のエンティティと関係を作成します。

    4. データを第 3 正規形にします。

    ♦ エンティティと関係のキー以外のデータに依存するデータを削除します。

    ♦ 削除したデータで 1 つまたは複数のエンティティと関係を作成します。

    データと識別子

    データをリストしてテーブルごとの固有の識別子を確認してから、データの正規化 (設計のテスト) を開始します。識別子は 1 つのデータ (属性) または複数のデータ (複合識別子) から構成されます。

    識別子はエンティティの中の各ローをユニークに識別する一連の属性です。たとえば、Employeeエンティティの識別子は、Employee ID 属性です。Works In 関係の識別子は、Office Code とEmployee ID 属性から構成されています。

    接続する各エンティティから識別子を取得してデータベースの各関係の識別子を作成できます。次の表は、アスタリスクがついている属性がエンティティまたは関係用の識別子を示しています。

    データベースの設計

    16 Copyright © 2007, iAnywhere Solutions, Inc.

  • エンティティまたは関係 属性

    Office *Office code

    Office address

    Phone number

    Works in *Office code

    *Employee ID

    Department *Department ID

    Department name

    Heads *Department ID

    *Employee ID

    Member of *Department ID

    *Employee ID

    Skill *Skill ID

    Skill name

    Skill description

    Expert in *Skill ID

    *Employee ID

    Skill level

    Date acquired

    Employee *Employee ID

    Last name

    First name

    Social security number

    Address

    Phone number

    Date of birth

    データを第 1 正規形にする

    ♦ 第 1 正規形をテストするには、繰り返される値を持つ属性を探します。

    ♦ 複数の値が単一の項目に適用できる場合は属性を削除します。これらの繰り返される属性を新しいエンティティに入れます。

    設計のプロセス

    Copyright © 2007, iAnywhere Solutions, Inc. 17

  • 次に示す例では、電話番号が繰り返されます。事業所には複数の電話番号があるからです。

    Office codeOffice addressPhone number

    Office and phone

    繰り返される属性を削除し、Telephone というエンティティを新しく作成します。Telephone とOffice の間に関係を作成します。

    所有している電話

    配置場所

    Office codeOffice address

    Office

    Phone number

    Telephone

    データを第 2 正規形にする

    ♦ キー全体に依存しないデータを削除します。

    ♦ 複数の属性からなる識別子を持つエンティティと関係にのみ注目します。第 2 正規形をテストするには、識別子全体に依存しないデータを削除します。各属性は、識別子を構成するすべての属性に依存するようにします。

    次に示す例では、Employee and Department エンティティは 2 つの属性からなる識別子を持っています。データによっては両方の識別子属性に依存していません。たとえば、department name はその属性のうちの 1 つ Department ID にのみ依存しています。また Employee first name は EmployeeID にのみ依存しています。

    Employee and Department

    Employee IDDepartment IDEmployee first nameEmployee last nameDepartment name

    他の従業員データが依存しない識別子 Department ID を Department というエンティティに移動します。また、その識別子に依存するすべての属性も移動します。Employee と Department の間に関係を作成します。

    所属

    配属社員

    Department

    Department IDDepartment name

    Employee

    First nameLast nameAddress

    データベースの設計

    18 Copyright © 2007, iAnywhere Solutions, Inc.

  • データを第 3 正規形にする

    ♦ キーに直接依存しないデータを削除します。

    ♦ 第 3 正規形をテストするには、識別子に直接ではなく他の属性に依存する属性を削除します。

    この例では、Employee and Office エンティティには識別子 Employee ID に依存する属性がいくつかあります。しかし、Office location や Office phone などの属性は、別の属性である Office codeに依存しています。識別子である Employee ID には直接依存しません。

    Employee and Office

    Employee IDEmployee first nameEmployee last nameOffice codeOffice locationOffice phone

    Office code とそれに依存する属性を削除します。Office という新しいエンティティを作成します。そして Employee と Office を接続する関係を作成します。

    勤務先

    勤務者

    Office

    Office codeOffice locationOffice phone

    Employee

    Employee IDEmployee first nameEmployee last name

    手順 4:関係を解析する

    正規化が終了したら、データベースの設計はほとんど完成です。次に行うことは、概念データ・モデルに対応する「物理データ・モデル」の生成です。この作業の大部分が概念データ・モデルの関係を、対応するテーブルと外部キー関係に変換することであるため、関係の解析とも言われます。

    概念データ・モデルは実装作業とはほとんど関係ありませんが、物理データ・モデルはテーブル構造や特定のデータベース・アプリケーションで利用できるオプションと密接に関係しています。ここでのアプリケーションとは SQL Anywhere を指します。

    データを含まない関係の解析

    データを含まない関係を実装するには、外部キーを設定します。「外部キー」とは、他のテーブルからのプライマリ・キー値を含むカラムまたはカラム・セットです。外部キーを使用すると、複数のテーブルのデータに同時にアクセスできます。

    PowerDesigner などのデータベース設計ツールでは、独自の物理データ・モデルを生成できます。ただし、自分で行う場合は、何をキーとするかを決定するのに役立つ基本ルールがあります。

    設計のプロセス

    Copyright © 2007, iAnywhere Solutions, Inc. 19

  • ♦ 1 対多 1 対多の関係では、常に 1 つのエンティティと 1 つの外部キーの関係になります。

    Department

    Department IDDepartment Name

    Employee

    Employee NumberFirst NameLast NameAddress

    所属

    配属社員

    エンティティはテーブルになる点に注意してください。エンティティの識別子はテーブルのプライマリ・キー (または少なくともその一部) になります。属性はカラムになります。1 対多の関係では、1 つのエンティティの識別子が複数のテーブルの新しい外部キー・カラムとして表示されます。

    Department

    Department ID Department NameDepartment ID = Department ID

    Employee

    Employee ID Department ID First NameLast NameAddress

    この例では、Employee エンティティが Employees テーブル になります。同様に、Departmentエンティティが Departments テーブルになります。Department ID と呼ばれる外部キーがEmployee テーブルに表示されます。

    ♦ 1 対 1 1 対 1 の関係では、外部キーはどちらのテーブルにも方向付けできます。関係が一方では必須で、他方で任意であれば、任意の側に方向付けされます。この例では、乗り物が必ずしもトラックである必要はないので、Truck テーブルに外部キー (Vehicle ID) を置きます。

    タイプ

    可能性

    Vehicle

    Vehicle IDModelPrice

    Truck

    Weight rating

    この ER モデルは次のデータベース構造に解析されます。

    Vehicle ID = Vehicle ID

    Truck

    Vehicle ID Weight rating

    Vehicle

    Vehicle ID ModelPrice

    ♦ 多対多 多対多の関係では、新しいテーブルと 2 つの外部キーが作成されます。この方法は効率的なデータベースを作成するためには欠かせません。

    データベースの設計

    20 Copyright © 2007, iAnywhere Solutions, Inc.

  • Warehouse

    Warehouse IDAddress

    Parts

    Part NumberDescription

    新しい Storage Location テーブルは Part テーブルと Warehouse テーブルを関連付けます。

    Part Number = Part Number Warehouse ID = Warehouse ID

    Warehouse

    Warehouse ID Address

    Part

    Part Number Description

    Storage Location

    Part Number Warehouse ID

    データを含む関係の解析

    次の図に示すように、関係がデータを含むことがあります。これは、多対多の関係でしばしば起こります。

    Parts

    Part NumberDescription

    Warehouse

    Warehouse IDAddress

    保管場所

    Inventory

    Quantity 保管内容

    このような場合は、各エンティティをテーブルに解析します。各役割が別のテーブルを示す外部キーとなります。

    Warehouse ID = Warehouse IDPart Number = Part Number

    Warehouse

    Warehouse ID Address

    Parts

    Part Number Description

    Inventory

    Warehouse ID Part Number Quantity

    設計のプロセス

    Copyright © 2007, iAnywhere Solutions, Inc. 21

  • Inventory エンティティは Part テーブルと Warehouse テーブルの両方に依存しているため、それぞれから識別子を借りています。解析すると、これらの借りた識別子は Inventory テーブルのプライマリ・キーになります。

    ヒント

    概念データ・モデルは多くの詳細を隠すため、設計プロセスを簡略化します。たとえば、多対多の関係は必ず新しいテーブルと 2 つの外部キー参照を生成します。概念データ・モデルでは、通常これらの構造すべてを単一の接続で示すことができます。

    手順 5:設計を検証する

    要求がサポートされていることを確認してから、作成した設計を実装します。設計の最初に確認したアクティビティを検査して、それに必要なすべてのデータにアクセスできることを確認します。

    ♦ 必要な情報を取得するパスが検索できるか?

    ♦ 設計はユーザの要求を満たしているか?

    ♦ 必要なすべてのデータは使用可能か?

    これらすべての条件を満たしていれば、作成した設計を実装できます。

    最終設計

    小規模な会社用のデータベースに手順 1 から手順 3 までを適用すると、次の ER 図が作成されます。このデータベースは現在第 3 正規形です。

    データベースの設計

    22 Copyright © 2007, iAnywhere Solutions, Inc.

  • 取得者

    有するスキル

    管理者

    配属社員

    所属

    管理 レポート先

    勤務先

    勤務者

    Expert In

    Skill levelDate acquired

    Skill

    ID NumberSkill nameSkill description

    Employee

    Employee IDFirst nameLast nameHome address

    Department

    Department IDDepartment name

    Office

    ID NumberOffice nameAddress

    管理

    対応する物理データ・モデルは次のようになります。

    Skill ID = Skill ID

    Employee ID = Employee ID

    Employee ID = Employee ID

    Employee ID = Employee ID

    Office ID = Office ID

    Department ID = Department ID

    Employee ID = Mgr_Employee ID

    Employee

    Office ID Employee ID Mgr_Employee ID First nameLast nameHome address

    Expert In

    Skill ID Employee ID Skill levelDate acquired

    Office

    Office ID Office nameAddress

    Department/Employee

    Department ID Employee ID

    Department

    Department ID Employee ID Department name

    Skill

    Skill ID Skill nameSkill description

    設計のプロセス

    Copyright © 2007, iAnywhere Solutions, Inc. 23

  • テーブル・プロパティの設計

    データベース設