【问题标题】:Some advice on DB design for simple booking system关于简单预订系统数据库设计的一些建议
【发布时间】:2014-01-10 00:44:01
【问题描述】:

所以我的任务是为一个简单的预订系统创建一个数据库模型,但我不知道,所以我在这里寻求帮助。到目前为止,我所做的是如图所示,但我不知道这是否足以从头开始构建一个简单的预订系统。我试过谷歌寻找一些数据库设计,但没有发现任何帮助,有什么建议吗?你觉得我的模特怎么样?缺少什么?

更新(基于答案) Ups 我忘了说要求是什么,我们开始吧:

  • sport_field 可以在给定时间和一天内预订,这意味着例如用户不能在两天或两天半内预订sport_field,但用户可以预订一、二、三个甚至更多小时。 (小时是从上午 9:00 到晚上 11:00 的有效时段,此时间以外的时间无效 - 也许我会使用编程隐藏)
  • 会有一个等候名单,这是什么?根据可用性为sport_field 排队(也许我在这里也迷路了,因为这是预订系统的主要行为)
  • sport_field 将保留最多一天的预订,例如用户可以预订sport_field,管理员将等待付款,如果付款不成功,则sport_field 将在下一次再次可用天。

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

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

更新 2

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

更新 3

基于建议的新更改:

【问题讨论】:

  • 我使用的一种方法是首先勾勒出我的“问题”(报告、查找等)。然后,我看看我的模型是否可以回答这些问题。如果您更多地定义问题的类型,我们可以更好地建议模型的适用程度。基于一些简单的问题(什么时候预订了特定的字段,谁预订了一个字段,各个用户预订了哪些字段),模型看起来不错......
  • 要考虑的想法。可以预订部分天的字段吗?如果用户处于非活动状态,他的现场预订会怎样?如何防止重复预订?
  • @Sparky 我添加了一些信息,您根据这些信息建议了哪些字段或表格?有不明白的可以追问

标签: mysql database database-design


【解决方案1】:

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

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

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

如果字段位于不同的位置,您可能需要添加经度和纬度,以便将地图和方向视图添加到字段。

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

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

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

视图是查询调用的包装器。可用于隐藏字段,例如,如果您不想让每个人都知道价格,您可以创建如下视图:

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 语法可能略有偏差

【讨论】:

  • 我根据您的建议更新了模型,您可以看看并告诉我它的样子吗?你还会添加什么?我错过了什么?
  • 看起来不错,我唯一可以添加的是预订的请求日期/时间列,以防多人请求一个字段,您需要确定优先级。我还建议为书籍创建一个视图,显示活动状态(基于预订中的查找)和书籍类型,基于新的状态表......
  • 您好,我再次按照您的建议添加了该字段,但在添加视图时迷路了,您能解释一下您想告诉我什么吗?
  • 小问题,将requeseted_on移动到预订表中,用户请求预订一个字段。我将视图概念添加到上面的答案中
【解决方案2】:

如果没有要求或对您需要做什么的描述,很难说...

通常看起来已经足够标准化 - 但这里有一些观察/想法:

给定字段的价格是否会发生变化?也许周末更贵或什么的?如果是这样,请考虑将价格移到另一个表格,其中包含该价格适用时间的数据范围。

在字段上的 Active 是什么意思?字段是否会暂时不活动?再次考虑移动到另一个有日期的表。

您没有通过附加表添加任何值:default_users_has_booking。考虑将 users_id 添加到预订表中。

default_users 表对我来说通常显得太大。考虑不要在这里存储密码和盐。 ip_address 应该是这个人登录的最后一个 ip 吗?考虑将此移动到一个新表中,该表记录用户的所有登录和日期。

【讨论】:

  • 我添加了一些信息,您根据这些信息建议了哪些字段或表格?有不明白的可以追问
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多