Хранимая процедура для возврата определенных строк - PullRequest
0 голосов
/ 29 февраля 2012

Я разрабатываю систему встреч, в которой есть следующие таблицы (см. Прилагаемую картинку). Таблица tblScheduleDates имеет некоторые фиксированные даты встреч в течение года, которые вводятся в начале года, например, 28/02/2012,1 / 03 / 2012,4 / 3/2012 и т. Д., А tblscheduleTimes имеет некоторые фиксированные Время для этих встреч. Так, например, 28/02/2012 доступное время: 10: 00, 11: 00, 12: 00 и т. Д. TblBookings - это когда встреча назначается с фиксированной датой и фиксированным временем, а статус бронирования принимает значения, записанные или отменен. Я хочу попытаться написать хранимую процедуру, чтобы вернуть оставшиеся доступные даты и время из tblscheduledates и tblscheduleTimes. Поэтому я думаю, что каким-то образом нужно проверить фиксированные даты и время, если они существуют в tblbookings и не должны ли они быть возвращены хранимой процедурой. Любые идеи или помощь приветствуются Database Schema

1 Ответ

2 голосов
/ 29 февраля 2012

Связано ли ScheduleTime с ScheduleDates? Насколько вам известно, схема выглядит так, как будто у вас будет МНОГО дублирующих данных или просто неверные данные.

Похоже, ваше отображение PK / FK времени и даты не отображается правильно. Ссылка указывает тип времени. Но в расписании есть timetimeid?

Если значения верны:


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 раз, когда действительно разные времена.

  • Почему бы не привязать бронирование к расписанию И расписанию? Это также значительно упростит ваш запрос.

  • Или, может быть, у вас есть таблица сопоставления запланированной даты и времени, которая связывает их вместе, и тогда вам нужно только сослаться на эту одну таблицу в бронировании?

  • Или вы можете просто хранить дату и время вместе в одной таблице?

Может быть, есть деловая причина, по которой я скучаю.

...