• OneToOne, ManyToOne, ManyToManyの違いを具体例で解説

    djangoでモデルについて学んでいると、データベース(テーブル)同士の連携について理解しなければいけないタイミングがあるかもしれません。

    djangoにおけるデータベース(テーブル)同志の連携については、大きく三つの種類(OneToOne, OneToMany, ManyToMany)がありますが、それぞれの違いが今一つしっくりこない方も多いのではないでしょうか。

    そこで今回は、テーブルの連携について具体例でイメージをわかせていきましょう。

    まずは一言でそれぞれを説明

    まずは、OneToOne, OneToMany, ManyToManyのイメージを一言で説明していきます。

    ざっくりとしたイメージをつかんでみてください。

    種類 イメージ
    OneToOne 「住所」と「レストラン」
    ManyToOne 「レビュー」と「レストラン」
    ManyToMany 「食材」と「レストラン」

    ここから、ひとつずつ具体的にみていきましょう。

    OneToOne「住所とレストラン」

    まずはOneToOneフィールドです。

    これは、二つのテーブルが必ずユニークな1対1の関係になることを意味します。

    Aというレストランの住所がAAAだったとします。

    この時、BレストランやCレストランの住所がAAAになることはありません。

    違うレストランが同じ住所を使うことはないからです。

    こういった形で、必ずユニークな1対1の関係を示すのがOneToOneフィールドです。

    ManyToOne「レビューとレストラン」

    次はManyToOneフィールドです。

    これは、多くのものが一つのものに紐づいているというイメージです。

    口コミサイトをイメージすると分かりやすいのではないかと思います。対象とするレストラン一件に対して、複数の口コミが投稿されますよね。

    このように、多くのものが一つに紐づいているのがManyToOneフィールドです。

    ManyToMany「食材とレストラン」

    サイトはManyToManyフィールドです。

    これは、お互いに複数のデータを参照しあう関係を意味します。

    具体例で考えてみましょう。

    食材というテーブルと、レストランというテーブルがあったとします。

    この時、それぞれの関係を表で表してみます。

    食材テーブル

    食材 使われるレストラン
    じゃがいも A, B, D, 
    人参 B, C, D
    牛肉 A, B, C, D, 
    豚肉 B

    レストランテーブル

    レストラン 使われる食材
    A じゃがいも、牛肉
    B じゃがいも、豚肉
    C 人参、牛肉
    D じゃがいも、人参、牛肉

    このように、お互いのテーブルの項目が、違うテーブルの複数のデータをひもづいているような関係のことをManyToManyフィールドと言います。

    最後に

    具体的な例を使って3つのフィールドの違いについて説明してきました。

    これが、OneToOne, ManyToOne, ManyToManyの違いの理解の一助になるようであれば幸いです。

    ~Django無料講義~のご案内

    Code for Djangoが、4時間超の無料Django講義をはじめました

    •  ・本を出版したCode for Djangoの
       製作者が作ったサイトです。
    •  ・Code for Djangoの内容も、
       動画で詳しく解説しています。
    •  ・動画は順次ふやしていきますので、
       ただで学び続けることが可能です。
    •  ・Djangoの効率的なスキルアップに、
       是非お役立て下さい。