質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

データベースの設計における一対多、多対多の関係について

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,421

score 87

こんにちは。Webアプリの作成を勉強中です。
今回の内容にはあまり関係ありませんが、言語はJava、フレームワークはspring bootです。

本題ですが、データベース設計における一対多、多対一の関係について質問があります。

当方の知識レベル

例えばTwitterのようなサービスで言えばユーザー(User)とツイート(MicropostPost)は一対多の関係と言えると思います。
日本語にすれば「1人の User は複数の Micropost をツイートすることが可能であり、 Micropost は 必ず1人の User に所属する」という感じだと思います。
イメージ説明

今回の質問

今回質問したいのは、Springの教本上で出てくるデータベース設計のテーブル間の関係について理解ができないので私の解釈を確認いただきたいのです。
イメージ説明
ここでは会議室予約システムのチュートリアルをしています。
その中で4つのテーブルが出てきます。
・usr(ユーザー)
・meeting_room(会議室)
・reservable_room(予約可能な会議室)
・reservation(予約)

教本によると(reservable_roomの欄)reservable_roomとmeeting_roomは多対一の関係だと言います。
これを日本語にすると「会議室は複数の予約可能な部屋となることができ、予約可能な部屋は1つの会議室に属する」...

続いてreservationの欄を見るとreservationとreservable_roomは多対一で日本語にすると「予約可能な部屋は複数の予約をすることができ、予約は1つの予約可能な部屋に属する」...日本語の意味がわからん。。。重複予約を許容すると言っている?

reservationとusrも多対一だそうです。日本語にすると「ユーザーは複数の予約をすることができ、予約はユーザー1人に属する」...怪しいけど何となく言いたいことはわかる。

もうちょっと「コレだ!!」っていう解釈をしたいのですがご教授いただけないでしょうか?
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+2

表内の説明にありますが、reservable_room日付と会議室の組を扱うテーブルです。ある会議室については1日1日別な使い方ができるので、1つのmeeting_roomに対して日付の異なるreservable_roomが複数ひも付きます。

また、会議室は1日貸し切りという使い方専用でなければ、同じ日に同じ会議室に対して複数の予約も可能です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/12 23:17

    ありがとうございます。頭の中で紐付きがイメージできました。

    キャンセル

+2

reservable_roomについて

下記のように、日付を変えれば複数の同じ会議室が存在できるので
「会議室:1 →  予約可能な会議室:多」となるのではないでしょうか。

reserved_date room_id
2018/4/29 会議室A
2018/4/30 会議室A
2018/4/29 会議室B

下記のように、一人のユーザーが複数の予約可能な会議室を予約できるので
多 対 1 となっているのではないでしょうか。
reservasionについて

reserved_date room_id user_id
2018/4/29 会議室A userA
2018/4/30 会議室A userA
2018/4/29 会議室B userA

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/12 23:20

    ありがとうございます。とてもわかりやすい説明でした1

    キャンセル

+1

なんかテーブル名を一生懸命日本語に直して意味を考えてますけど、隣にそのテーブルがなんであるか書いてありますよね?

例えば
reservable_roomは「特定の日に予約可能な会議室の情報」
reservationは「予約情報」
なんですから、

「特定の日に予約可能な会議室の情報」1つに対して「予約情報」が複数存在できる。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/12 23:19

    テーブルの目的を考えれば自然とイメージできるものでした!ありがとうございます!

    キャンセル

+1

テーブルの関係だけ見てしまうから理解しにくいのではないでしょうか。
仕様の前に要件定義があるはずです。
たぶんこんなのが。

「ユーザは複数の会議室を予約することができる」
「ユーザは異なる時間に同じ会議室を予約することができる」
「予約済みの会議室はキャンセルされるか会議が終わるまで予約できない」

何をしたいのか(要件)を考えれば、どう実現するのか(仕様)が見えてくるはずです。
Kaiserさんが書かれているように予約をreservable_roomreservationでコントロールするのでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/12 23:52

    ありがとうございます。木を見て森を見ず状態でした。かなり勉強になりました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る