关于DB设计的简单预订系统的一些建议

时间:2014-01-10 00:44:01

标签: mysql database database-design

所以我的任务是为一个简单的预订系统创建一个数据库模型,我不知道所以我在这里寻求帮助。到目前为止,我所做的是图像显示,但我不知道这是否足以从头开始建立一个简单的预订系统。我试过谷歌寻找一些数据库设计,没有任何帮助,任何建议?你对我的模特有什么看法?遗失了什么?

database design

更新(基于答案) 我忘了告诉我们要求是什么,我们走了:

  • sport_field可以在指定的时间内预订,仅在一天内,例如用户无法预订sport_field两天或两天半,但用户可以预订一,二,三个多小时。 (小时是从上午9点到晚上11点之间的有效期,这个时间以外的时间无效 - 也许我会隐藏使用编程)
  • 会有一个等候名单,这是什么?基于可用性的sport_field队列(可能我也在这里丢失,因为这是预订系统的主要行为)
  • sport_field将保留最多一天的预订,例如用户可以预订sport_field,管理员将等待付款,如果付款不成功,则sport_field将是第二天再次可用。

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

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

更新2

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

enter image description here

更新3

基于建议的新变化:

enter image description here

2 个答案:

答案 0 :(得分:4)

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

我会在运动场上添加一个开始和结束的可用时间。例如,我可以在凌晨3点预订一个字段吗?我还会将价格字段名称更改为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语法可能略有不同

答案 1 :(得分:0)

很难说没有要求或描述你需要做什么......

通常看起来足够规范化 - 但这里有一些观察/想法:

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

Active对于一个字段意味着什么?某个字段是否暂时无效?再考虑搬到另一张有日期的桌子。

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

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