有关简单预订系统的数据库设计的一些建议

Rey*_*ier 5 mysql database database-design

因此,我的任务是为简单的预订系统创建数据库模型,但我不知道如何在这里寻求帮助。到目前为止,我所做的只是图片所示,但是我不知道这是否足以从头开始构建简单的预订系统。我尝试Google寻找一些数据库设计,但没有发现任何帮助,有什么建议吗?您如何看待我的模特?缺少什么?

数据库设计

更新(基于答案) Ups我忘了告诉您需求是什么,然后我们开始:

  • sport_field可以在给定的小时和一天之内预订,这意味着,例如,用户不能预订sport_field两天或两天半的时间,而用户可以预订一小时,两小时,三小时或更长时间。(在这段时间以外,小时是从9:00 AM到11:00 PM的有效时间段,这是无效的-也许我会使用编程来隐藏)
  • 会有一个等待名单,这是什么?sport_field基于可用性的队列(由于这是预订系统的主要行为,也许我在这里也迷路了)
  • sport_field最多将保留一天的预订时间,例如,用户可以预订sport_field,管理员将等待付款,如果付款未成功,则sport_field第二天将再次可用。

  • price是固定的,sport_field它永远不会改变,价格是每小时

  • active对我来说意味着如果将sport_field其保留一段时间或特定时间,则可能是我的设计错误并且不确定
  • users 桌子来自另一个系统,我只是将预订部分添加到一个庞大的系统中,但是我需要使用他们的桌子

更新2

根据建议,我将模型改进为:

在此处输入图片说明

更新3

根据建议的新变化:

在此处输入图片说明

Spa*_*rky 5

用户表并不是真正相关的,因为您不能更改它,并且出于预订目的,您只关心用户ID。

我会为运动场添加开始和结束的可用时间。例如,我可以在凌晨3:00预定一个字段吗?我还要将价格字段名称更改为price_hourly,以确保将来的人们知道它的含义。

根据您的描述,您实际上并不需要在运动领域中活跃。您可以通过查询预订表来确定某个日期范围内的字段是否处于活动状态。如果将活动标志保留在运动表中,则多余。如果该标志显示为true,但没有预订条目,则该字段是否处于活动状态???

如果这些字段位于不同的位置,则可能要添加经度和纬度,以将映射和方向视图添加到这些字段。

您的预订表可能应该有一个状态列(即,保留,已付费,已请求等)

然后,等待列表可以是预订表中具有请求状态的所有条目。

一些帮助您入门的想法...

视图是查询调用的包装。可以用于隐藏字段,例如,如果您不希望所有人都知道价格,则可以创建如下视图:

CREATE VIEW sports_field_view
AS
SELECT name,description,starting_hour,ending_hours 
FROM sport_field
Run Code Online (Sandbox Code Playgroud)

这样,您可以使人们访问该表,同时在其中隐藏信息。

我建议的观点是这样的

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
Run Code Online (Sandbox Code Playgroud)

注意,我使用的MySQL很少,因此CREATE VIEW语法可能略有偏离