Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 1 / 1
Регистрация: 30.04.2020
Сообщений: 39
1

Система бронирования времени для пациентов поликлиники

11.01.2021, 21:49. Показов 1084. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Реализую базу данных поликлиники и возник такой теоретический вопрос:
Есть различные врачи со своим индивидуальным графиком работы, допустим в пн с 8-12, во вт с 14-18 и т.д.
Для того чтобы пациенты не толпились в очередях хочется реализовать систему бронирования к определенному времени в заданном промежутке, а для этого необходимо разбить данный интервал на блоки среднего времени приема (допустим 30 минут), чтобы можно было ставить флажки свободно/занято ли это время.
Но если данные интервалы делать для каждого врача на каждый рабочий день, тогда количество записей в базе будет довольно объемным и меня это очень сильно смущает.
Я искала решения данной задачи, но более рационального способа так и не нашла, поэтому решила обратится к вам, форумчане, возможно кто-то сталкивался с подобной задачей, буду благодарна за любое мнение по данному вопросу, спасибо)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2021, 21:49
Ответы с готовыми решениями:

База данных пациентов электронной картотеки пациентов поликлиники
Дамы и господа, нужна Ваша помощь! Составил вот такую схему (скрин). Для начала попробую описать...

Разработать информационную систему электронной картотеки пациентов поликлиники
Необходимо разработать информационную систему электронной картотеки пациентов поликлиники....

Автоматизация учёта пациентов в регистратуре поликлиники или учет успеваемости студентов - что проще?
Всем привет! Подскажите, пожалуйста, какую ИС на c# в Windows forms проще создать: Автоматизация...

Информационная система для регистратуры поликлиники
Информационная система для регистратуры поликлиники. Информационная система для регистратуры...

11
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
11.01.2021, 21:56 2
Цитата Сообщение от leramarsel Посмотреть сообщение
Но если данные интервалы делать для каждого врача на каждый рабочий день, тогда количество записей в базе будет довольно объемным и меня это очень сильно смущает.
Для СУБД это мизерный объем.
1
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,375
12.01.2021, 01:10 3
Цитата Сообщение от leramarsel Посмотреть сообщение
Для того чтобы пациенты не толпились в очередях хочется реализовать систему бронирования к определенному времени в заданном промежутке
Мысль верная, но на практике неприменимая. График этот расползется в первый же день, кабинет на проветривание закроют не на 15 минут, а на пол-часа и не в положенное время, а когда получится. Чаек попить к коллеге сходить на пол часика - святое дело, пообщаться по телефону минут 25 обязательно, а потом обсудить с коллегой еще минут на 15 и все - нет графика, снова очередь. И это при условии, что врач вышел вовремя, есть подмена и т.д.
0
2 / 1 / 1
Регистрация: 30.04.2020
Сообщений: 39
12.01.2021, 02:09  [ТС] 4
Пытливый, В этом плане твоя цитата
Цитата Сообщение от Пытливый Посмотреть сообщение
Владимир Костров(c) "Жизнь такова, какова она есть, и больше - никакова"
очень подходит)
Но я столкнулась с нереальностью исполнения уже на уровне реализации этих интервалов
По сути мне нужно получив начальное время, конечное время и интервал разделить их на несколько строк с одним id врача и одним днем недели
Попробовала создать хранимую процедуру для этой цели, но столкнулась с ошибкой:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE PROCEDURE dbo.timeint
@dts time,
@dte time,--Тип данных аргумента time недопустим для аргумента 2 функции dateadd.
@dtapp time
AS
BEGIN
 
DECLARE @dtnext time
DECLARE @dtTable TABLE (dt time)
 
IF NOT @dts>=@dte
BEGIN
    SET @dtnext=@dts
    WHILE @dtnext<=@dte
    BEGIN
    insert into @dtTable
    SELECT @dtnext
    SET @dtnext=DATEADD(Hour,@dtapp, @dtnext)
    print @dtnext
    END
    END
    END
Как я поняла, нельзя без привязки к дате производить вычисления со временем, а вручную эти интервалы заполнять заколебешься, поэтому сижу, думаю что делать

Добавлено через 24 минуты
Переделала, получила какие-никакие интервалы
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ALTER PROCEDURE dbo.timeint
@dts time(0),
@dte time(0),
@dtapp int
AS
BEGIN
 
DECLARE @dtnext time
DECLARE @dtTable TABLE (dt time(0))
 
IF NOT @dts>=@dte
BEGIN
    SET @dtnext=@dts
    WHILE @dtnext<=@dte
    BEGIN
    insert into @dtTable
    SELECT @dtnext
    SET @dtnext=DATEADD(Minute,@dtapp, @dtnext)
    print @dtnext
    END
    END
    END
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
12.01.2021, 10:01 5
не очень понятно зачем такие интервалы делать именно на каждый день

