2

いくつかの場所の間を移動する資産で構成されるデータベース構造を開発しています。これらの資産の予約システムを作りたいです。資産が異なる場所間を移動しない場合、空室状況を取得するのは非常に簡単です。特定の日の予約数を確認し、通常利用可能な数の資産から差し引くだけです。

available = Normal.Available - already reserved

しかし、複雑な要因は、人々が異なる場所間を移動できるという事実です。顧客は、場所 A で資産を受け取り、場所 B でドロップすることができます。たとえば、9 月 13 日の午前 10:00 にピックアップして、LocB で 9 月 13 日 13:00 にドロップオフします。

13:00 に場所 B で利用可能なアセットを取得したい場合、A->B から移動したアセットのため、これは通常の利用可能な数 +1 です。場所 A の空き状況は、明らかに通常よりも 1 つ少なくなります。

これらの動きをデータベース構造でグラフ化するにはどうすればよいですか?
エンティティは明確です: 資産、場所、予約、および顧客。難しいのは、さまざまな場所でさまざまな時期に空室状況を把握することです。

4

3 に答える 3

2
assets
    id              unsigned int(P)
    description     varchar(200)

+----+-------------+
| id | description |
+----+-------------+
|  1 | Widget A    |
| .. | ........... |
+----+-------------+

パスワードのハッシュについては、 PHP の crypt() 関数を参照してください。

customers
    id              unsigned int(P)
    first_name      varchar(50)
    middle_name     varchar(50) // Allow NULL
    last_name       varchar(50)
    email           varchar(255)
    username        varchar(32)
    password        varbinary(255) // hashed
    ...

+----+------------+-------------+-----------+----------------------------+-----------+----------+-----+
| id | first_name | middle_name | last_name | email                      | username  | password | ... |
+----+------------+-------------+-----------+----------------------------+-----------+----------+-----+
|  1 | John       | Quincy      | Public    | jqp@privacy.com            | johnqball | xxxxxxxx | ... |
|  2 | Jane       | NULL        | Doe       | ladyinred@chrisdeburgh.com | janeykins | xxxxxxxx | ... |
| .. | .......... | ........... | ......... | .......................... | ......... | .......  | ... |
+----+------------+-------------+-----------+----------------------------+-----------+----------+-----+

locations
    id              unsigned int(P)
    description     varchar(200)

+----+-------------+
| id | description |
+----+-------------+
|  1 | Facility A  |
|  2 | Facility B  |
| .. | ........... |
+----+-------------+

reservations
    id              unsigned int(P)
    asset_id        unsigned int(F assets.id)
    customer_id     unsigned int(F customers.id)
    from_id         unsigned int(F locations.id)
    to_id           unsigned int(F locations.id)
    beg             datetime
    end             datetime

+----+-------------+----------+---------+-------+---------------------+---------------------+
| id | customer_id | asset_id | from_id | to_id |         beg         |         end         |
+----+-------------+----------+---------+-------+---------------------+---------------------+
|  1 |           1 |        1 |       1 |     2 | 2013-09-13 03:00:00 | 2013-09-13 14:00:00 |
|  1 |           1 |        1 |       2 |     1 | 2013-09-14 19:00:00 | 2013-09-15 07:00:00 |
|  1 |           1 |        1 |       1 |     2 | 2013-09-15 10:00:00 | 2013-09-15 17:00:00 |
|  1 |           1 |        1 |       2 |     1 | 2013-09-16 08:00:00 | 2013-09-16 13:00:00 |
|  1 |           1 |        1 |       1 |     2 | 2013-09-17 10:00:00 | 2013-09-17 17:00:00 |
| .. | ........... | ........ | ....... | ..... | ................... | ................... |
+----+-------------+----------+---------+-------+---------------------+---------------------+

施設 A で現在利用できるものを確認するには:

SELECT DISTINCT asset_id, * FROM reservations
WHERE to_id = 1 AND
    beg > NOW()
ORDER BY beg, end

施設 B で明日 15:00 に利用できるものを調べるには:

$target_datetime = '2013-09-14 15:00:00';
SELECT DISTINCT asset_id, * FROM reservations
WHERE to_id = 2 AND
    beg > $target_datetime
ORDER BY beg, end
于 2013-09-13T20:46:57.427 に答える
0

アセットロケーションカスタマーブッキングの4 つのエンティティから始めます。Booking を使用して、ある場所から別の場所へ顧客が予約したアセットを何時に表示するかを示します。

于 2013-09-13T20:21:23.747 に答える