Для моего веб-приложения мне нужно обрабатывать запросы доступа. Запросы вводятся в течение понедельника по воскресеньям, указывая часы на каждый день. Расписание на этой неделе может повторяться до 52 раз. Пользователь может иметь несколько расписаний в течение недели (пн 8-9 и мон 10-11) Существуют следующие требования:Хороший способ справиться с временем и временем?
- Searchable/фильтруемых
- Detect перекрывающихся запросов
Я хочу базу данных для обработки как можно большего количества подъема. Сейчас единственный дизайн, о котором я могу думать, - это хранение доступа каждого дня в виде отдельной записи. Сделав это, я бы вытащил все обращения для пользователя и цикла, чтобы определить, перекрывается ли новый запрос. Для этого требуется код или хранимая процедура.
Кто-нибудь имеет лучшую идею модели базы данных или чистый способ справиться с перекрытиями в коде?
«Записи» отдельных дней очень примитивны, а не нормализованы. Как насчет повторяющихся событий и 52 недель? Как насчет повторяющихся событий (никто не будет рад повторению вручную), а 52 недели? Что относительно заказов, которые пересекают границу дня (с 23:00 до 01:00)? которые пересекают границу недели? Сначала вам нужно сначала сделать какую-то работу. Не разумно ожидать от людей предоставления полной модели данных для этого. Да, у меня есть полный DM, работающий в Production, но нет, он коммерческий. – PerformanceDBA
Мне не нужна полная модель данных. Я не администратор базы данных, и я хочу сделать шаг в правильном направлении. За исключением сериализации данных, у меня сейчас нет идеи о том, как именно нормализовать. Гранулярность должна быть только до минуты, но все вещи, о которых вы упомянули, являются очень хорошими вопросами. Спасибо, я буду думать об этом – ryan
Хорошо. Я не использую метод Colin (BETWEEN и т. Д. Приведет к рабочему столу и будет медленным), но я могу заверить, что для кода SQL или производительности нет проблем, используя таблицу Normalized (zero duplication), в которой хранятся MeetingStartTime и MeetingDuration. То есть. «Пролеты» не сохраняются; всего одна строка на фактическое собрание; пустые или конфликтующие блоки могут быть легко идентифицированы. «Пролеты» и повторяющиеся события - это проекции. – PerformanceDBA