[英]Some advice on DB design for simple booking system
因此,我的任务是为简单的预订系统创建数据库模型,但我不知道如何在这里寻求帮助。 到目前为止,我所做的只是图片所示,但是我不知道这是否足以从头开始构建简单的预订系统。 我尝试Google寻找一些数据库设计,但没有发现任何帮助,有什么建议吗? 您如何看待我的模特? 缺少什么?
更新(基于答案) Ups我忘了告诉您需求是什么,然后我们开始:
sport_field
可以在给定的小时和一天之内预订,这意味着例如用户不能在两天或两天半的时间内预订sport_field
,但用户可以预订一小时,两小时,三小时或更长时间。 (在这段时间以外,小时是从9:00 AM到11:00 PM的有效时间段,这是无效的-也许我会使用编程来隐藏) sport_field
队列(也许我也在这里迷路,因为这是预订系统的主要行为) sport_field
将最多保留一天的预订量,例如,用户可以预订sport_field
,管理员将等待付款,如果付款未成功,则sport_field
将再次使用sport_field
。
每个sport_field
price
是固定的,它将永远不会改变,并且价格是每小时
active
对我意味着如果将sport_field
保留了一段时间或特定时间,则可能是我的设计错误并且不确定 users
表来自另一个系统,我只是将预订部分添加到一个庞大的系统中,但是我需要使用他们的表 更新2
根据建议,我将模型改进为:
更新3
根据建议的新变化:
用户表并不是真正相关的,因为您不能更改它,并且出于预订目的,您只关心用户ID。
我会为运动场添加开始和结束的可用时间。 例如,我可以在凌晨3:00预定一个字段吗? 我还要将价格字段名称更改为price_hourly,以确保将来的人们知道它的含义。
根据您的描述,您实际上并不需要在运动领域中活跃。 您可以通过查询预订表来确定某个日期范围内的字段是否处于活动状态。 如果将活动标志保留在运动表中,则多余。 如果该标志显示为true,但没有预订条目,则该字段是否处于活动状态???
如果这些字段位于不同的位置,则可能要添加经度和纬度,以将映射和方向视图添加到这些字段。
您的预订表可能应该有一个状态列(即,保留,已付费,已请求等)
然后,等待列表可以是预订表中具有请求状态的所有条目。
一些帮助您入门的想法...
视图是查询调用的包装。 可以用于隐藏字段,例如,如果您不希望所有人都知道价格,则可以创建如下视图:
CREATE VIEW sports_field_view
AS
SELECT name,description,starting_hour,ending_hours
FROM sport_field
这样,您可以使人们访问该表,同时在其中隐藏信息。
我建议的观点是这样的
CREATE VIEW sports_field_view AS
SELECT sports_field.name,description,starting_hour,ending_hours,
book_status.name as Booked,Booking.Start_time,booking.end_Date
FROM booking
JOIN sports_field ON booking.sports_field_id=sports_field.id
JOIN book_status ON booking.status_id =book_status.id
注意,我使用的MySQL很少,因此CREATE VIEW语法可能略有偏离
没有要求或没有描述您需要做什么,很难说...
通常看起来已经足够正规化了-但是这里有一些观察/想法:
给定字段的价格是否发生变化? 也许周末更贵? 如果是这样,则考虑将价格移到另一个表中,该表的数据范围为该价格适用的时间。
Active在字段上是什么意思? 字段是否暂时不活动? 再次考虑移动到另一个带有日期的表。
您没有通过附加表default_users_has_booking添加任何值。 考虑只将users_id添加到预订表中。
default_users表通常对我来说显得太大。 考虑不在此处存储密码和盐。 ip_address应该是此人登录的最后一个IP吗? 考虑将其移动到一个新表,该表记录所有带有用户日期的登录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.