2

我正在尝试构建一个管理儿童托儿所的应用程序,特别是管理哪个孩子在托儿所的哪个房间里。

托儿所连锁有几个分支。每个分店都有几个房间,每个房间对应一个年龄段,容量有限。

孩子们提前一个月注册托儿所,并按月预订,因此他们有一个开始月份和预计结束月份。他们可以在任何特定的日子预订,无论是上午、下午或两者兼而有之。因此,例如,一个孩子可能会注册并希望被预订:

mon   AM
tues     PM
wed   AM PM
thurs AM 
fri   AM PM
sat   
sun   AM

孩子 3 岁,所以房间里的毛毛虫或兔子都适合他。我需要检查这些房间是否有空房,如果有,请记录下这个孩子将从 X 月到 Y 月被预订到那个房间。

所以我有一张儿童桌和一张房间桌,但我发现很难弄清楚如何根据孩子的年龄将他们分配到房间,基本上如何记录谁在哪个房间。

我知道这可能很简单,但数据库结构总是让我头疼!

设置我的数据库以记录孩子和房间以及谁在哪里的最佳方法是什么?

4

1 回答 1

1

以下结构应该让您对从哪里开始有所了解。您可以查询该children表以了解有多少孩子被分配到特定分支的特定房间,并将其与rooms表中声明的房间容量进行比较。该rooms表还告诉您允许的年龄范围。

在现实世界中,还有其他事情需要考虑:所有分支机构是否都拥有相同的房间?如果多个分店都有一个“兔子”房间,所有这些兔子房间是否都限制在相同的年龄范围和容量?一个孩子可以去不同的分支机构,还是只能去他们注册的分支机构?

此类问题的答案可能会影响数据库的设计。

bookings
    id          unsigned int(P)
    child_id    unsigned int(F children.id)
    beg         datetime
    end         datetime

+----+----------+---------------------+---------------------+
| id | child_id | beg                 | end                 |
+----+----------+---------------------+---------------------+
|  1 |        1 | 2013-11-14 07:30:00 | 2013-11-14 19:30:00 |
|  2 |        2 | 2013-11-14 07:30:00 | 2013-11-14 19:30:00 |
|  3 |        1 | 2013-11-15 07:30:00 | 2013-11-14 19:30:00 |
|  4 |        2 | 2013-11-15 07:30:00 | 2013-11-14 13:00:00 |
|  5 |        2 | 2013-11-14 20:00:00 | 2013-11-14 22:00:00 |
| .. | ........ | ................... | ................... |
+----+----------+---------------------+---------------------+

branches
    id              unsigned int(P)
    name            varchar(20)

+----+--------------+
| id | name         |
+----+--------------+
|  1 | North Branch |
|  2 | South Branch |
| .. | ............ |
+----+--------------+

branches_rooms
    id              unsigned int(P)
    branch_id       unsigned int(F branches.id)
    room_id         unsigned int(F rooms.id)
*branch_id and room_id form a unique composite key to prevent someone 
from saying the North Branch has multiple "Rabbits" rooms for example.

+----+-----------+---------+
| id | branch_id | room_id |
+----+-----------+---------+
|  1 |         1 |       1 |
|  2 |         2 |       2 |
| .. | ......... | ....... |
+----+-----------+---------+

checks
    id                  unsigned int(P)
    child_id            unsigned int(F children.id)
    in                  datetime
    out                 datetime

+----+----------+---------------------+---------------------+
| id | child_id | in                  | out                 |
+----+----------+---------------------+---------------------+
|  1 |        1 | 2013-11-13 07:33:51 | 2013-11-13 17:34:13 |
|  2 |        2 | 2013-11-13 07:41:33 | 2013-11-13 17:22:18 |
|  3 |        1 | 2013-11-14 07:28:15 | NULL                |
|  4 |        2 | 2013-11-14 07:58:42 | NULL                |
| .. | ........ | ................... | ................... |
+----+----------+---------------------+---------------------+

children
    id                  unsigned int(P)
    name                varchar(30)
    branch_room_id      unsigned int(F branches_rooms.id)
    beg                 date
    end                 date
    ...

+----+-------+-----+----------+-----+
| id | name  | branch_room_id | ... |
+----+-------+-----+----------+-----+
|  1 | Billy |              1 | ... |
|  2 | Susie |              2 | ... |
| .. | ..... | .............. | ... |
+----+-------+-----+----------+-----+

rooms
    id          unsigned int(P)
    name        varchar(20)
    min_age     unsigned int
    max_age     unsigned int
    capacity    unsigned int

+----+--------------+---------+---------+----------+
| id | name         | min_age | max_age | capacity |
+----+--------------+---------+---------+----------+
|  1 | Caterpillers |       0 |       3 |       10 |
|  2 | Rabbits      |       2 |       4 |       15 |
| .. | ............ | ....... | ....... | ........ |
+----+--------------+---------+---------+----------+
于 2013-11-14T14:36:33.067 回答