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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1948閲覧

スケジュールの設計について

kenkbou

総合スコア151

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/06/05 01:32

編集2017/06/05 02:02

お世話になります。

現在、日時を持つジョブに対してユーザーが紐づくシステムを開発しております。

ユーザーはスケジュール(シフト表)を提出して、それを元にジョブをアサインしていく、というような流れになります。

以下のように設計しているのですが、他にもっと良い方法があると思っており、ご相談させてもらいました。

SQL

1jobテーブル 2- id 3- user_id 4- date 5- start_time 6- end_time 7 8userテーブル 9id 10 11scheduleテーブル 12- id 13- user_id 14- type ('day', 'week') 15// dayの場合 16- start_time 17- end_time 18- all_day 19// weekの場合 20- value(sun-1,sun-2のような値を挿入: sun-19-12時のようなイメージ)

設計が全然思いつかず質問させていただきました。
dayとweekのテーブルは分けるべき、などそのレベルでのご回答でも良いので皆様のご経験をお聞きしたいです。

よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ER図 (Entity Relationship Diagram) を書いてみましょう。
実体関連モデル

投稿2017/06/05 01:42

hihijiji

総合スコア4150

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

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

kenkbou

2017/06/05 02:14

ありがとうございます、作成して、簡略化したものを記載させていただきました。
hihijiji

2017/06/05 03:07

労基など色々な観点からシフト勤務には、以下のようなプロセスが不可欠です。 個人スケジュール申請  ↓↑ 管理職による承認または差戻  ↓ 承認された個人スケジュールを全体スケジュールに反映 モデリングにはこういった業務プロセスこそが重要です。
guest

0

直接の回答ではありません。

週や月の最大労働時間もあるでしょう。
メンバーによっては働ける時間帯や一日の最大労働時間があったり、生活がかかっているから週最低でも何時間は働かせて欲しい、この日は仕事を入れないで欲しい、といった要望が必ず出てきます。
急に葬式など断れない用事の為に他の人に代わってもらうための変更も発生します。
メンバー毎に実際に働いた履歴情報も必要です。

このような情報をどうテーブルに持って、この日のこの時間のアサインを誰にするかを自動的に割り当てるにはかなり高度のノウハウが必要です。
頑張ってください。

投稿2017/06/05 02:05

Orlofsky

総合スコア16415

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

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

kenkbou

2017/06/05 02:14

ありがとうございます。確かに起こりうるケースを想定すると、自動マッチングというのは難しいかもしれませんね、、、一度勉強してみます。
guest

0

ベストアンサー

背景が見えないので難しいですが…とりあえず、jobテーブルが、どのテーブルともリレーションがあるように見えないのが気になります。アサイン情報を司るテーブルは作成予定なのでしょうか?

スケジュールテーブルのValueというカラムは、「毎週」という意味ですかね?であればテーブルを分けて、「この人は毎週、日曜日9-12」という状態を表すのが良いかもしれませんね。

もし、簡単に仕組を作るなら…

  1. ユーザーのシフト情報を登録(毎週の固定シフト+変動シフト)
  2. 毎週の固定シフトの中にJOBが収まるかどうかを確認
  3. 上記2に当てはまらない場合、変動シフトを確認
  4. シフト内に収まっている場合は、アサインテーブルにuserIdとJobIDを登録。それ以外の場合はエラー

という感じでしょうか…

投稿2017/06/05 01:57

motuo

総合スコア3027

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

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

kenkbou

2017/06/05 02:13

ありがとうございます。JobテーブルにuserIdがあり、そこでアサインとしております。 > スケジュールテーブルのValueというカラムは、「毎週」という意味ですかね? こちらおっしゃる通りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問