存储过程以返回特定行

时间:2012-02-28 21:47:59

标签: sql sql-server-2005 stored-procedures

我正在开发一个预约系统,其中包含以下表格(参见附图)。表tblScheduleDates在年初输入的年份中具有一些固定日期,例如28/02 / 2012,1 / 03 / 2012,4 / 3/2012等,并且tblscheduleTimes有一些固定的日期这些约会的时间。因此,例如在2012年2月28日,可用时间是10:00,11:00,12:00等.TblBookings是在预定的时间,固定日期和固定时间和预订状态采取预定值或取消。我想尝试编写一个存储过程来从tblscheduledates和tblscheduleTimes返回剩余的可用日期和时间。因此,我想如果它们存在于tblbook中并且它们不是由存储过程返回的话,必须检查固定的日期和时间。欢迎任何想法或帮助Database Schema

1 个答案:

答案 0 :(得分:2)

ScheduleTime是否与ScheduleDates相关联?就你所拥有的模式而言,你似乎要么拥有大量重复数据,要么只是错误的数据。

看起来您的PK / FK时间映射无法正确显示。链接点类型为时间。但是,scheduletimeid在预定中?

如果值合适:


SELECT tblScheduleDates.*, tblScheduleDates.* 
FROM tblScheduleDates
    JOIN tblScheduleTimes
        ON tblScheduleTimes.scheduleTimeID =
            tblScheduleDates.scheduleTime_ID
WHERE NOT EXISTS 
    (
        SELECT 1 
        FROM tblBookings 
            JOIN tblBookingStatus
                ON tblBookingStatus.Status = 'Booked'
        WHERE tblBookings.ScheduleDate_ID 
            = tblScheduleDates.scheduleDateID
    ) 

我建议重命名表,因为它似乎真的是一个混合在一起的日程安排日期和时间。类似于我下面的第二个子弹的解决方案将解决这种误解。

如果图中的链接是正确的:


也许我错过了什么,但这就是我所看到的:

预订表仅与预定日期挂钩。但是,此计划日期具有与时间关联的类型。这样你可以拥有一整天的日程表吗?否则,每个28/02/2012的预订都需要创建一个新的SchedulDates条目。那么,你可以在同一个日期有5行,只是因为它们有不同的时间?我认为不需要在不同的时间存储5个不同的时间。

  • 为什么不将预订与预定和安排时间联系起来?这也将使您的查询更容易。

  • 或者,您可以使用一个映射表,该映射表是将两者联系在一起的scheduleddate,然后您只需要在预订中引用该表吗?

  • 或者,您可以将日期和时间一起存储在一个表中?

可能有一个我缺少的商业原因。