ER図についての疑問

このQ&Aのポイント
  • ER図について質問があります。具体的には、カーディナリティやリレーションの連結について疑問があります。
  • ホテルの客室予約システムのER図を例に質問します。カレンダ、予約、料金のリレーションについての疑問です。
  • 具体的には、料金表とカレンダ表のリレーションにおいて、結合条件が不足しているのではないかと思っています。
回答を見る
  • ベストアンサー

ER図について

現在、資格の勉強をしているのですが、 E-R図についてわからないことがあります。 ホテルの客室予約システムのER図です。 ER図のなかの必要と思われる部分だけを抜粋します。 カレンダ((P)宿泊日、シーズン) 予約((P)予約番号、会員番号、宿泊日、ホテルコード、部屋タイプ、予約室数) 料金((P)ホテルコード、(P)部屋タイプ、(P)シーズン、料金) (P)は主キーで複数あるときはすべてあわせて主キーです。 なお、ホテル、部屋タイプはそれぞれ複数あり、 同じ部屋でもシーズンによって値段がことなります。 シーズンにはオン、ミドル、オフのみっつがあり、 カレンダ表には、日付と、それに対応するシーズンが かくのうされています。なお、一つの予約番号に対して1日分の宿泊で、複数日宿泊するときは、複数の 予約番号が必要となります。 この3つの表のリレーションは、 カレンダ 1対多 予約 多対1 料金 となっています。 私は今まで、1対多のカーディナリティは、多の側の 表の行が決まれば1の側の行も1意にきまるだけでなく、必ず、主キー、外部キーで連結されるものと 思っていました。  料金表とカレンダ表の関係で見ると、ホテルコード、部屋タイプまでは共通していますが、シーズンが 足りず、これでは結合条件不足かと思います。 料金表を一意に特定できないかと思うのですが。  確かに、予約表の宿泊日が分かっていればシーズンもおのずと分かり、料金表を一意にとくていできます。そういう意味では正しいかと思うのですが。 長々となってしまいもうしわけありません。 要するに、属性や主キーの決まったER図における リレーションやカーディナリティは、必ず外部キーと 主キーをとおして連結されているのでしょうか。  もし、それ以外の場合もありましたらお教えください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DIGAMMA
  • ベストアンサー率44% (620/1404)
回答No.1

こんにちは、  確かに完全正規ではなく、手を抜いてますが、良くあることです。先ず、1年の日数は365(366)と限られてますので、日付を他の表に「埋め込む」より、シーズンのみの方が領域が少なくなるという考えがあったのかな?と思います。あるいは、毎日、3ヶ月先のON/MID/OFFを設定する作業があり、その作業をできるだけ安全に行いたいとか...。  現在では、検索の自由度を重視する傾向があるので、それを厳密に守るならリレーションはキー連結が必須です。  この例題の場合、「全部で1万円払ったお客は、どんな日にどんなホテルのどの部屋に泊まる傾向があるか?」が判りません。(日付ではなくシーズンならわかる)  でも、このDBが欠陥品というわけではありません。 完全連結を狙うと、納期も開発費も(おそらく容量や反応速度も)上昇するので、顧客が納得の上で仕様を削ったのであるならば、開発現場では良くある話です。(純粋な勉強としての例題ならば、少し不満は残ります)  ご参考まで。(秋のDBテク受験でしょうか?頑張ってくださいね)

taro5088
質問者

お礼

返事がおそくなりすみません。 長文の質問にもかかわらず、 ご回答くださりありがとうございます。 キーによる完全な連結を目指さない 場合もあるんですね。受験しようと しているのはソフト開発のほうなんですが、 過去問題には外部キー、主キーによる連結 に忠実な問題と、今回のようなそうではない もんだいがあるので、問題文を読んで 注意深く判断できるようにしようと思います。 どうもありがとうございました。

