リレーショナルデータベース
データを「関係(表)」として表すデータベース。 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.