Skip to Content

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

 

 

 

この記事のオリジナルは、Glenn Paulley が sybase.com に2011年4月に掲載したものです。Glenn はこの中で、データベース設計における重要なコンポーネントについて、それらがどうアプリケーションのパフォーマンスに影響を与えるのか語っています。

 

 

 

以前の記事でデータベースアプリケーションのパフォーマンスにおける7つの大罪を紹介しました。

 

第一の大罪は”データベースの物理設計”に関するもので、たとえばスキーマ設計の問題、テーブルの列の順序、インデックス付け、データベースページサイズの選択など、パフォーマンスに悪影響を及ぼしかねない重要な要因はいくつも考えられます。

 

今回の記事では、SQL Anywhere のデータベース設計にまつわる具体的な問題と、ドメイン(定義域)の概念に関する内容を取り上げていきます。

 

 

ドメイン(定義域)とは

 

ドメインの概念は、E. F. Coddが発案した最初のリレーショナルデータモデルに含まれています。Chris Dateは、彼の重要な著書 [1, pp. 81] の中でドメインを次のように定義しています。

   次に、ドメインという言葉を、すべて同じ型の、スカラー値の名前付きの集合と定めることにする。たとえば、サプライヤー番号のドメインは、サプライヤー番号として取り得るすべての番号の集合になり、出荷数量のドメインは、ゼロより大きく(たとえば)10,000より小さいすべての整数の集合になる。このように、ドメインとは値のプールであり、その中から実際の属性値が抽出される。

簡単に言うと、Coddが定義したリレーショナルモデルのドメインとは、プログラミング言語の”強い型付け”の定義のようなものです。

 

プログラミング言語の場合と同様、ドメインを使用する1つの目的は、アプリケーション開発者が、たとえば納品伝票番号と顧客番号を比較するような間違いを犯さないようにすることです。
どちらの集合の値も(おそらくは)整数ですが、納品伝票番号と顧客番号を比較しても、普通はほとんど意味がありません。

 

理屈はともあれ、商用のリレーショナルデータベース製品では、ドメインの機能は過去40年間ほとんど注目を集めてきませんでした。

 

たしかに、SQL Anywhereを含むほぼすべての商用データベースシステムではDOMAINの定義(ユーザー定義データ型と呼ばれることもあります)がサポートされていますが、これらのDOMAINの実装と、リレーショナルモデルのドメインが意図するところでは大きな違いがあります。

 

ほとんどすべての商用RDBMSシステムでは、柔軟な型指定が許されています。

 

たとえばSQL Anywhereでは、数値列と文字列の比較を含むSQLステートメントが問題なく実行されます。
Ivan Bowmanが書いたホワイトペーパー(PDF)では、整合性のない比較を評価しなければならないときにSQL Anywhereで行われる暗黙的な型変換のセマンティクスの概要が示されています
(余談: 商用の製品には、それぞれ独自の暗黙的な変換規則があり、そうした比較のセマンティクスは実装依存です)。

 

このような柔軟性は、アプリケーション開発者からすると利点に見えるかもしれませんが、実際は罪なのです。その理由を説明しましょう。

 

 

 

SQL はプログラミング言語ではない

 

アプリケーション開発者は、SQLが「タプル関係計算」に基づくデータ特殊言語であることを肝に銘じておくことがきわめて重要です。
簡単に言うと、SQLは一階述語論理に基づいており、クエリでは演算の”対象”を指定するだけで、”方法”は指定しないということです。

 

 

(続きは、翔泳社 CodeZine に掲載されていますので、そちらをご覧ください。)

 

 

 

===

 

SAP SQL Anywhere に関する詳細情報は、SAP SQL Anywhere Communityページ<英語> を参照してください。

 

上記のコミュニティーに掲載されている技術情報は、順次SQL Anywhere 日本語コミュニティに掲載しています。

SQL Anywhere の日本語記事をリスト形式で表示するには、「sql anywhere japan」のタグをクリックしてください。

 

SQL Anywhere に関してはまずはこちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。

 

SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「+ Actions」から「Ask a Question」機能をご利用ください。

Language には「Japanese」、
Primary Tag には「SQL Anywhere」、
Additional tag には「SAP SQL Anywhere」、
User Tagに「sql anywhere japanese question」

を選択してください。

不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。

 

======================

ご購入に関するお問い合わせ

 

こちらよりお問い合わせください。

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply