powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Опять проблемы с незнанием :((( (два типа времени)
25 сообщений из 86, страница 3 из 4
Опять проблемы с незнанием :((( (два типа времени)
    #32641711
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
VaranНечего из непрерывности дискретность получать без видимой причины.

дискретность все равно останется по общему делителю - минуте
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641718
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
YBWвремя урока/занятия считают часами (академическими - минута * 45, по-часовая оплата - минута * 60 <вот вам два типа времени>)
Автор имеет в виду не это. А занятия в 1 час и в 2 часа.

YBWкак проверять - десятый вопрос
Но это именно тот вопрос, который в этом топике задан.
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641731
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
Владимир Саныч YBWвремя урока/занятия считают часами (академическими - минута * 45, по-часовая оплата - минута * 60 <вот вам два типа времени>)
Автор имеет в виду не это. А занятия в 1 час и в 2 часа.

YBWкак проверять - десятый вопрос
Но это именно тот вопрос, который в этом топике задан.

ИМХО танцевать нужно от печки...

ИМХО не имеет значения что имеет в виду автор, если он сделал ошибку в выкладках на первом-втором уже шаге.

все следствия из неверной посылки неверны.

все выводы базирующиеся на неверных выводах неверны - как следствие.

ошибочным путем можно идти почти так же долго как и верным

смысл?

зы

немножко более hot чем хотелось-бы, но так мало времени... извините...
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641734
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
YBWИМХО не имеет значения что имеет в виду автор, если он сделал ошибку в выкладках на первом-втором уже шаге.

все следствия из неверной посылки неверны.
Да, это так. Но постановка-то задачи дана свыше, не нам ее менять.
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641833
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, назвался груздем – лезу… То есть садюсь умничать.
И, хотя «базенку» не выложу – по причине полной моей недееспособности на сей предмет – не умею, я словей вместо этого напишу… С постраничной выдачей. С разложением, слегка отличающимся от дневного (в сторону упрощения, определяемого характером задачи).


вот пару только предварительных наблюдений
1)
автор
как проверять - десятый вопрос


Мда… И это говорит поборник нормализации и защитник Кодда…
А ЗАЧЕМ тогда про реляционные связи?


2)
автордискретность все равно останется по общему делителю - минуте
мне лично поразительно было бы самому читать все что дальше будет написано. Поскольку в цитированной фразе сказано ВСЕ., что дальше проистечет на нескольких страницах.
Позволю же все-таки "вывалить" нижеследующее по двум причинам
1) Санычу обещал, что спою.
2) Не всякий "автор" понимает насколько велик. У меня во всяком случае не сложилось ясного представления, что автор вышецитированнолй гениальной фрази кристально-отчетливо понимает смысл им же самим сазанного.
(Пардон - все дальнейшее почти исключительно из графоманских побуждений)

----------------

Начнем, покурив и оправившись.
По возможности будем следовать разложению от YBW, с необходимыми упрощениями и исправлениями.
Денормализации в этой задаче (мне) не избежать. Здесь это будет не столько метод ускорения поиска/сокращения объема хранилища, сколько метод упрощения пользовательского интерфейса в «духе Акцесс». Первая денормализация достается по наследству – «справочника» «предметов занятий помещения», следуя образцу, не заводим, считая причину занятия помещения «неклассифицированным строковым доменом». Простых справочника остается два - tblGroup, в котором кроме id нас ничего интересовать не будет, и tblLocation, в котором тоже есть id.

Можно переходить к расписанию – tblSchedule.
В нем определенно есть:
- id – в терминологии YBW – идентификатор события (расписания)
- groupID – идентификатор группы – вписан сюда по причине, которая будет прояснена ниже (возможно неявно).

Ну а дальше? Кто чего нарисует? LocationID – идентификатор помещения - будем сюда вписывать или нет?.
Прежде чем дать свой ответ, сделаю большое отступление.
Поговорим о пресловутом времени.
Атрибутный домен, в том числе «время» в «sql-базах» определяется как множество, на котором, как правило, определено отношение порядка: ([«Иванов» < «Ивановский»] - (с) Саныч) и отношение равенства («Иванов» = «Иванов»). В этом смысле, стандартный домен образует простое (быть может - упорядоченное) множество точек. Наличие «нормализующего справочника», ограничивающего множество допустимых значений, означает еще и нумерацию – развешивание целых чисел. «Поддержка целостности через ФК и УИ» сводится к проверке наличия числа в таком «справочнике». Для реализации которой как раз достаточно определения отношений равенства и порядка. Что и позволяет им с успехом работать (уникальным индексам и внешним ключам).
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641834
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В «нашей» задаче по постановке требуется на этапе ввода данных проверять «занятость» помещения. Занятость естественным образом формулируется в терминах попадания (пробного МОМЕНТА времени) в (занятый) ИНТЕРВАЛ

Время как множество точек («простой» домен datetime – определяющий множество мгновений, а не интервалов) для данного случая недостаточно, поскольку НЕОБХОДИМО определить как минимум отношение принадлежности. А, может быть, еще и операцию пересечения. То есть операции характерные для множеств а не для значений. Второе умение (определять пересечения) может быть представлено как выводимое из первого (определять попадание точки в интервал ).

Если окажется под рукой такой механизм поддержки интервалов, который позволит решить задачу «проверки» (= поддержки целостности) интервалов на включение/пересечение, с использованием стандартных механизмов уникальных индексов и внешних ключей, то это, как минимум, облегчит программирование соответствующих пользовательских интерфейсов. Позволю себе думать, что в этом заключался (сакраментальный) вопрос Саныча – «Как проверять?».
Поскольку работают желанные нам индексы и внешние ключи на «точечных» доменах, то и нашу интервальную задачу рано или поздно придется ПРИВЕСТИ к «точечному виду в множественном выражении».
Интервал (времени) – это самостоятельная сущность. В общем случае, требующая самостоятельного определения. Разнотипность (в смысле масштаба, например) наблюдаемых интервалов времени определяется разнотипностью привязанных к ним событий. Все они (наблюдаемые интервалы) наложены на физическое время.
Получаем следующий предварительный итог_1. Чтобы «заработали» средства «проверки», предоставляемые (реляционной) СУБД – интервалы надо перенумеровать. Чтобы не потерять привязку к физическому времени – его тоже ПРИДЕТСЯ перенумеровать – свести к ЦЕЛЫМ числам. При наличии разномасштабных интервалов физическое время придется квантовать величинами, не крупнее самого мелкого из интересующих интервалов. Дробление физического времени на интервалы осуществляется в календарных таблицах. Наложение логических (=событийных, =наблюдаемых) интервалов на (квантованное) физическое время осуществляется в квалендарных таблицах. Квалендарные таблицы – это таблицы, определяющие временную последовательность «проведенных наблюдений», отображающую логические интервалы наблюдений на физическое время. Дневную шутку оставляю здесь как термин, предлагая считать в рамках данного опуса составным словом - квалендарных=квази+календарных.
-))
В простых (учетных) задачах наблюдаемые интервалы а) вложенные, и, б) события , как правило, естественным образом привязываются к самому мелкому логическому интервалу. Дробление физического времени имеет соответствующий шаг. В «нашей» задаче дробить физическое время придется мельче самого мелкого логического интервала. Указанное дробление позволяет (полу)автоматически решить задачу «проверки».
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641835
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ближе к баранам.
Пусть в нашей задаче определены два типа интервалов – «стандартная пара» и «часовое занятие».( В действительности задачу катастрофически упрощает предположение о наличии по крайней мере еще одного расписания – расписания звонков, но мы не будем этого требовать). Предположим, мы хотим обеспечить ввод времени оператором с точностью до минуты и не знаем ничего, кроме того, что интервал занятости имеет тип1 (длительность в единицах использованного шага дробления физического времени (минутах) известна и является реквизитом соответствующего логического интервала) и тип2. Весь объем наблюдаемого времени укладывается в неделю, поэтому для (поминутного) квантования физического времени потребуется не более 10080 значений (= записей).
Наблюдать нам, кроме как за занятостью помещений, больше не за чем.
Поэтому сам интересующий нас логический интервал будем представлять в (единственной) (квалендарной) таблице с составным первичным ключем tblOccupation следующей структуры.

- timePoint – integer – метка деления времени. Первое поле Первичного ключа – номер минуты в неделе
- LocationID – идентификатор (занятого) помещения (номер комнаты) – Второе поле первичного ключа.
- EventID – идентификатор события (элемент расписания) – FK на ID таблицы tblSchedule
С заявленным КАСКАДНЫМ УДАЛЕНИЕМ. При удалении ведущей строки из tblSchedule СУБД должна гарантировать удаление всех строк из tblOccupation.

У tblOcupation тройное назначение – она совмещает в себе 1) функции календарной таблицы, разбивающей физическое время (timePoint – PK), 2) является продолжением таблицы tblSchedule – в ней живет хвост элемента расписания, только разложенный на 3) ВРЕМЯ ЗАНЯТОСТИ ПОМЕЩЕНИЯ – квалендарное описание интервала наблюдения.

Работает tblOccupation в паре с tblSchedule следующим образом:
Оператор вводит время начала события и длительность (как справедливо настаивают критики), которая может быть выбрана из «справочника допустимых интервалов» (не рассматриваем) .
[
В целях упрощения программирования интерфейса немедленно проводим денормализацию таблицы tblSchedule, вводя в нее поля, соответствующие вводимым оператором значениям. ( по вкусу – например
-numDayOfWeek – integer – день недели
-inervalTypeID – integer – тип интервала – определяет его длительность, так или иначе пересчитанную в минуты.
-IntervalTimeStart – Date – физический момент старта наблюдаемого интервала.
)
На заявленных 3х полях хорошо определяется индекс, определяющий правильность заполнения элемента расписания. Правильность для последующий генерации занятого интервала.
]
(Например) на afterInsert в форме, заполняющей элемент расписания, генерируется (в цикле, содержащемся в той же транзакции) гроздь записей в tblOccupation.
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641837
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Желанные проверки выполняются автоматически –
Insert в tblOccupation провалится, если там уже найдется хотя бы одна строка из вновь сгенерированного диапазона для данного помещения. Автоматом выполнились провеки на включение в диапазон и на пересечение множеств.
При удалении записи из ведущей таблицы – каскадно удаляются записи из ведомой, освобождая тем замым помещение.
Остается возможность провести исправление – перетереть ранее произведенное занятие, однако в общем случае апдейт здесь выглядит вырожденно, полностью заменяясь комбинацией делет-инсерт.

За сим, - закругляюсь с дополнительными извинениями.


ЗЫ0 С одной стороны - данной задаче (применились) множественные упрощения(=оптимизации). Не всегда так хорошо получается.
С другой стороны – очевидно что «SQL разложения интервалов» разочаровывающее ресурсоемки в смысле объемов , а значит на больших задачах – рано или поздно времени обработки. Выводы и следствия отсюда без меня очевидны. (Честно говоря не совсем понимаю- зачем все это писал. Буду считать – что на понт повелся)


ЗЫ1
Конечно, можно было вместо всех словей - отправить к техническим мануалам. Однако там ТАКИХ словей, наверно, не нашлось бы… Впрочем, как тут пишут – не четал.

)))

ЗЫ2
Zhaina – боюсь в качестве «реферата» сии словья не сгодятся – погонют… И правильно сделают.

ЗЫ3 нашедшие силы дочитать до конца могут начинать смеяться…
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641892
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Браво,Victosha!
Непонятно,но здорово!
«неклассифицированный строковый домен»- сильно (а что это значит?)
Кодд и Дейт отдыхают!
Особенно понравилось -"нашедшие силы дочитать до конца могут начинать смеяться…" Полностью поддерживаю :)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641972
Zhaina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего себе Не ожидала такого... Молодцы, ребята!!! С вами не соскучишься! Спасибо :)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32641985
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда :(

Что требуется автору, я понял (благодаря Санычу)
- занятие может обычное (час) или спаренное (пара)
- знаем начало занятия
- народ еще предложил вычислять окончание занятия (я согласен)

А вот что вконце понакатали - просто сил не хватило дочитать :( (моральных)

Таки вопрос еще открыт?

А вчем проблема опредления пересечения временных интервалов?
Вариант для математиков :)

Код: plaintext
1.
2.
3.
4.
5.
6.
% - знак интервала
len() - функция вычисляющая продолжительнось интервала времени

(beg1 % end1) (первый интервал)
(beg2 % end2) (второй интервал)

len(min(beg1, beg2) % max(end1, end2)) < len(beg1 % end1) + len(beg2 % end2)
Если выражение верно, значит интервалы пересекаются :)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642025
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Постановка задачи дана свыше
Мне кажется, что это тот случай, когда надо менять постановку. Пусть занимаются по парам, как все нормальные люди.
Чтобы убедится в нелепости этой задачи, просто представьте себе распечатку получившегося расписания. Спорим, без пузыря ни один студент свою аудиторию не найдет.
Я подозреваю, что надо два расписания.
Одно- для пар, другое для часов.
И отдельно проверку пересечений
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642170
Zhaina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, дамала никогда не буду писать проги на Бэйсик... Теперь придется, руководитель заставляет, т к сам говорит что "знает"... мда, взвалил всё на нас с коллегой(как уже заметили) Честно, ни одну функцию на Бэйсик не знаю...только мой любимый Паскаль, Си. Так что только с вашей оющей помощью все получается потихоньку... Спасибо огромное еще раз... С индексами разобралась... Спасибо Санычу!
papromeТаки вопрос еще открыт?

А вчем проблема опредления пересечения временных интервалов?
Вариант для математиков :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
% - знак интервала
len() - функция вычисляющая продолжительнось интервала времени

(beg1 % end1) (первый интервал)
(beg2 % end2) (второй интервал)

len(min(beg1, beg2) % max(end1, end2)) < len(beg1 % end1) + len(beg2 % end2)
 
 
Если выражение верно, значит интервалы пересекаются :)

Моя любимая математика!
Вот, как и где теперь это все написать? Что при введении накладки времени выдавало ошибку?
Victosha
2) Не всякий "автор" понимает насколько велик. У меня во всяком случае не сложилось ясного представления, что автор вышецитированнолй гениальной фрази кристально-отчетливо понимает смысл им же самим сазанного.

Просто прошу совета как легче было бы сделать и лучше...
Да кстати, дурацская таблица времени которая связана 1:М...
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642221
глупый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zhaina Victosha
2) Не всякий "автор" понимает насколько велик. У меня во всяком случае не сложилось ясного представления, что автор вышецитированнолй гениальной фрази кристально-отчетливо понимает смысл им же самим сазанного.

Просто прошу совета как легче было бы сделать и лучше...
Да кстати, дурацская таблица времени которая связана 1:М...

программно проверить занятость на такой табле можно примерно следующей ф-цией

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Function IsIntervalOccupied(startTime As Date, duRation As Long) As Boolean
  Dim vCount
  Dim tCount As Long
  Dim lastTime As Date
   'добавляем количество минут 
  lastTime = DateAdd("n", duRation, startTime)
  vCount = DCount("[код времени]", "Таблица", _
  "(" & Str(CDbl(startTime)) & " BETWEEN [начало занятий] AND [конец занятий] ) OR" & _
  "(" & Str(CDbl(lastTime)) & " BETWEEN [начало занятий] AND [конец занятий]  )")
  tCount = Nz(vCount,  0 )
  IsIntervalOccupied = tCount >  0 
