カテゴリ: Python 更新日: 2026/04/07

Pythonでデータの正規化・非正規化を適用する方法を完全ガイド!初心者でもわかるデータベース設計

Pythonでデータの正規化・非正規化を適用する方法
Pythonでデータの正規化・非正規化を適用する方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonでデータベースを使うとき、正規化とか非正規化って言葉を見たんですが、何のことですか?」

先生

「正規化(セイキカ)と非正規化(ヒセイキカ)は、データの置き方を整理する考え方です。ノートに情報を書くときの整理方法を想像すると分かりやすいですよ。」

生徒

「パソコンを触ったことがなくても理解できますか?」

先生

「大丈夫です。身近なたとえと、やさしいPythonの例で説明していきます。」

1. データベースとPythonの基本的な関係

1. データベースとPythonの基本的な関係
1. データベースとPythonの基本的な関係

データベースとは、たくさんの情報を整理して保存するための箱のようなものです。住所録や家計簿を紙で管理する代わりに、コンピュータの中で管理します。Python(パイソン)は、そのデータベースを操作するための道具です。

Pythonのデータベース操作では、「どのようにデータを並べて保存するか」がとても重要です。ここで登場する考え方が、正規化と非正規化です。

2. 正規化(セイキカ)とは何か?

2. 正規化(セイキカ)とは何か?
2. 正規化(セイキカ)とは何か?

正規化とは、データをできるだけ重ならないように整理することです。たとえば、同じ人の名前や住所を何度も書かずに、必要なところから参照するイメージです。

紙のノートで考えると、「名前ノート」「住所ノート」を分けて管理するようなものです。これにより、修正が楽になり、間違いも減ります。

3. Pythonで正規化されたデータを扱う簡単な例

3. Pythonで正規化されたデータを扱う簡単な例
3. Pythonで正規化されたデータを扱う簡単な例

ここでは、PythonとSQLite(エスキューライト)という軽いデータベースを使った例を見てみます。難しい設定は不要です。


import sqlite3

conn = sqlite3.connect("sample.db")
cursor = conn.cursor()

cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT)")
cursor.execute("CREATE TABLE IF NOT EXISTS orders (user_id INTEGER, product TEXT)")

cursor.execute("INSERT INTO users VALUES (1, '山田')")
cursor.execute("INSERT INTO orders VALUES (1, 'りんご')")

conn.commit()
conn.close()

この例では、「利用者」と「注文」を別々の表に分けています。これが正規化された形です。

4. 正規化のメリットと注意点

4. 正規化のメリットと注意点
4. 正規化のメリットと注意点

正規化のメリットは、データがきれいに整理され、同じ情報を何度も書かなくてよい点です。名前が変わった場合も、一か所直すだけで済みます。

一方で、複数の表を見比べる必要があり、初心者には少し分かりにくく感じることがあります。

5. 非正規化(ヒセイキカ)とは何か?

5. 非正規化(ヒセイキカ)とは何か?
5. 非正規化(ヒセイキカ)とは何か?

非正規化とは、あえて情報をまとめて保存する方法です。紙のメモに「名前・住所・注文内容」を一行で全部書くようなイメージです。

読み出しが簡単で早くなるため、表示速度を重視する場面で使われます。

6. Pythonで非正規化されたデータの例

6. Pythonで非正規化されたデータの例
6. Pythonで非正規化されたデータの例

次は、すべての情報を一つの表にまとめた例です。


import sqlite3

conn = sqlite3.connect("sample2.db")
cursor = conn.cursor()

cursor.execute(
    "CREATE TABLE IF NOT EXISTS data (name TEXT, product TEXT)"
)

cursor.execute("INSERT INTO data VALUES ('山田', 'りんご')")

conn.commit()
conn.close()

この形は分かりやすいですが、同じ名前が何度も出てくる可能性があります。

7. 正規化と非正規化の使い分け

7. 正規化と非正規化の使い分け
7. 正規化と非正規化の使い分け

正規化は「正確さ」と「管理のしやすさ」を重視します。非正規化は「速さ」と「分かりやすさ」を重視します。

Pythonのデータベース操作では、小さな学習用や個人利用なら非正規化、大きくなってきたら正規化を考えると理解しやすいです。

8. データの正規化をPythonで確認する簡単な読み取り例

8. データの正規化をPythonで確認する簡単な読み取り例
8. データの正規化をPythonで確認する簡単な読み取り例

最後に、データを読み取る簡単なPythonコードを見てみましょう。


import sqlite3

conn = sqlite3.connect("sample.db")
cursor = conn.cursor()

for row in cursor.execute("SELECT * FROM users"):
    print(row)

conn.close()

(1, '山田')

このように、正規化されたデータもPythonで簡単に確認できます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
PythonでREST APIを作る方法!初心者向けFastAPI入門|Python API開発の基本
New2
PHP
PHPのコード品質向上ツール完全解説!PHPStan(ピーエイチピースタン)とPHPCS(ピーエイチピーシーエス)で初心者でも安全にデバッグしよう
New3
Python
Pythonでデータベースのログを記録・監視する方法を完全解説!初心者向けデータベースログ管理入門
New4
PHP
PHPのログファイルを活用したエラートラッキング完全ガイド|初心者でもわかるPHPデバッグ入門
人気記事
No.1
Java&Spring記事人気No1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.2
Java&Spring記事人気No2
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.3
Java&Spring記事人気No3
Python
Pythonのインストール&環境構築!Windows・Mac・Linuxでの手順を初心者向けに解説
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.6
Java&Spring記事人気No6
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.7
Java&Spring記事人気No7
Python
Pythonでデータベースの接続プールを使う方法を徹底解説!初心者向けPythonデータベース接続プール入門
No.8
Java&Spring記事人気No8
PHP
PHPのPHPUnitを使った単体テスト完全ガイド!初心者でもわかるテストとデバッグ入門