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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

4回答

1038閲覧

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

sanezane

総合スコア91

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/01/12 13:05

こんにちは。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人に属する」...怪しいけど何となく言いたいことはわかる。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

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

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

投稿2019/01/12 13:22

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanezane

2019/01/12 14:17

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

0

reservable_roomについて

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

reserved_dateroom_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 13:18

Kaiser

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanezane

2019/01/12 14:20

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

0

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

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

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

投稿2019/01/12 14:45

kgm

総合スコア275

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanezane

2019/01/12 14:52

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

0

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

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

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

投稿2019/01/12 13:20

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanezane

2019/01/12 14:19

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問