関連するQ&A

  • ER図でリレーションを決めるときの二つの疑問

    ER図でリレーションを決めるときの二つの疑問 (1)ER図において、「科目:学生」などの関係は「多:多」になっています。  その関係はできるだけ排除するようにし、間に「受講状況」をはさみます。  「科目:受講状況」=「多:1」、「学生:受講状況」=「多:1」に分解します。  というように、「多:多」のリレーションはなるだけ、「1:多」に分解したほうが  よいと書かれていました。これは、なぜでしょうか? (2)また上記のような「科目:受講状況」=「多:1」、「学生:受講状況」=「多:1」の  リレーションで「受講状況エンティティ」は学生とは「学籍番号」で、科目とは  「科目コード」で紐付けられていましたが、その二つはいずれも「主キー」になっていました。  「多」ではさまれるエンティティは主キーは二つにしたほうがよいと記述されていました。  これはなぜでしょうか? 以上、宜しくお願いします。

  • こんな場合のER図はどうなりますか?

    こんにちは。データベースの勉強を始めて間もない者です。 例えば、ある中学校の1つのクラスの振る舞いを、ER図で表現することを考えます。各生徒をあらわす「生徒」テーブルを作ります。主キーは出席番号とします。 主キー以外には、名前、生年月日、得意科目、、、などを入れるのですが、「ライバル」という属性も入れたいと思います。自分(今、対象としている生徒)から見てライバルだと思うクラスメイトにあたるものです。 生徒によっては0人だったり多数だったりするので、「生徒」テーブルから出し、「ライバル」テーブルを作り、「生徒」:「ライバル」=1:0以上のリレーションをはります。「ライバル」テーブルの主キーは親の生徒の出席番号(外部キー)とライバルだと思われた生徒の出席番号のペアでいいや、と思ったのですが、ここで問題に気づきました。 出席番号1さんがライバルだと思っているのが、出席番号3さん、5さんとします。3さんは1さんのことをライバルと思っていませんが、5さんは1さんのことをライバルだと思っています。この時の「ライバル」テーブルは、主キーに1と5のペアを持つレコードが2つできてしまって問題になるのでしょうか?それとも、外部キーが異なるので問題はないのでしょうか? 問題があるとすると、どのようにテーブルを定義すればよいのでしょうか。さっきの例では「ライバル」テーブルに1と3のペアをキーとするレコードが1つできますが、これも「1から3へ」という意味が消えないような設計をしたいのですが、よくわからなくなりました。

  • ER図 設計 ruby rails データベース

    初めまして私はWEBエンジニアの駆け出しです。 勉強がてら、姉の会社の顧客管理システムを作成しようと思っています。 ですが、ER図を書くのも初めてですし関係性が理解できておりません。 そこでいくつか質問をさせてください。 以下、実現させたい事を下記に記載致します。 ・スタッフ別に売り上げ管理したい ・支店ごとの売り上げ管理したい ・担当するスタッフが変わっても前のスタッフの情報をもっておきたい。 ・顧客とスタッフを紐付けしたい。 ・ユーザーに付与した割引を一回の来店で1~n個使えるようにしたい。 ・ユーザーは一回の予約で複数の施術を予約できる。 上記6つを実現するためには今のER図で実現できますでしょうか お会計までの流れなのですが、 1.ユーザー詳細ページに入る。 2.ユーザーの詳細ページには予約一覧があり、来店されたら、予約のステータスから来店に切り替える。 3.ユーザーが利用できる割引を決定して、料金を決定したい。 1~3までの流れを実現する為には今のER図で実現できますでしょうか 疑問 1ユーザーが誰を紹介したかをわかるようにしたいのですが、 紹介テーブル的なものを作成するかユーザーテーブルに自己結合的なテーブル設計の方がいいのか迷っています。 支店ごとに出来る施術内容(料金表)を選択できるようにしたい(支店と料金テーブルの間に施術内容テーブルを作るべきでしょうか) 以上、たくさん質問してもうしわけないのですが、ご回答いただけると幸いです。

  • SWの平成15年・午後2の問題で

    設問3での答えが疑問です。 答えは以下の通りとなっていますよね? (主キーは【】でくくってあります) 会議室(【会議室番号】、会議室タイプ) 予約簿(【予約番号】、【使用時間帯区分コード】、利用者番号、会議室番号、使用予定日) 会議室料金表(【会議室タイプ】、【使用時間帯区分コード】、料金) 時間帯(【使用時間帯区分コード】、使用時間帯) 利用者台帳(【利用者番号】、氏名、住所、電話番号) このとき、『予約簿』における「使用時間帯区分コード」は主キーなのでしょうか? 『予約簿』においては図2に例がありますが、これをみても使用時間帯については他の予約とかぶる部分があり一意性が無いと言えますよね? つまり主キーにはなりえないと思うのですが・・。 主キーとは一意性があり、かつNULL値を許さないという条件がありますよね? 『予約簿』以外でも『時間帯』以外では一意性が無いと感じるのですが・・。 まだ、主キーがはっきり分かっていないだけなのかもしれませんが、なぜ「使用時間帯区分コード」は主キーではないのでしょうか?

  • ANAでB777-300ER/200ERの座席

    B777-300ER/200ERのタイプのエコノミークラスに乗って10時間くらいのフライトがあります。 エコノミークラスなので仕方ないのですが、少しでも快適なオススメのシート番号を教えてください。 とりあえず最後尾から2番目くらいの通路側「60E」だったと思いますが、これを予約しています。 宜しくお願い致します。

  • 初級シスアド データベース

    ペンションの空き部屋検索システムに関する次の記述を読んで、各設問に答えよ。  Z町ペンション組合では、組合に登録されているペンションを共同のホームページで紹介している。このページの閲覧者から、部屋の空き状況や料金についてもこのページから調べられるようにしてほしいという希望が寄せられた。そこで、組合では空き部屋検索システムを構築することになった。 ○部屋の利用人数と室料  組合に登録されているペンションでは、各部屋の利用人数の上限(以下、上限人数という)を設定している。  室料は各部屋の1泊当たりの料金であり、次の式で算出される。    室料=部屋使用料+宿泊料*利用人数 (1)部屋の使用料は部屋ごとに決められており、利用人数にかかわらず一定である。 (2)宿泊料は1人当たりの金額で、同一ペンション内であれば、どの部屋を利用しても同額である。 ○空き部屋検索システム  今回構築するシステムの概要は、次のとおりである。 (1)部屋情報データベースを備え、ペンション、部屋および各部屋の空き状況に関する情報を蓄える。 (2)部屋情報データベースに蓄えられた情報から、閲覧者の指定する条件に適合する空き部屋情報を検索する。 (3)各部屋の空き状況に関する情報の登録および予約の受付は、別のシステムによって行う。 ○部屋情報データベースのE-R図と構造を、それぞれ図1と図2に示す。図2中の(P)は、各表の主キーを示している。 図1 部屋情報データベースのE-R図        ペンション → 部屋 → 空き部屋 図2   ペンション表   P番号(P) ペンション名 電話番号 所在地 オーナ a   部屋表   P番号(P) 部屋番号(P) 部屋名称 b c   空き部屋表   P番号(P) 部屋番号(P) d  各ペンションには、それぞれ固有の番号(P番号)が割り振られている。さらに、それぞれのペンションでは、各部屋の部屋番号として、1から順に通し番号が割り振られている。このデータベースには、空き部屋情報として各部屋の空いている日が登録されている。  別のシステムによって登録および予約の受付が行われると、その内容はこのデータベースに随時反映される。 ○空き部屋の検索 (1)閲覧者が、利用開始日(チェックインの日)、利用終了日(チェックアウトの日)および利用人数を指定する。 (2)すべてのペンションを対象に、(1)で指定された条件を満たす部屋を検索し、その結果を候補一覧として閲覧者に提示する。ここで、"条件を満たす"とは、ある部屋が利用希望期間を通して空き状態にあり、さらにその上限人数が利用人数以上であることをいう。 (3)候補一覧は、第1キーを"室料"、第2キーを"上限人数"として、それぞれ昇順に並べ替えて表示する。 問1 図2中のa~dに入れる適切な字句を、解答群の中から選べ。 →これはa=宿泊料、b=上限人数、c=部屋使用料、d=年月日(P)と求めることができました。 問2 省略 問3 連泊の場合  連泊の場合に整列済みの候補一覧を作成するための手順は、次の通りである。ここで、中間表1と中間表2は、両者とも"P番号"と"部屋番号"の2つの項目をもつ表として、あらかじめ定義されているものとする。 【】は語群の中から正解を抜き出したものです。 (1)次のSQL文の実行結果を、【中間表1】の状態とする。   SELECT P番号,部屋番号 FROM 部屋表 (2)(1)の空室検索文中の[人数]を閲覧者が入力した利用人数とし、[利用日]を利用開始日から【利用終了日の前日】まで順に変化させながら、次の(a)~(c)の処理を繰り返す。 (a)空室検索文を実行する。 (b)(a)の結果から"P番号"と"部屋番号"の項目だけを取り出し、その結果を中間表2に設定する。 (c)中間表1の内容を、次のSQL文の実行結果で書き換える。 SELECT P番号,部屋番号 FROM 中間表1 WHERE 【EXISTS】(SELECT * FROM 中間表2 WHERE 中間表1.P番号=中間表2.P番号【AND】中間表1.部屋番号=中間表2.部屋番号) (3)次のSQL文によって、整列済みの候補一覧を得る。 SELECT X.P番号,ペンション名,X.部屋番号,部屋名称,上限人数,(部屋使用料+宿泊料*[人数])AS 室料 FROM 【部屋表】X,【中間表1】Y,【ペンション表】Z WHERE X.P番号=Y.P番号 AND Y.P番号=Z.P番号  AND X.部屋番号=Y.部屋番号 ORDER BY 室料 ASC,上限人数 ASC 解説には、「抽出した中間表1をもとに、部屋表から部屋名称と上限人数を、ペンション表からペンション名を得ると判断できるので、Yは中間表1、Xは部屋表です。」と書いてありました。 何故、Yは中間表1、Xは部屋表とわかるのでしょうか。

  • クリスマスシーズンなどのビジネスホテルの宿泊料金について質問です.

    クリスマスシーズンなどのビジネスホテルの宿泊料金について質問です. クリスマスシーズンにビジネスホテルの予約をとりたいと考えております. 一般のホテルだとクリスマスシーズンは追加料金などとられて高額になると思うのですが,ビジネスホテルではクリスマスシーズンだと高額になるようなことはあるのでしょうか. よろしくお願い致します.

  • パリのホテルの代金のついて

    パリに旅行しようと思っています。 1つのホテルに6日間連泊しようと思うのですが、 予約サイトで5日間はとれるのですが、 途中の1日だけとれません。 その場合、現地のホテルで部屋が開いていたら、 宿泊しようと思うのですが、 その場合その宿泊料は、予約サイトで取った料金より高くなるでしょうか? (直接現地でホテルに直接宿泊を申し込んだ場合の料金)

  • 空室の有無の回答について(国内ホテル)

    急に1週間ほど先のホテルを手配することになり、料金や立地などを考慮し、ある1件のホテルに絞り、複数のホテル予約サイトで空室状況をチェックしました。当然のことながら、サイトによっては満室だったりもしましたが、その中のあるサイトから宿泊人数分の部屋が予約できました。 ただ、ホテルのHPで確認したところ、そのホテルの違う部屋タイプ(これはホテル予約サイトには掲載されていませんでした)だと同じ宿泊人数でもっと安かったので、期日が迫っていたこともありホテルに直接空室状況を問い合わせたところ、その日程は全館満室という回答でした。 そこで、ホテルのHPから予約フォームが送れるようになっていたので、ダメもとで希望の部屋タイプの予約を入れたところ希望通りの部屋が確保できました。(そのホテルのHPでは空室状況は確認できません) ホテル予約サイトごとに満室だったり空室だったりというのは理解できますし、ホテルでもネット予約分の部屋を確保していることがあると思うのですが、それなら電話で確認した時にネット予約分なら空室があるかもしれません、という旨のことを教えてはいただけないのでしょうか? とりあえず部屋が確保できたのでほとんどあきらめていたのですが、料金が3万円ほど差があったのでホテルの予約フォームを送りました。 ホテル側からすれば、直接の予約なら、電話であろうがネットであろうが同じことだと思うのですが・・・? ホテル事情に詳しい方、お教え下さい。 (ちなみにこれは全部1日のやり取りです)

  • ラブホテルについて

    料金表に \3000~\5000円 のような表記がありますが何によって値段が変化するんでしょうか? あとクリスマスシーズンに利用するには予約必須なのでしょうか?(宿泊ではなく休憩)

専門家に質問してみよう