0

予約管理アプリケーションに取り組んでいます。これにより、ユーザーは医師との面会を予約できます。Lunch Visiting Hoursただし、医師はやのように活動をスケジュールすることもできVocationます。

医師は、テーブルに設定された頻度 (毎日/毎週/毎月) に基づいて、アクティビティの繰り返しをブロックできます

Googleカレンダーの繰り返し機能のようなテーブル構造を設計する方法を参照?

例えば

2013 年 8 月 2 日から 2013 年 8 月 31 日までのランチ時間は、午後 2 時から午後 3 時です。

2013 年 8 月 14 日から 2013 年 8 月 16 日まで

2013 年 8 月 2 日から 2013 年 8 月 31 日までの訪問時間は午前 10 時から午後 2 時です。

また、翌月も同じ活動を繰り返すことができます。

このデータをより効率的に維持するためのテーブル構造を作成するにはどうすればよいですか?

これが私のアプローチです

DoctorId Activity FromDateTime ToDateTime Frequency

C#コードで簡単にアクセスして、毎週/毎月に基づいて異なる日付に対してより多くの同じレコードを生成するために、頻度列形式をデータベースに保存する優れた方法は何でしょうか?

4

1 に答える 1

0

ユーザーが医師の診察を予約できるテーブル構造が必要であると仮定すると (医師がスケジュールを管理するのを支援するのではなく、質問がさまざまな時間に両方を暗示しているように思われるため)、ユーザーに何を伝えるテーブルを設計したくありません。医師が行っています。ユーザーは、医師が空いているかどうかだけを気にする必要があります。なぜ、医師が休暇中であることを知る必要があるのでしょうか。医師に1〜2週間空きがないことを確認するだけで十分です。以下は、これの単純化されたテーブル構造を示しています。医師の名前の参照テーブルでありDoctorID、医師の名前と彼/彼女の利用可能な時間を表示するための結合です。

ユーザーが予約をする際の問題を解決するために、ユーザーは利用可能な時間で医師に会い、DATETIME適切な時間に医師とスケジュールを組むことができるように時間の形式を調整します。医師が対応できない場合、特定の日付に時間は表示されません (つまり、ユーザーは、以下の簡単な例に示すように、希望する時間帯を選択します)。

CREATE TABLE Doctor(
     DoctorID INT,
     DoctorName VARCHAR(250)
)

CREATE TABLE Appointment(
     DoctorID INT,
     AppointmentHour DATETIME,
     Available BIT DEFAULT 1
)

INSERT INTO Doctor
VALUES (1,'John Doe')
    , (2,'Jane Doe')

INSERT INTO Appointment (DoctorID, AppointmentHour)
VALUES (1,'2013-01-01 10:00:00.000')
    , (1,'2013-01-01 11:00:00.000')
    , (1, '2013-01-01 13:00:00.000')
    , (1, '2013-01-01 14:00:00.000')
    , (2, '2013-01-01 15:00:00.000')

SELECT d.DoctorName
    , a.AppointmentHour
    , a.Available
FROM Appointment a
    INNER JOIN Doctor d ON a.DoctorID = d.DoctorID

DROP TABLE Doctor
DROP TABLE Appointment

この例を示す SQLFiddle。一方、医師が自分のスケジュールを設定するためのアプリケーションを作成する場合、医師が対応可能な時間を入力し、上の単純な構造に示すように、ユーザーには、これらの利用可能な時間のみが表示されます (時間を選択すると、Available列は 0 に変わります。つまり、C# アプリケーションには表示されません)。例えば:

UPDATE Appointment
SET Available = 0
WHERE AppointmentHour = @UserSelection --OR: @DoctorVacation/@DoctorLunch/@DoctorOther

ユーザーが時間を選択したときの SQL ステートメントの例です (現在、他のユーザーはそれを選択できません)。医師の場合、午前 8 時から午後 5 時までのように、医師が対応できないと判断しない限り、医師が対応可能であると想定されるデフォルトの時間が存在する可能性があります (その場合、これらの時間は予約テーブルから削除されます。または、ユーザーがそれらの時間を選択できないように、アプリケーションに表示されないように 0 に設定することもできます)。

于 2013-08-02T21:17:19.077 に答える