リレーショナルデータベース

リレーショナルデータベース

執筆済 ソフトウェア開発データベース

データを「関係(表)」として表すデータベース。 Codd が 1970 年に提唱した。

理論的な基盤#

関係モデルは集合論と述語論理に基づく。

  • 表 = 関係(タプルの集合)
  • 行 = タプル
  • 列 = 属性

問い合わせは関係代数(選択、射影、結合、和、差)で表せる。 SQL はその実装。

理論があることの意味は、 問い合わせを意味を変えずに書き換えられる点にある。 これが最適化器の根拠になっている。

何が革新的だったか#

それ以前(階層型、ネットワーク型)は、 データへの到達経路をプログラムに書いていた。 構造が変わるとプログラムが壊れる。

Codd の主張は「物理的な格納方法と、 論理的なデータの見え方を分離せよ」というもの。

利用者は「何が欲しいか」だけ書く
   ↓
DB が索引の有無や結合順序を決める

索引を追加してもクエリを書き換えなくてよいのは、この分離のおかげ。

キー#

種類 役割
主キー 行を一意に識別する
外部キー 他の表の主キーを参照する
候補キー 主キーになりうるもの

外部キー制約により、 存在しない行を参照するデータを作れなくなる (参照整合性)。

制約#

制約 内容
NOT NULL 必須
UNIQUE 重複を許さない
CHECK 条件を満たす
FOREIGN KEY 参照先が存在する

制約は DB に置く。 アプリケーション側の検査だけだと、 複数のアプリや手作業の変更をすり抜ける。

参考文献#

  • E. F. Codd. A Relational Model of Data for Large Shared Data Banks. Communications of the ACM 13(6), 1970. https://doi.org/10.1145/362384.362685
  • Raghu Ramakrishnan, Johannes Gehrke. Database Management Systems, 3rd ed. McGraw-Hill, 2003.
  • Martin Kleppmann. Designing Data-Intensive Applications. O’Reilly, 2017.
ノート一覧を閉じる