1. ホーム
  2. database

[解決済み] 営業時間のデータベースへの格納

2023-02-23 13:42:17

質問

私は現在、ある企業の営業時間をデータベースに保存するための最良の方法を見つけようとしています。

たとえば

ビジネスAは次のような営業時間です。

  • 月曜日:午前9時~午後5時
  • 火曜日:午前9時~午後5時 水曜日:午前9時~午後5時 木曜日:午前9時~午後5時
  • 金曜日:午前9時~午後5時
  • 土曜日 午前9時~午後12時
  • 日曜日 休業日

現在、私は以下のようなデータモデルを持っています。

CREATE TABLE "business_hours" (
    "id" integer NOT NULL PRIMARY KEY,
    "day" varchar(16) NOT NULL,
    "open_time" time,
    "close_time" time
)

ここで、quot;day"はコード内で(ORMを通して)7つの曜日の中から選択するように制限されています。ビジネスが特定の日に閉じているかどうかをテストするために、open_timeとclose_timeがNULLであるかどうかをチェックします。これは中間テーブル(Many To Many Relationship)を通してビジネスに関連しています。

このデータベーススキームについて、どなたかご提案がありますか?何か私には正しいとは思えません。

どのように解決するのですか?

全体としては、何も問題ないと思います。ただし...

  1. 私なら、ネイティブのプログラミング言語が(そのライブラリで)使用するどのような番号付けシステムでも使用して、曜日を整数として保存します。これにより、データベースのサイズが小さくなり、コードから文字列の比較を取り除くことができます。

  2. 私はおそらく、ビジネス・テーブルへの外部キーをこのテーブルのここに置くでしょう。そうすれば、リンクテーブルが不要になります。

というわけで、私ならこうするかな。

CREATE TABLE "business_hours" (
     "id" integer NOT NULL PRIMARY KEY,
     "business_id" integer NOT NULL FOREIGN KEY REFERENCES "businesses",
     "day" integer NOT NULL,
     "open_time" time,
     "close_time" time
)

ビジネスロジックでは、すべてのquot;business"は、以下の制約を強制します。 少なくとも 7つの営業時間(7 "business")があることを強制します。 少なくとも は、Jon Skeetの言うとおり、休日営業が必要かもしれないからです)。しかし、ビジネスが休みの日には、単に "営業時間" を省くことによって、この制約を緩和したいと思うかもしれません。