Во-первых, я пометил этот вопрос как независимый от языка, но я использую PHP и MySQL. Это не должно сильно влиять на сам вопрос.
Я создаю приложение, которое показывает время определенных шоу в течение недели. Каждое шоу повторяется (еженедельно), и могут быть шоу, которые будут транслироваться в течение 2 дней, например. начиная с воскресенья в 23:30 и заканчивая в понедельник в 00:30. Я храню начало шоу (день недели - понедельник, вторник ... - это никогда не бывает точной даты; время) и продолжительность. Никогда не было шоу, которое заняло бы больше 24 часов.
Моя проблема с проверкой, если новые добавленные шоу не перекрывают некоторые старые. Особенно, если речь идет о шоу в воскресенье-понедельник.
Как такие повторяющиеся события обычно обрабатываются как на стороне БД, так и на стороне сервера?
tl; dr версия с вещами, которые я рассмотрел
Моей первой идеей было создать собственный алгоритм проверки, но он казался слишком громоздким и сложным. Не то чтобы я скулил о сложных решениях, сделанных вручную, но мне интересно, нет ли чего-то более базового, что я упускаю.
Другой альтернативой, которая пришла в голову, было изменение структуры таблицы, чтобы использовать дату и время (вместо «день недели» и «время»), и использовать фиктивный фиксированный диапазон дат для хранения данных. Например, все понедельники будут установлены на 5 января 1970 года, а воскресенья - на 11 января 1970 года. Из этого правила будет одно исключение - если будет какое-то шоу, которое начнется в воскресенье и закончится в понедельник, оно будет сохранено как 12 января 1970. Это решение позволило бы более гибко запрашивать БД, чем исходное, и оно также упростило бы запросы для показов, которые перекрываются между отдельными неделями (поскольку мы можем сделать сравнение непосредственно в запросе). У этого решения также есть некоторые недостатки (например, использование фиктивных дат может привести к путанице).
Оба решения для меня пахнут неверными алгоритмами, и хотелось бы услышать мнения более опытных коллег-разработчиков.