• 締切済み

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

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

みんなの回答

  • hue2011
  • ベストアンサー率38% (2800/7250)
回答No.1

添付されている図面は拡大表示しても文字が読めないので細かいことは言えません。 ただ、foreign-keyを活用していなすぎるように見えます。 モデリングというのは、面倒に考えず、扱う情報の粒度で行えばよいのです。 要するに、  スタッフがいるのですね。  顧客がいるのですね。  施術(サービス)があるのですね。それは固定料金ですね。  顧客に予約を設定させたいのですね。だったら予約、という情報があるのですね。  予約にはステータスがあって、予約、施術中、施術終了、キャンセルがありますね。  割引のようなことを顧客単位で提供するのですね。  顧客はスタッフと紐づいているけれど、スタッフが交代しても同じサービスが得られるようにするなら   ⇒顧客管理情報がいるのですね。それは顧客情報自体とは異なるものですね。  顧客の紹介、という事態が発生するのですね。  だったら誰が誰を紹介、という紹介メモのようなものが顧客とは別の情報単位で存在しますね。  同じ人を別の人が紹介する場合もありますしね。   以上の話から、エンティティは6つは必要になりますね。 それ以上なら問題はありませんけど、あなたの図面だと箱が10あって、冗長である危険はありませんか。 さて、モデルができたとき、業務上いくつかのステージがあるでしょう。それを考えます。 それぞれのエンティティが更新されるのはどういうとき? 何が契機となって変わるのですか。 契機、は画面を切り替えます。 そういう考えで、画面遷移が作れます。 ひとつひとつの画面で、どのボタンを押されたら、とか入力終了したら、とかの場面で処理が走ります。 もちろん、画面を切りかえるときにも処理が走って、このときにDBが書き換えられます。 いいでしょうか。 私が最初にいったモデリング、が M です。Modelですね。 画面の話が V です。Viewです。 処理が走る、というのが C です。Controlです。 これでMVCということになります。以上をすべて考え切れば、自動的にプログラムができているはずです。 なにせRubyでしょう。ちゃんとやれば必ずできます。 わくわく設計実現してください。

関連するQ&A

  • ER図の外部キー

    はじめまして ER図の書き方でFK(外部キー)として記載できるもしくは そう呼べるのはinnodbでの環境に限るのでしょうか? mysqlでmyisamにて構築しているのですが 例えば注文テーブルに商品IDや顧客ID、受注スタッフID、発注スタッフID等の カラムがあったとして、そらぞれのカラムは商品テーブル、顧客テーブル、 スタッフテーブルのプライマリーキーです。 この場合、商品IDは外部キーと呼べるのでしょうか。 また発注スタッフIDが必ず登録されているとは限らないのですがこれも外部キー と呼べるのでしょうか。 よろしくお願いします

    • ベストアンサー
    • MySQL
  • データベース設計の図が判りづらい

    データベース設計でよく使われるER図が理解しづらいです。 例えば、wikipediaに載っているこの図 http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E8%A8%AD%E8%A8%88 userテーブルのuser_idと、revisionテーブルのrev_userが関連している、 というのは、フィールドの名前を丁寧に読めば判りますが・・・ 似たような名前のフィールドが複数ある場合など、 どうやって判断するのでしょうか。。? もっとリレーションシップ等の構造がパッ見てと判るような 標準的な図の書き方(●●図と言えば誰でも判るような)って無いでしょうか。。?

  • ER図について

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

  • ER図について

    ER図を書く練習をしています。 就職するために会社に申請し、審査後に応募者(申請者)を受け入れる(合格)か拒否するか(不合格)を決めるケースを想定してER図を描きました。焦点は、「合格/不合格の情報をどのテーブルに持たせるのがよいか」です。添付のURLに(1)、(2)の2つのケースを考えて書いてみました。いずれのテーブルもものすごく簡単に書いたので突っ込みどころは満載だと思いますが、あくまでも、合格/不合格の情報をどこに持たせるかだけに特化したものと考えてください。 (1)http://www.dotup.org/uploda/www.dotup.org15911.jpg.html (2)http://www.dotup.org/uploda/www.dotup.org15912.jpg.html 申請書テーブルは、申請者から受け取った書類を管理するテーブルです。受け取った日や、本件のステータス、結果を応募者に送信したかなどの情報を持ちます。イベント系(トランザクション系)のテーブルです。 (1)のやり方 申請者テーブルには申請者の情報そのものを書類から入力するリソース系(マスタ系)のテーブルです。名前、年齢、前職。。その他諸々を保持します。ここに、合格か不合格かをok_ngというbooleanで持たせることとします。 (2)のやり方 (1)と同様、申請者のテーブルはあるのですがok_ngという属性を持たせずに、代わりに別リソース系テーブル「合格者」を作ります。申請者と合格者の関係は1対1です。お互いがお互いのプライマリキーを参照する外部キーを持ちます。申請者テーブルと合格者テーブルのオプショナリティは必須対任意とします。つまり、申請者のうち、合格した人のみが合格者テーブルに登録されるということです。 上記2点の設計は、どちらも有効でしょうか?有効だとするとメリット、デメリットなどありますでしょうか? (2)のやり方を書いた理由は、とある本に飛行機の「乗客テーブル」と「マイレージプログラム加入者テーブル」のER図があり、その関係が丁度本件の「申請者テーブル」と「合格者テーブル」のような関係になっているのを見た事があるからです。コメント等あれば宜しくお願いします。

  • 利用者数10万のデータベース設計について

    WEB上で利用者数10万のマイページ機能をもつようなビジネスサイトを構築しようと考えています。 ユーザーのID,PASS管理と ユーザーごとのマイページの中にスケジュール管理機能、顧客管理機能 を設けます。 このような大規模なデータベースの設計例を教えていただけないでしょうか? データベースにはMySQLを使用しようと考えています。 ユーザーのID管理は一つのテーブルじゃ無理ですよね? その場合どのように分ければいいのしょうか? ユーザーごとのマイページはユーザーごとにスケジュールテーブルなどを 作るべきなのでしょうか? MySQLの物理的最大DB,テーブル数の制限などあるのでしょうか? 私自身はデータベースプログラムが出来ないため設計の部分でお教えいただけたらと思います。

  • 整体院を経営しています。

    整体院を経営しています。 受付スペースがとても狭く、受付事務員もいないため、時間もかかり、 お客さんを待たせないようにと、受付業務に苦労しています。 先日、派遣会社にお勤めのお客さんから、 「スタッフさんの管理をipadで行っている」 と聞きました。 そこで、私の整体院の受付業務も、ipadで効率化出来ないものかと思いました。 受付で、ノートに手書きしている処理がコンパクトなipadで出来たら嬉しいのですが。 ノート作業は大きく二つあります。 1.来店されたお客さんの名前、コース、金額、担当者を、売上ノートに記入 2.施術後のお客様の、次回の予約を、予約表の書いた予約ノートに記入 3.来店されたお客様の個人情報(来店日・名前・住所・年齢・・)を顧客ノートに記入 1日の業務の最後に、1.の売上表合計を電卓で計算し、1日の売上を出します。 (1カ月の終わりに、月の売上金額を出します。 また、1ヶ月の終わりに、お客様のリピート率を調べます。) 複雑な機能は求めていません。 1の売上表の管理と、2の予約表の管理、3の顧客情報の管理を、 ipadで行うことは出来ますでしょうか??? 追加でお客さんの誕生日の管理や、ダイレクトメールの管理、 お客さんの月間売上ランキングが出せれば、嬉しいのですが。 こういう整体(販売)受付業務は、そもそもipadで、出来ますか? 可能にするツールがありましたら、教えてください。 よろしくお願いします。

  • ACCESS 顧客データ 購入履歴検索について

    ACCESSで顧客データを管理しています。 ●月●日以降 ○○製品の購入履歴があった人が、 その日付以降に再来店しているか、再来店日、購入製品をだしたいのですが、 良い抽出方法ありますか? テーブルには、↓ があります。 顧客コード 顧客名 売上日付 取引番号 商品コード 商品名 売上数量 店舗名  分かる方いらしたら教えて下さい! 宜しくお願いします。

  • ACCESS2002で作る水商売用顧客管理データベース

    データベースの知識をつけたいので、友人の店をモデルに作成しようと思いました。 1.顧客の個人情報を管理したい(住所、氏名、会社名、電話など) 2. その月の売り掛け金額を顧客に請求したい。また、その宛名も印刷したい。 3. 一日の来客情報の管理をしたい。(氏名、会社名、売り掛け金額、支払い金額など) 4. その月のTOP10の顧客情報を印刷したい。(氏名、会社名、来店日、支払いと売り掛けの合計金額) 以上が骨組みです。 現在テーブルを4つ作りました。 「顧客情報管理」「請求処理管理」「請求先」「来店情報」です。 「顧客情報管理」には顧客の個人情報を、「請求処理管理」には顧客IDと顧客氏名、請求年月、振込み処理、振込み未処理(チェックボックスで)、未処理金額を。「請求先」には顧客ID、顧客氏名、請求先のそれぞれ郵便番号から住所、今月請求額と繰越未処理金額、請求と繰越未処理の合計を請求合計金額として。「来店情報」には来店管理ID、顧客ID、氏名、来店人数、来店日、支払い金額、売り掛け、繰越分入金、繰越分残高。それぞれフィールドは以上です。売り掛けは消費税込みとなります。素人なりに、ここまで作りましたが、これ以降どのように進めていけばよいのか、アドバイスを下さいませ。

  • 売上帳に顧客識別番号を記入しており、顧客の来店数及び来店月を集計しよう

    売上帳に顧客識別番号を記入しており、顧客の来店数及び来店月を集計しようと考えています。 売上帳はシート別に日付名で管理しておりその中の顧客識別番号記載の列を読み取り、別の集計シートで どの顧客がその月で何回来店したかを管理したく思っております。 現在の状態 1、シートは日付別で11-1~11-30の名前で管理している。 2、顧客識別番号は各シート B4~B48 までに入力してある。 3、別途集計用シートにて 1~400 までの顧客が何回来店しているかを求めたい。 ※顧客識別番号は1~400まで登録されている。 4、売上は各月ブック別で管理 例: 売上シート    A      B C       D    E 3  No.(来店数) 顧客識別番号 顧客名     商品名 担当 4  1       35    顧客太郎    タンス 太朗 5  2       111   顧客花子     棚    二朗 6  3        7    顧客サム    センス 三朗 * ※シート名 11-4 集計シート         (来店数)  (来店数)  (来店数)    A      B      C       D 1  (顧客識別番号)   10月    11月    12月 2    1          1      5      1 3    2          1      0      1 4    3          1      0      1 5    4          1      2      1 6    5          2      1      1 7    6          1      4      0 8    7          4      1      0 9    8          0      8      2 10   9          1      1      1 *   (400まで) このように集計したい↑もしくは単月(月別ブック)集計だけでも良い。 これらを他のブックに反映する事は可能か?※リンクが閉じられている状態でも。 初心者ながら色々過去ログも試してみたのですが反映されずどうしたものだろうと困っています。 宜しくお願い致します。      

  • iPadでbento 店舗売上管理できますか?

    店舗経営をしているのですが、売上管理、 顧客管理をbentoでできますでしょうか? 顧客情報、お会計、来店同期等を入力して 月ごと、日ごとの統計をとれればいいのですが そういうことはできますでしょうか?

    • ベストアンサー
    • Mac

専門家に質問してみよう