第1部 データベースの基礎
第1章 データベースとは何か
「とりあえずExcelで管理」の先にある世界へ。データベースが何を解決するのか、RDBMSとは何か、そしてこのコースの学習環境SQLiteを準備します。
🎯 この章で学ぶこと
- Excelでのデータ管理が破綻する4つの理由
- データベースとDBMS(データベース管理システム)の役割の違い
- リレーショナルデータベースの考え方 — 表・行・列・キー
- 主要なRDBMS製品(SQLite・MySQL・PostgreSQL・SQL Server・Oracle)の位置づけ
- 学習環境としてSQLiteをセットアップし、最初のSQLを実行する
1.1 なぜ「Excel管理」は限界を迎えるのか
多くの職場で、顧客リストも備品台帳も問い合わせ記録も、まずExcelで管理されます。それ自体は悪いことではありません。数十件・担当者1人のうちは、Excelは最高のツールです。しかしデータと関係者が増えると、必ず次の4つの壁にぶつかります。
| 壁 | 何が起きるか | データベースはどう解決するか |
|---|---|---|
| ① 同時編集 | 「誰かが開いているので読み取り専用です」。共有ブックにすると今度はファイルが壊れる | 何百人が同時に読み書きしても矛盾しないよう、DBMSが交通整理する(トランザクション) |
| ② 整合性 | 「田中」「田中様」「tanaka」が混在。退職者の行を消したら注文履歴も消えた | データ型・制約・キーの仕組みで「正しくないデータは最初から入らない」ようにする |
| ③ 検索性能 | 10万行を超えたあたりからVLOOKUPが固まる。「先月の部署別合計」を出すのに毎回30分の手作業 | SQLという言語で「条件・集計・並べ替え」を1行で宣言すれば、百万行でも一瞬で返す |
| ④ 権限とログ | ファイルを渡した瞬間、全データが相手のもの。誰がいつ何を変えたか分からない | ユーザーごとに「見られる範囲・変えられる範囲」を設定し、操作の記録を残せる |
つまりデータベースとは、大量のデータを、複数人で、安全に、矛盾なく、高速に扱うための専用の仕組みです。Excelが「1人の道具」だとすれば、データベースは「組織のインフラ」です。
銀行の残高、ECサイトの注文、勤怠打刻、社内の申請システム、スマホの連絡帳——すべて裏側にデータベースがあります。「システムを理解する」とは、かなりの部分「そのシステムがデータをどう持っているかを理解する」ことなのです。
1.2 データベースとDBMS — 「データ」と「番人」
用語を正確にしておきましょう。厳密には、この2つは別物です。
- データベース(DB) — 整理されて保存されたデータの集まりそのもの。
- DBMS(DataBase Management System) — そのデータを管理する専用ソフトウェア。SQLを受け取って実行し、同時アクセスの交通整理、障害からの回復、権限のチェックまでを担う「番人」です。
私たちが「MySQLを使う」「PostgreSQLを入れる」と言うとき、指しているのはDBMSのほうです。アプリケーションは直接ファイルを触るのではなく、必ずDBMSを経由してデータを読み書きします。この「必ず番人を通る」構造こそが、整合性と安全性の源泉です。
アプリケーション(Python・Webアプリ・Excelでさえも)
│ SQL で依頼(「30歳以上の社員を出して」)
▼
DBMS ←── 権限チェック・同時実行の整理・整合性の保証
│
▼
データベース(ディスク上のデータ本体)
1.3 リレーショナルデータベースの考え方
現在の主流はリレーショナルデータベース(RDB)です。1970年にE.F.コッドが提案した歴史あるモデルで、データをすべて表(テーブル)の形で持ちます。
- テーブル — 「社員」「部署」など、ひとつの種類のデータを入れる表
- 行(レコード) — 1件のデータ(社員1人、注文1件)
- 列(カラム) — データの項目(氏名、入社日)。列ごとにデータ型が決まっている
たとえば社員データはこうなります。
| id | name | dept_id | hire_date |
|---|---|---|---|
| 1 | 佐藤 花子 | 10 | 2019-04-01 |
| 2 | 鈴木 一郎 | 20 | 2021-10-01 |
| 3 | 田中 実 | 10 | 2023-04-01 |
ポイントは dept_id です。部署名を毎行に書く代わりに「部署テーブルの何番か」という参照だけを持っています。部署の情報は部署テーブルに1回だけ書く——この「データを重複させず、表と表の関係(リレーション)で表現する」発想がRDBの心臓部で、第2章と第6章でじっくり扱います。
そしてRDBを操作する共通言語がSQL(Structured Query Language)です。製品ごとに方言はあるものの、基本文法は共通なので、一度身につければどのDBMSでも通用します。
1.4 主要なRDBMS製品と選び方
実務で名前を聞く製品を整理しておきます。どれも「SQLで操作するRDBMS」という点は同じです。
| 製品 | 特徴 | よく使われる場面 |
|---|---|---|
| SQLite | サーバー不要。DB全体が1ファイル。Pythonに標準同梱 | スマホアプリ内、組み込み、小規模ツール、学習 |
| MySQL / MariaDB | オープンソースの定番。Webとの相性がよく情報が豊富 | Webサービス全般、レンタルサーバー |
| PostgreSQL | オープンソース。機能が豊富で標準SQLへの準拠度が高い | 業務システム、データ分析基盤、近年のWeb開発 |
| SQL Server | Microsoft製。Windows環境・Office製品との親和性 | 企業の業務システム、社内システム |
| Oracle Database | 商用の最大手。大規模・高可用性に強い | 金融・基幹系など、止められない大規模システム |
SQLと設計の考え方は共通です。このコースはSQLiteで学びますが、身につくのは「どの製品でも通用する部分」です。就職先・現場がMySQLでもPostgreSQLでも、方言の差分を調べるだけで対応できます。
1.5 NoSQLという別の世界(予告)
「NoSQL」と呼ばれる、表形式にこだわらないデータベース群もあります。キーと値だけを超高速に出し入れするもの(Redis)、JSONのような柔軟な文書を保存するもの(MongoDB)などが代表です。SNSの「いいね」のように、厳密な整合性より速度と拡張性を優先したい場面で使われます。
ただし、NoSQLを理解する近道もまたRDBの理解です。「RDBの何を諦めて何を得たのか」という比較で初めてNoSQLの価値が分かるからです。詳しくは最終章(第10章)で扱います。
1.6 学習環境の準備 — SQLite
このコースでは、手を動かす環境としてSQLiteを使います。理由は3つ——①サーバーの構築が不要、②DBが1ファイルなので壊しても作り直せる、③Pythonに標準で入っている(第8章で活きます)。
コマンドラインツールの導入
各OSで sqlite3 コマンドを使えるようにします。
# Windows(winget を使う場合)
PS C:\> winget install SQLite.SQLite
# macOS(最初から入っています)
$ sqlite3 --version
# Ubuntu / WSL
$ sudo apt update && sudo apt install -y sqlite3
$ sqlite3 --version
3.45.1 2024-01-30 ...
テーブルの中身を表計算ソフトのような画面で確認できる無料ツールです。ただし学習の主役はあくまでSQLの手打ちにしてください。GUIのボタン操作は「読めるけど書けない」を生みます。
最初のデータベースを作ってみる
ターミナルで次を実行してみましょう。practice.db というファイルが「あなたの最初のデータベース」です。
$ sqlite3 practice.db
SQLite version 3.45.1
Enter ".help" for usage hints.
sqlite> CREATE TABLE hello (id INTEGER, message TEXT);
sqlite> INSERT INTO hello VALUES (1, 'はじめてのSQL!');
sqlite> SELECT * FROM hello;
1|はじめてのSQL!
sqlite> .quit
3行のSQLで、テーブルを作り、データを入れ、取り出しました。それぞれの文法はこれからの章で丁寧に学ぶので、いまは「対話しながらデータを操作する感覚」だけつかめれば十分です。なお、SQLの文末には ;(セミコロン)を付けます。
.quit .tables .help などは sqlite3 コマンド専用の操作(ドットコマンド)で、SQLではありません。他のDBMSでは通用しないので、区別して覚えてください。
情報漏えい事件の報道で「顧客情報◯万件が流出」とあるとき、漏れたのはほぼ間違いなくデータベースの中身です。攻撃者にとってWebサイトやPCへの侵入は通過点にすぎず、最終目的地はデータベースです。だからこそDBを学ぶ人は最初から「このデータは誰が読めるべきか」「漏れたら何が起きるか」を考える癖をつけてください。Excelファイルをメール添付で回す運用と比べて、DBは権限管理も記録もできる分、正しく使えばはるかに安全にできます——「正しく使えば」の中身を、このコース全体で学んでいきます。
まとめ
- データベースは「大量のデータを、複数人で、安全に、矛盾なく、高速に」扱うための仕組みで、同時編集・整合性・性能・権限というExcelの4つの壁を解決する
- データ本体(DB)と、それを管理する番人(DBMS)は別物。アプリは必ずDBMSを経由してデータに触る
- リレーショナルデータベースはデータを表(テーブル)で持ち、表同士の関係(リレーション)で全体を表現する。操作言語はSQL
- SQLiteは学習に最適なRDBMS。ここで学ぶSQLと設計はMySQL・PostgreSQLなどにそのまま通用する
- データベースは攻撃者の最終目的地。学習の最初から「誰が読めるべきか」を考える癖をつける
練習問題
あなたの職場(または想像上の会社)で「Excelで管理されているが、データベースにすべきだ」と思うデータをひとつ挙げ、1.1節の「4つの壁」のうちどれが実際に起きているか(起きそうか)を説明してください。
解答を見る
解答例:「全社の備品貸出台帳」。①同時編集の壁(拠点ごとにファイルが分裂し、どれが最新か分からない)、②整合性の壁(同じノートPCが「NEC-01」「ノートPC黒」と別名で登録され、貸出中なのに在庫ありに見える)が起きている。データベース化すれば、備品テーブルと貸出履歴テーブルに分け、全拠点が同じデータを同時に更新でき、「存在しない備品の貸出」は制約で防げる。——このように「壁」と「解決の形」をセットで説明できれば正解です。
1.6節の手順で practice.db を作り、hello テーブルに自分の好きなメッセージをもう1行追加して、2行とも表示されることを確認してください。終わったら、作られた practice.db がただのファイルであることを ls -l(Windowsは dir)で確かめてください。
解答を見る
実行例:
sqlite> INSERT INTO hello VALUES (2, 'データベース学習開始');
sqlite> SELECT * FROM hello;
1|はじめてのSQL!
2|データベース学習開始
sqlite> .quit
$ ls -l practice.db
-rw-r--r-- 1 user user 8192 ... practice.db
SQLiteではデータベース全体がこの1ファイルに収まっています。つまりこのファイルを盗まれる=全データが漏れるということでもあります(第9章で対策を学びます)。