マイナーなCREATE文

CREATE ASSERTION

SQL92で標準化された。1つ以上、複数のテーブルに対して制約をかける「表明」を定義する。
実装しているDBMSが少ないため知名度は低いが、DB側で複雑な制限をかけれるため処理速度の改善に繋がるらしい。
ストアドプロシージャとかと同じ理屈か?
(この「表明」と言う考え方はC++などのASSERTチェック等に近いものだと思われる。データ操作時にある条件を判定し、異常である場合はエラーを投げる。)
設定した条件が偽の場合にエラーを発生させることができ、SELECT文を使った複雑な制約を定義することができる。

CREATE ASSERTION 入力値チェック CHECK (NOT EXIST(SELECT * FROM 価格票,限界値 WHERE 価格表.商品コード = 限界値.商品コード AND 価格票.価格 <= 限界値.上限価格))

※表明名が「入力値チェック」、CHECK以降の文が条件である。上記例だと価格票テーブルと限界値テーブルを商品コードで結合して価格が上限価格以下であることを判定している。上限価格以上の価格が設定された場合はエラーを投げる。

CREATE DOMAIN

SQL92で標準化された。ユーザ定義のデータ型を作成する。
実装しているDBMSが少ないため知名度は低いが、DB側で入力値チェックを行えるため処理速度の改善に繋がるらしい。
ASSERTIONと合わせてリファクタリングに使えそう。
CREATE DOMAINをコールしたユーザがそのドメインの管理を行うが、使用に関しては全ユーザが行える。(場合が多い模様。DBMS依存。)

CREATE DOMAIN AGE AS CHECK (VALUE >= 18) AND (VALUE <= 99)

※18〜99までしか値を取らないユーザデータ型「AGE」を作成する。
※条件文で使用する変数名についてはSQL92では未定義?
(PostgreSQLではVALUEだった。というか他のDBMSで例を見つけられなかった。とりあえずPostgreSQLの仕様で例を記載)

三層スキーマ(アーキテクチャ)

大半のDBMSはこの三層スキーマの構造をとっている。

ユーザやクライアントプログラムとのI/F
    +
概念化したデータの定義
    +
物理装置(ファイルシステム)へのI/F

をOSの機能とマッピングするソフトウェアがDBMSであると言えるかもしれない。
概念スキーマとか似たような単語がデータモデルのほうでも出てくるので混同しそうになるが、データモデルはモデリングする際の段階、あるいは技法のことなのでこれとは位置付けが違う。別物。
三層スキーマアーキテクチャは以下の3つで構成される。

概念スキーマ

データベースに格納する対象のデータ構造を概念的に定義したもの。
実世界の情報を抽象化した成果物。
すなわち、リレーショナルデータベースなら正規化したテーブルやリレーションシップの構造そのものを指す。
一見論理データモデルと同じ意味の単語に聞こえるが、意味合いとしては別物。

外部スキーマ

個々の応用プログラム(クライアントプログラム)や利用者の立場で定義したデータの枠組みのこと。
どのようにクライアントにデータを見せるかを定義したもの。
ビューとかサブスキーマとかが該当し、ユーザサイドのI/Fを概念化する。
代表的なのがリレーショナルデータベースのビュー。
ビューが変更されても概念スキーマには影響を与えないデータ構造であることを論理データ独立性という。

内部スキーマ

OSやファイルシステムとの関係を取り持ち、データの物理的な格納形式を定義したもの。
データを管理するシステムとのI/Fを抽象化し、システムサイドのI/Fを概念化する。
格納構造の変更や、チューニング等による設定の変更を行っても概念スキーマには影響を与えないことを物理データ独立性という。

データモデル

データの表現方法をモデル化したもののこと。
三層スキーマアーキテクチャと混同しやすいが実は別物っぽい。
DB設計においては以下の3段階に分類される。

概念データモデル

実社会のデータを抽象化して表現したモデル。
このレベルでは論理データモデルの種類(リレーショナルとかネットワークとか階層とか)は意識しない。
基本的には実社会の事象(リレーション)とその関連(エンティティ)で表現する。
モデリング手法としてはER図が一般的。UMLで書く場合もあるらしい。

論理データモデル

概念データモデルをデータを扱う方式(技術)に落とし込んだモデル。
具体的には概念データモデルから意味的な側面を抽出し、
リレーショナルデータモデルの表現とかオブジェクトモデルの表現とかに落とし込む。
ここでのモデリング手法は適用するデータモデルにより異なる。
例えば、リレーショナルデータモデルの場合だとテーブルとリレーションシップで表現するし、
適用させるデータモデルがオブジェクトモデルであれば、クラスと属性を用いた図で表現したものが論理データモデルとなる。

物理データモデル

論理データモデルの具体的な実装方法を決定するモデル。
難しく言うとデータの永続化を行う方法を決定する。
ぶっちゃけるとDBMSとして何を使うか。MySql使うとかPostgreSQL使うとか。
これを決定することによりデータ型の定義方法、Viewの定義方法、インデックスの設計方法。
果てはパーティションの使い方、CPUの割り振り方。場合によっては性能指標とかロールバック方法とかも決定する。

テクニカルエンジニア(データベース)を受けようと思います。

勉強ログ。
遅いとか言わない。
主に言葉の定義を突き詰めていければいいかな。と。
嘘ついてても怒らないでコメントしてください必死で直します。