0
3

Djangoでデータベースを正規化する方法

Last updated at Posted at 2023-09-28

Djangoを使っているエンジニアの方、
趣味で使っている方、
始めたばかりの皆さんこんにちは!

私はDjangoを使って開発するのが好きな22歳のkazukiniiyamaと言います。

今日は、
DjangoでDB設計するときに、
正規化とは何ぞやとなる人が一定数いると思います。

そんな方たちの力に少しでもなれたらと思って調べた情報をまとめてます。

もし間違いや指摘、修正の必要がありそうな場合はどんどん言ってください!

ただただ感想を言ってくれるのもうれしいですので、コメント待っています。

DBの正規化とは

DBの正規化とは、
データの重複を避けるために、
データベースを構造化するプロセスのことを指します。

正規化の簡単なステップ

第1正規形 (1NF):

各列が一意の値を持つようにデータテーブルを構造化します。

Djangoにおいてそれは、

各モデルフィールドを一意に設定することです

第2正規形 (2NF):

すべての非キー列が主キーに完全に依存するようにします。
Djangoにおいてそれは、

ForeignKeyやOneToOneFieldを使用してモデル間の関連の定義を設定することです。
第3正規形 (3NF):

非キー列が他の非キー列に依存しないようにします。
Djangoにおいてそれは、
モデルを分割して依存関係を排除することです。

これがざっと堅苦しい正規化の説明です。
ここまで読んでくれた方、ありがとうございます。

それでは最後にコード例を用いてサラっとおさらいしましょう!

Djangoでの正規化の例

これは未正規化のモデルの例です。

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=255)
    city = models.CharField(max_length=100)
    phone = models.CharField(max_length=15)
    course_name = models.CharField(max_length=100)
    course_fee = models.IntegerField()

上記のモデルでは、人とコースの情報が1つのモデルに混在しています。

正規化されたモデルだとこんな感じです。

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=255)
    city = models.CharField(max_length=100)
    phone = models.CharField(max_length=15)

class Course(models.Model):
    name = models.CharField(max_length=100)
    fee = models.IntegerField()

class Enrollment(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)

見てわかる通り上記の例では、Person、Course、およびEnrollmentの3つのモデルにデータを正規化して分割しています。これにより、データの重複が減少し、データの整合性が向上します。

まとめ

Djangoにおけるデータベースの正規化は、データの重複を減らし、整合性を保つために重要です。モデルの設計時に正規化の原則に従って、適切にモデルとリレーションシップを構築することで、効率的で管理しやすいデータベースを構築できます。

終わり。

この記事を通して、
Djangoの仕組みを少しでも理解いただければ幸いです。
あと、フォローされたらもっと頑張ります!
フォローしてくださいな!

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3