допустим таблица предполагаемых посещений
ID врача\ID пациента\Дата\Время начала

Время брать из одной (для выходных,праздников,сокращенного дня сделать другую) предрасчетной таблицы

Так вы получите предполагаемую занятость каждого врача на каждый день.
Ну а далее уже сам врач\сестра должен заполнять кто у него и сколько пробыл исходя из количества записанных и очереди
0
2 / 1 / 1
Регистрация: 30.04.2020
Сообщений: 39
12.01.2021, 12:06  [ТС] 6
qwertehok, потому что в таблице предполагаемых посещений может возникнуть ситуация, когда несколько пациентов записались на одну дату и время, которая уже занята. Интервалы приема нужны изначально, чтобы человек пришел к конкретному времени в конкретную дату, а не стоял в очереди по несколько часов (а.к.а. электронная очередь)
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,375
12.01.2021, 12:34 7
Как я понял, вам нужно что-то типа такого?
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
set dateformat dmy;
declare @Patient as int, @Date as varchar(20), @w as varchar(30), @WeekDay as int, @Doctor as varchar(20)
 
set @WeekDay = 0
while @WeekDay < 5
begin
    select @Date = Convert(varchar(10), DateAdd(day, @WeekDay, '11.01.2021'), 104), @Patient = 0
    while @Patient < 16
    begin 
        if @Patient < 8 
           begin
           set @w = Convert(datetime, DateAdd(minute, @Patient*30, @Date + ' 08:00'), 104)
           set @Doctor = 'Петрова'
           end
        else
           begin
           set @w = Convert(datetime, DateAdd(minute, (@Patient+4)*30, @Date + ' 08:00'), 104)
           set @Doctor = 'Иванова'
           end
        print Cast(@Patient+1 as varchar(2)) + ' ' + datename(weekday, @w) + ' ' + @w + ' ' + @Doctor           
        set @Patient = @Patient + 1
    end
    set @WeekDay = @WeekDay + 1
end
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
12.01.2021, 13:42 8
Цитата Сообщение от leramarsel Посмотреть сообщение
Интервалы приема нужны изначально, чтобы человек пришел к конкретному времени в конкретную дату, а не стоял в очереди по несколько часов (а.к.а. электронная очередь)
так я не против интервалов, я не понимаю зачем они нужны заранее

