我正在尝试构建一个管理儿童托儿所的应用程序,特别是在托儿所的哪个房间里管理哪个孩子。
托儿所连锁有几个分支。每个分支机构都有几个房间,每个房间对应一个年龄范围,容量有限。
孩子们提前一个月注册托儿所,并按月块预订,因此他们有开始月和预期结束月。他们可以在任何特定的一天预订,无论是上午还是下午,或者两者兼而有之。因此,举个例子,一个孩子可能注册了,想要被预订:
mon AM
tues PM
wed AM PM
thurs AM
fri AM PM
sat
sun AM孩子3岁了,所以房间里的毛毛虫和兔子都适合他。我需要检查这些房间是否有空房,如果是这样,那么记录下这个孩子将从X月到Y月被预订到那个房间。
所以我有一张儿童用的桌子和一张房间用的桌子,但我发现很难弄清楚如何根据孩子的年龄分配房间,以及基本上如何记录谁在哪个房间。
我知道这可能很简单,但是数据库结构总是让我头疼!
设置我的数据库来记录孩子和房间的最好方法是什么?谁在哪里?
发布于 2013-11-14 22:36:33
下面的结构应该会让你对从哪里开始有一些想法。您可以查询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 |
| .. | ............ | ....... | ....... | ........ |
+----+--------------+---------+---------+----------+https://stackoverflow.com/questions/19979459
复制相似问题