カテゴリ: 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でデータの正規化・非正規化を適用する方法を完全ガイド!初心者でもわかるデータベース設計
New2
Python
Pythonのタプルをリストに変換する方法(list()の活用)初心者でもできるデータ型の変換
New3
PHP
PHPスクリプトの実行方法をやさしく解説!CLIとWebサーバーの違いとは?
New4
PHP
PHP の DateTime クラスの基本的な使い方を完全ガイド!初心者向け解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは?初心者向けにわかりやすく解説!インストール方法も紹介
No.2
Java&Spring記事人気No2
Python
Pythonのfinally文を徹底解説!例外発生時でも実行される処理の書き方と使い方
No.3
Java&Spring記事人気No3
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.4
Java&Spring記事人気No4
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.5
Java&Spring記事人気No5
PHP
PHP のコンストラクタ(__construct)とは?使い方を解説
No.6
Java&Spring記事人気No6
PHP
PHP のインストール方法(Windows・Mac・Linux)と開発環境
No.7
Java&Spring記事人気No7
PHP
PHPのプロセス管理を完全ガイド!初心者でもわかるpcntl_forkとproc_open
No.8
Java&Spring記事人気No8
Python
Pythonで空白を削除する方法!strip()・rstrip()・lstrip()の活用