2017-11-29 22 views
0

医師とそのスケジュール(利用可能な時間)を保存したい。週の特定の日に医師が利用できるようなスケジュールにすることができます(例:医者は火曜日と木曜日のみに働きます)。複数のブール値の列または新しいテーブル

私は、ある範囲の日付で利用可能な医師に質問し、特定の医師のタイミングを照会する必要があります。

私の質問は:

は私がschedule_idday列を持つテーブルschedule_daysを作成し、schedulesテーブル内の7つのboolean型の列を作成したりすべき。 day列は、週の7日を表す0〜6の整数になります。

どの実装が読み込み速度が向上しますか?

答えて

0

提出されているSQLがここで違いを生むので、質問を「読み込み速度が速い」に制限しても、ここでは「正しい」回答はないと思います。 、方法など)。

私は将来の範囲を考えます。

doctor_id | day_of_week 

は、あなたのクライアントは、必然的に

doctor_id | day_of_week | time_in | time_out 

をお願いしますどこdoctor_id | m | tu | w | th | f | sa | suはないでしょうあなたは、将来的に二つの新しい列を追加することができるようになります。読み取りが最も重要である場合

しかし、その後、

doctor_id | day_of_week_bitmask 

は、それからちょうど一週間の7日間ビットマスクを表す整数値を格納考えます。 TINYINTに収まるので、フットプリントも小さくなります。あなたは明らかにビットマスクの読み込みにいくらかのオーバーヘッドを持っているでしょうが、コンピュータはそのようなことで迅速です。

+0

私が 'day_of_week_bitmask'を使用すると、月曜日に利用可能なすべての医者にどのように問い合わせますか? – vedant1811

+0

mondayの整数表現であれば、それを打つことができます。 [このリンクをチェックしてください](https://technet.microsoft.com/en-us/library/ee808920.aspx)または、この問題のような '&'(BITAND)関数を使って正しく行うことができます(https ://stackoverflow.com/questions/11059182/select-users-from-mysql-database-by-privileges-bitmask)。また、[mysqlのビット機能の詳細はこちら](https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html) – JNevill

0

doctor_idとdayの別のテーブルを使用してください。しかし、その日はMySQLのDAYOFWEEKの結果と一致するはずです。つまり、日曜日は1、月曜日は2です。

データを照会するのは簡単です。例えば

select * 
from doctors 
where doc_id in 
(
    select doc_id 
    from doc_workingdays 
    where day = dayofweek(current_date) 
); 
関連する問題