Database 房间/人员管理应用程序数据库结构

Database 房间/人员管理应用程序数据库结构,database,database-design,data-structures,Database,Database Design,Data Structures,我正在尝试构建一个管理儿童托儿所的应用程序,特别是管理哪个孩子在托儿所的哪个房间的哪个位置 苗圃连锁店有几家分店。每个分支机构都有几个房间,每个房间对应一个年龄段,容量有限 孩子们提前一个月到托儿所登记,并按月份分组登记,所以他们有一个开始月份和预期的结束月份。他们可以在任何一天的上午、下午或同时预订。因此,例如,一个孩子可能注册希望被预订: mon AM tues PM wed AM PM thurs AM fri AM PM sat sun AM 孩子3岁了

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

苗圃连锁店有几家分店。每个分支机构都有几个房间,每个房间对应一个年龄段,容量有限

孩子们提前一个月到托儿所登记,并按月份分组登记,所以他们有一个开始月份和预期的结束月份。他们可以在任何一天的上午、下午或同时预订。因此,例如,一个孩子可能注册希望被预订:

mon   AM
tues     PM
wed   AM PM
thurs AM 
fri   AM PM
sat   
sun   AM
孩子3岁了,所以房间里的毛毛虫或兔子都适合他。我需要检查这些房间是否有空房,如果有,那么记录下这个孩子将从X月到Y月被预订到那个房间

所以我有一张儿童桌和一张房间桌,但我发现很难根据孩子的年龄来分配房间,基本上也很难记录谁在哪个房间

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


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

以下结构应该让您知道从哪里开始。您可以查询
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 |
| .. | ............ | ....... | ....... | ........ |
+----+--------------+---------+---------+----------+

嗨,本尼,谢谢你花时间把这些都打印出来。我真的很感激。为了回答您的问题,每个分支机构都会有不同的房间和不同的名称。一个孩子只能去他们签约的房间。但我想我能处理好这一切。这是检查一个房间里有多少孩子以及什么时候。所以你的支票表是个好主意。如果我有一个房间有一个完全独特的id,我可以使用它和孩子的id来存储他们在哪里。以前,我认为开始和结束日期应该在children表中。我想那是对的,不是吗?@ZaphodBeeblebrox-你可能在
儿童
表中也有一个开始和结束日期。
checks
表就像一个“时钟”表——孩子到房间时登记,离开时登记。我不认为是你要求的,但当我写这篇文章时,我正在思考我儿子的日托中心是如何运作的:-)嗯。。。你给了我很好的思想食粮。我认为他们不需要办理入住/退房手续,因为他们会参加,所以这不成问题。我现在的主要问题是如何处理孩子想要的行程。例如,如果一个孩子需要预定周一上午和下午,以及周四下午,那么我该如何记录?在mo我所能想到的是,我会有另一张桌子,“行程表”,上面有周一上午、周一下午等栏目。。。(以及child_id)然后输入1或0。你怎么看?再次感谢您的输入,非常感谢:)@ZaphodBeeblebrox-我编辑了我的答案,并添加了一个
预订
表。这样你就可以随时安排孩子。在我的示例数据中,您可以看到Susie的日程安排是2013年11月14日星期五上午7:30到下午1:00,然后她会在晚上8:00到10:00回来(爸爸妈妈必须有一个“约会之夜”)。