End Function

1) не проверял - будет ли работать
2) я говорил немного о друном
3) отвечать в течении дня вряд ли смогу. Может вечером - новую песню спою...
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642262
Zhaina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
глупый
1) не проверял - будет ли работать
2) я говорил немного о друном
3) отвечать в течении дня вряд ли смогу. Может вечером - новую песню спою...
Спасибо! Попробую внедрить...
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642288
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
paparomeЕсли выражение верно, значит интервалы пересекаются :)
А теперь осталось написать селект, который проверяет по этой формуле все записи попарно.
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642293
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ZhainaСпасибо Санычу!
А фотку? :^)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642360
Zhaina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
madgЧойто случилось...
-Кромсает базу
-Ищет фотку
-Обиделась нафиг...

Ну, если последнее, то точно здря...


СанычА фотку? :^)

Фотку как только найду...
Но сначала покрамсаю базу
или обидеться нафиг?
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642365
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Zhainaили обидеться нафиг?
Не надо. Я же улыбнулся. :^)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642373
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч paparomeЕсли выражение верно, значит интервалы пересекаются :)
А теперь осталось написать селект, который проверяет по этой формуле все записи попарно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select t1.id, t1.beg, t1.end, t2.id, t2.beg, t2.end
from tbl1 as t1 inner join tbl1 as t2
on ([здесь доп. условие связки (например по дню недели)])
and
(
(iif(t1.end>t2.end, t1.end, t2.end) - iif(t1.beg<t2.beg, t1.beg, t2.beg))
<
((t1.end - t1.beg) + (t2.end - t2.beg))
)

Что-то в этом духе :)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642395
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А! Eще забыл убрать из этого списка "самопересечения"
Код: plaintext
1.
2.
...
and
(t1.id <> t2.id)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642523
интервал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Zhaina

предложенная глупым функция IsIntervalOccupied работать не будет, так как больший интервал покрывает меньший с перехлестом.
Так что, пробовать реализовывать не надо.
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642640
2 paparome

Как интервал, осмелюсь доложить, что Вы в своей математической модели не хотите обратить внимание на то, что интервал, по крайней мере - времени, в обсуждавшемся контексте, по существу представляет собой НЕ число, а одномерный вектор. Вы совершенно прошли мимо этого факта, на который уважаемый YBW неоднократно и специально указывал.
Позвольте объявить ваше моделирование неадекватным предметной области.

:-))
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642937
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зевающий интервал2 paparome

Как интервал, осмелюсь доложить, что Вы в своей математической модели не хотите обратить внимание на то, что интервал, по крайней мере - времени, в обсуждавшемся контексте, по существу представляет собой НЕ число, а одномерный вектор. Вы совершенно прошли мимо этого факта, на который уважаемый YBW неоднократно и специально указывал.
Позвольте объявить ваше моделирование неадекватным предметной области.

:-))
Прошу пардона, но я не понял вашего утверждения :(

Вектор - хорошо, дык у меня интервал и задается ДВУМЯ переменными (начало и конец)
Кто сказал, что у вектора нельзя посчитать его скалярный размер? |вектор|

PS: Критику, плиз, по существу!!! Что и как не будет работать в моем примере - потом и подумаем как это исправить :)
...
Рейтинг: 0 / 0
Опять проблемы с незнанием :((( (два типа времени)
    #32642982
сбрендил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 paparome
сбрендил я.
Все словья забрал назад, и больше не отдам.
прошу пардону.
Видно - левый глаз косит.
...
Рейтинг: 0 / 0
25 сообщений из 86, страница 3 из 4
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Опять проблемы с незнанием :((( (два типа времени)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]