論理設計と物理設計

本来のエントリの目的の物理とか論理とかはどうでもいいと思う。外部設計とか基本設計とか言う単語がどうでもいいように。

日本語テーブル名は悪くないと思う - しんさんの出張所 はてな編

ふと気になって、論理設計と物理設計についてGoogleで検索してみたら、論理設計と物理設計も人によって定義がばらばらなことが分かった。
確かに、そういう意味ではもはやどうでもいい単語に成り下がっていると言えるかもしれない。
でもなー、個人的にはやっぱりこの2つは分けて考えるべきだと思うんだよなー


以下、データベースシステム概論に載っている論理設計と物理設計についてのまとめ。

論理(概念)データベース設計

データベースの中にどのような情報が保持されるべきかを正しく決定することはデータ管理者の仕事である―言い換えれば, 組織にとって関心のある実体を同定し, それらの実体に関して記録されるべき情報を同定することである. この過程は通常論理―時には概念―データベース設計(database design)とよばれる.

論理データベース設計とは、記録する必要のある情報を選択、決定することで、テーブル設計というと論理設計のことだと思って間違いないと思う。
ただし、インデックスについては論理データベース設計に含めるかどうかは微妙だが、個人的にはインデックスの考慮は論理データベース設計には含まないと思っている*1

物理データベース設計

DBAはまた, データがいかに記憶データベースにおいて表現されるかを決定しなければならない. この過程は通常物理データベース設計(physical database design)とよばれている.

物理データベース設計とは、パフォーマンスとサイズの観点からどのように物理的にデータを配置するのかを決定することで、実際のRDBMSではそのほとんどがRDBMSによって行われる。
触ることの出来る部分はRDBMS毎に異なり、ストレージエンジンの選択が出来るものや、パラメータや配置場所程度しか変更できないものまで色々なRDBMSが存在する。
パフォーマンスやサイズの問題が発生してから場当たり的な対処が行われることが多い*2が、本来ならある程度は考慮しておく必要のある部分である。

DDL(Data Definition Language)

データベースシステム概論では、

と記述されており*3、以下のような例が出てくる。

概念レベル

EMPLOYEE
   EMPLOYEE_NUMBER   CHARACTER (6)
   DEPARTMENT_NUMBER CHARACTER (4)
   SALARY            NUMBER (5)

内部レベル

STORED_EMP LENGTH=20
   PREFIX  TYPE=BYTE(6),OFFSET=0
   EMP#    TYPE=BYTE(6),OFFSET=6,INDEX=EMPX
   DEPT#   TYPE=BYTE(4),OFFSET=12
   PAY     TYPE=FULLWORD,OFFSET=16

では、SQLDDL文のひとつであるCREATE TABLE文は、概念DDLと内部DDLのどちらなのだろうか?
上の仮想的なDDLと比べると、概念DDLに近いように思えるが、インデックスの指定なども行えることから、内部レベルの記述もできる概念DDLと言えそうだ。

着地点

着地点が見えません・・・
とりあえず、論理データベース設計と物理データベース設計には明確な違いがあるけど、SQLDDLは物理的なことも扱えるので、紛らわしいですね、ということで。

*1:インデックスはリレーショナルモデルの一部ではないのがそう考える理由のひとつ

*2:インデックスを追加してみたり

*3:他にも外部DDLというものも出てくる