0

レストランが時間帯や曜日に基づいて表示できるメニューを作成できるシステムを構築しようとしています。

たとえば、標準メニュー、ハッピーアワー メニュー、スペシャル メニューなど、すべてメニューごとに独自のアイテムがあり、アイテムごとに価格が設定されている場合があります。チーズピザは、金曜日の午前 10 時から午後 2 時までは 10 ドル、午後 3 時から午後 5 時までは 5.00 ドルです。

アイテムがさまざまな価格 (時間帯と曜日に基づく) を持つだけでなく、さまざまな「メニュー」に関連付けられる (それらを分類するため) ように、データベースを設計するための良い方法は何ですか?

私は現在、これを実際に許可していないシステムを使用しています (当時は時間ベースのメニューは必要なかったため)。

*価格、開始時間、終了時間の列を含む menu_items_times テーブルが必要ですか?*

会場テーブル- 個々のレストラン (primary_menu_id) はメニュー テーブルの menu_id に関連付けられています

    +------------------+--------------+------+-----+---------+----------------+
    | Field            | Type         | Null | Key | Default | Extra          |
    +------------------+--------------+------+-----+---------+----------------+
    | venue_id         | bigint(20)   | NO   | PRI | None    | auto_increment |
    | name             | varchar(256) | NO   |     | None    |                |
    | primary_menu_id  | bigint(20)   | NO   |     | NULL    |                |
    +------------------+--------------+------+-----+---------+----------------+

メニュー表各メニューとそれが属する会場

    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | menu_id  | bigint(20)   | NO   | PRI | None    | auto_increment |
    | venue_id | bigint(20)   | NO   |     | None    |  
    | name     | varchar(256) | NO   |     | None    |                |
    +----------+--------------+------+-----+---------+----------------+

menu_items テーブルメニューの個々のメニュー項目と、どのカテゴリ (つまり、「ドリンク」、「食品」、「スペシャル」カテゴリ) およびカテゴリを並べ替えるための「category_index」。

    +---------------+--------------+------+-----+---------+----------------+
    | Field         | Type         | Null | Key | Default | Extra          |
    +---------------+--------------+------+-----+---------+----------------+
    | menu_item_id  | bigint(20)   | NO   | PRI | none    | auto_increment |
    | menu_id       | bigint(20)   | NO   |     | none    |                |
    | name          | varchar(256) | NO   |     | none    |                |
    | price         | float        | NO   |     | none    |                |
    | category      | varchar(64)  | NO   |     | none    |                |
    | category_index| int(11)      | NO   |     | none    |                |
    +---------------+--------------+------+-----+---------+----------------+

menu_items_categories ビュー

    +----------------+--------------+-----------+-------------+------+---------+
    | Field          | Type         | Collation |  Attributes | NULL | Extra   |
    +----------------+--------------+-----------+-------------+------+---------+
    | menu_id        | bigint(20)   |           |             | No   |         |
    | category       | varchar(64)  |           |             | No   |         |
    | category_index | int(11)      |           |             | No   |         |
    +----------------+--------------+-----------+-------------+------+---------+
4

1 に答える 1

0

これを行う4つの方法を見ることができます...

  1. time_id時刻を含む静的配列の ID を含むフィールドをに追加しmenu_itemsます... 1=>朝、2=>夕方、3=>終日など。

  2. #1 と同じですが、フィールドを LIKE (%%) クエリで検索できる VARCHAR にすると、time_id".8.9.10.11" のようになります。午前 8 時から午前 11 時までは '.18.19.20.21."、午後 6 時から午後 9 時までは ... もう少し厄介で、LIKE クエリはもう少し集中的であるため、おそらく理想的ではありません。

  3. のフィールドの代わりに、menu_items別のテーブルを追加します ... ...をmenu_times含む... これは #2 よりも高速な場合があります。「オールモーニング」や「ハッピーアワー」など、 の代わりに を含めることもできます。menu_item_idtime_idtime_descriptiontime_id

  4. と... so includedとmenu_timesの間に入れることができます。menusmenu_itemsmenusmenu_timesmenu_items

これらすべてのソリューションについて注意すべき点は、一部のソリューションにはmenu_items異なる価格で複数のソリューションが必要になるということです...これは理想的ではありません. priceただし、ソリューション 1 ~ 3 では、をmenu_timesテーブルに移動することでこれを解決できます。

于 2012-10-06T06:31:56.267 に答える