
2026年10月17日に全面リライトしました
2023年7月に公開した記事を、「つくって学ぶ」の趣旨に合わせて書き直した。ファイル管理とデータベース管理の違いを、Pythonで実際に動かして確認できる内容になっている。
はじめに
データベースとは、情報の集まりである。データベースに情報(データ)を集めると、データを一元管理できる。
基本情報技術者試験のシラバスにも、データベースの種類(関係モデル、階層モデル、ネットワークモデル)や、データ重複の排除が載っている。

ただ、「一元管理できると何が便利なのか」は、読むだけではわかりにくい。
今回は、GitHub Codespacesで、ファイル管理とデータベース管理を実際に動かして比べる。
コードは、筆者のGitHubリポジトリ pc-labo-hands-on の database/ フォルダにまとめてある。
データをファイルで管理する

システムごとにファイルを持つと、同じ人のデータが、複数のファイルに重複して入る。
データをデータベースで管理する

データベースに集めると、データが一元管理される。なお、システム関連の図では、データベースを円柱で表す。円柱があれば、データベース(またはデータベース管理システム)と考えてよい。
体験1:ファイルで管理すると、食い違う
履修管理と図書貸出が、それぞれ自分のCSVファイルを持っている。どちらにも、山田太郎さんの電話番号が入っている。
file_demo.py を実行する。
python3 file_demo.pyプログラムは、電話番号が変わったと想定して、履修管理のファイルだけを更新する。実行結果は、次のようになる。
履修管理の電話番号: 090-1111-1111
図書貸出の電話番号: 090-9999-9999
同じ人なのに、システムによって電話番号が違う。これが、ファイル管理の問題である。実行すると、同じフォルダに courses.csv と library.csv ができる。
体験2:データベースで管理すると、1か所で済む
db_demo.py を実行する。
python3 db_demo.pyPythonに入っているSQLiteというデータベースを使う。電話番号は students の表だけが持ち、履修と貸出の表は、学籍番号で students につながっている。更新は、1か所で済む。
履修管理: ('山田太郎', '090-1111-1111', '情報基礎')
図書貸出: ('山田太郎', '090-1111-1111', '情報処理入門')
どちらも、新しい電話番号が表示される。データの重複がないので、食い違いも起きない。
このデータベースは、メモリ上に作るため、実行が終わると消える。
関係データモデル
データベースには、データの表し方によって、いくつかの種類がある。
- 関係データモデル:データの集まりを「表」で表す
- 階層データモデル:データ同士の関係を「木構造」で表す
- ネットワークデータモデル:データ同士の関係を「網の目」のようにつながった状態で表す
現在、最も普及していて、基本情報技術者試験でも出題されるのは、関係データモデルである。
体験2で使った students の表も、その一つである。
| 学籍番号 | 氏名 | 電話番号 | 指導教員名 |
|---|---|---|---|
| 1 | 山田太郎 | 090-1111-1111 | 田中百合子 |
| 2 | 鈴木貴子 | 080-9999-8888 | 伊藤久美 |
| 3 | 高橋留美子 | 070-7777-7777 | 佐藤直子 |
まとめ
- データベースは、情報の集まりで、データを一元管理できる
- ファイル管理は、データが重複して、更新が食い違うことがある
- データベース管理は、1か所の更新で済み、食い違いが起きない
- 現在、最も普及しているのは、表で表す関係データモデルである
次に読む
表の仕組みを、さらに詳しく試してみたい。
→ 基本情報技術者試験問題に挑戦しよう!「関係モデル」をPython+SQLiteでつくって学ぶ
更新履歴
- 2026年10月17日:全面リライト(手を動かす内容に刷新)
- 2023年7月27日:初版公開




コメント