вот в мою таблицу добавляете строки и никто у вас не запишется на одно и то же время, и к одному и тому же врачу
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
12.01.2021, 13:51 9
leramarsel, сделайте функцию генерации интервалов и используйте ее в запросах по необходимости
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create function dbo.fnGenerateIntervals
(
 @start_date datetime,
 @end_date datetime,
 @interval_in_minutes int
)
returns table
as
return (
 with t (dt) as
 (
  select @start_date
  union all
  select dateadd(minute, @interval_in_minutes, t.dt) from t where t.dt < @end_date
 )
 select dt from t
);
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,375
12.01.2021, 13:58 10
Цитата Сообщение от invm Посмотреть сообщение
сделайте функцию генерации интервалов и используйте ее в запросах по необходимости
Собственно это я и показал чуть выше. Получаем такой результат на неделю для одного кабинета:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
1 Monday Jan 11 2021  8:00AM Петрова
2 Monday Jan 11 2021  8:30AM Петрова
3 Monday Jan 11 2021  9:00AM Петрова
4 Monday Jan 11 2021  9:30AM Петрова
5 Monday Jan 11 2021 10:00AM Петрова
6 Monday Jan 11 2021 10:30AM Петрова
7 Monday Jan 11 2021 11:00AM Петрова
8 Monday Jan 11 2021 11:30AM Петрова
9 Monday Jan 11 2021  2:00PM Иванова
10 Monday Jan 11 2021  2:30PM Иванова
11 Monday Jan 11 2021  3:00PM Иванова
12 Monday Jan 11 2021  3:30PM Иванова
13 Monday Jan 11 2021  4:00PM Иванова
14 Monday Jan 11 2021  4:30PM Иванова
15 Monday Jan 11 2021  5:00PM Иванова
16 Monday Jan 11 2021  5:30PM Иванова
1 Tuesday Jan 12 2021  8:00AM Петрова
2 Tuesday Jan 12 2021  8:30AM Петрова
3 Tuesday Jan 12 2021  9:00AM Петрова
4 Tuesday Jan 12 2021  9:30AM Петрова
5 Tuesday Jan 12 2021 10:00AM Петрова
6 Tuesday Jan 12 2021 10:30AM Петрова
7 Tuesday Jan 12 2021 11:00AM Петрова
8 Tuesday Jan 12 2021 11:30AM Петрова
9 Tuesday Jan 12 2021  2:00PM Иванова
10 Tuesday Jan 12 2021  2:30PM Иванова
11 Tuesday Jan 12 2021  3:00PM Иванова
12 Tuesday Jan 12 2021  3:30PM Иванова
13 Tuesday Jan 12 2021  4:00PM Иванова
14 Tuesday Jan 12 2021  4:30PM Иванова
15 Tuesday Jan 12 2021  5:00PM Иванова
16 Tuesday Jan 12 2021  5:30PM Иванова
1 Wednesday Jan 13 2021  8:00AM Петрова
2 Wednesday Jan 13 2021  8:30AM Петрова
3 Wednesday Jan 13 2021  9:00AM Петрова
4 Wednesday Jan 13 2021  9:30AM Петрова
5 Wednesday Jan 13 2021 10:00AM Петрова
6 Wednesday Jan 13 2021 10:30AM Петрова
7 Wednesday Jan 13 2021 11:00AM Петрова
8 Wednesday Jan 13 2021 11:30AM Петрова
9 Wednesday Jan 13 2021  2:00PM Иванова
10 Wednesday Jan 13 2021  2:30PM Иванова
11 Wednesday Jan 13 2021  3:00PM Иванова
12 Wednesday Jan 13 2021  3:30PM Иванова
13 Wednesday Jan 13 2021  4:00PM Иванова
14 Wednesday Jan 13 2021  4:30PM Иванова
15 Wednesday Jan 13 2021  5:00PM Иванова
16 Wednesday Jan 13 2021  5:30PM Иванова
1 Thursday Jan 14 2021  8:00AM Петрова
2 Thursday Jan 14 2021  8:30AM Петрова
3 Thursday Jan 14 2021  9:00AM Петрова
4 Thursday Jan 14 2021  9:30AM Петрова
5 Thursday Jan 14 2021 10:00AM Петрова
6 Thursday Jan 14 2021 10:30AM Петрова
7 Thursday Jan 14 2021 11:00AM Петрова
8 Thursday Jan 14 2021 11:30AM Петрова
9 Thursday Jan 14 2021  2:00PM Иванова
10 Thursday Jan 14 2021  2:30PM Иванова
11 Thursday Jan 14 2021  3:00PM Иванова
12 Thursday Jan 14 2021  3:30PM Иванова
13 Thursday Jan 14 2021  4:00PM Иванова
14 Thursday Jan 14 2021  4:30PM Иванова
15 Thursday Jan 14 2021  5:00PM Иванова
16 Thursday Jan 14 2021  5:30PM Иванова
1 Friday Jan 15 2021  8:00AM Петрова
2 Friday Jan 15 2021  8:30AM Петрова
3 Friday Jan 15 2021  9:00AM Петрова
4 Friday Jan 15 2021  9:30AM Петрова
5 Friday Jan 15 2021 10:00AM Петрова
6 Friday Jan 15 2021 10:30AM Петрова
7 Friday Jan 15 2021 11:00AM Петрова
8 Friday Jan 15 2021 11:30AM Петрова
9 Friday Jan 15 2021  2:00PM Иванова
10 Friday Jan 15 2021  2:30PM Иванова
11 Friday Jan 15 2021  3:00PM Иванова
12 Friday Jan 15 2021  3:30PM Иванова
13 Friday Jan 15 2021  4:00PM Иванова
14 Friday Jan 15 2021  4:30PM Иванова
15 Friday Jan 15 2021  5:00PM Иванова
16 Friday Jan 15 2021  5:30PM Иванова
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
12.01.2021, 17:29 11
Пытливый,
извини, но не кажется что это очень избыточно?
зачем все это хранить?
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,375
12.01.2021, 17:55 12
Цитата Сообщение от qwertehok Посмотреть сообщение
извини, но не кажется что это очень избыточно?
зачем все это хранить?
Так я и не настаиваю на хранении, достаточно иметь информацию о кабинетах, врачах и их интервале работы. Выше приведенный скрипт вообще БД не использует для генерации этого графика от любой начальной даты.
0
12.01.2021, 17:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2021, 17:55
Помогаю со студенческими работами здесь

Плагин для бронирования времени по часам
Здравствуйте, подскажите пожалуйста, есть плагин для бронирования времени по календарю (по часам) -...

Плагин для бронирования даты и времени
Заранее прошу прощения если пишу не в той теме. Подскажите пожалуйста есть ли какой ни-ть...

Система бронирования билетов для html сайта
Здравствуйте. Подскажите пожалуйста, существуют ли готовые системы для бронирования авиабилетов...

Информационная система поликлиники
Народ, помогите плиз! У кого-нибудь есть лаб. работа по информационной системе поликлиники? очень...

Система бронирования
Добрый день! Мне нужно реализовать такую систему, как на этом сайте...

Система бронирования
Привет всем кто читает данную тему! Работаю в аренде авто, компания маленькая все пишем на бумаге....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru