【问题标题】:Stored Procedure to return specific rows返回特定行的存储过程
【发布时间】:2012-02-28 21:47:59
【问题描述】:

我正在开发一个约会系统,它有以下表格(见附图)。表 tblScheduleDates 有一些在年初输入的年内约会的固定日期,例如 28/02/2012,1/03/2012,4/3/2012 等,并且 tblscheduleTimes 有一些固定的日期这些约会的时间。因此,例如在 2012 年 2 月 28 日,可用时间为 10:00、11:00、12:00 等。tblBookings 是指安排预约采用固定日期和固定时间,并且预订状态采用预定值或取消。我想尝试编写一个存储过程来从 tblscheduledates 和 tblscheduleTimes 返回剩余的可用日期和时间。所以我想以某种方式必须检查固定的日期和时间是否存在于 tblbookings 中,以及它们是否不被存储过程返回。欢迎任何想法或帮助

【问题讨论】:

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


    【解决方案1】:

    ScheduleTime 是否与 ScheduleDates 相关联?就您所拥有的架构而言,您似乎要么有很多重复数据,要么只是简单的错误数据。

    您的时间到日期的 PK/FK 映射似乎没有正确显示。链接指向时间类型。但是,scheduletimeid 在 scheduleates 中吗?

    如果值正确:


    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
        ) 
    

    我建议重命名表格,因为它似乎真的是一个时间表日期和时间混合在一起。类似于下面我的第二个项目符号的解决方案将解决此错误命名。

    如果图中的链接是对的:


    也许我遗漏了什么,但这是我所看到的:

    预订表仅与预定日期相关联。但是,此预定日期具有与时间相关的类型。这是为了让您可以拥有一个全天时间表的类型吗?否则,2012 年 2 月 28 日的每次预订都需要在 SchedulDates 中创建一个新条目。那么,您可以在同一日期有 5 行,只是因为它们有不同的时间?我认为没有必要将日期存储 5 个不同的时间,因为实际上是不同的时间。

    • 为什么不将预订绑定到预定和预定时间?这也将使您的查询更容易。

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

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

    不过,也许我错过了一个商业原因。

    【讨论】:

    • 无论如何我认为你应该在这两种情况下都给出答案。通过实际的图表,如果不是你的图表,你就没有回答 OP 的问题
    • 有时最好不要盲目回答,而是找出问题背后的原因。如果发现问题,则需要提出。传播错误的东西似乎是不对的。也许,随着架构变得更易于管理,这将是向 pikk 提供答案的不同方向
    • 在看到图表与实际列不匹配后,我刚刚更新了我的答案。它看起来像我建议的那样设置,但链接绘制不正确。
    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    相关资源
    最近更新 更多