Еженедельные Расписания - Как можно сохранить это в базе данных?

Вы можете использовать docker exec в PowerShell или CMD. Пример:

  1. Откройте PowerShell или CMD,

  2. введите: docker exec <influxdb_container_name> influx -precision rfc3339

Вы можете получить <influxdb_container_name> через docker ps|grep influxdb

10
задан Hugoware 23 December 2008 в 16:41
поделиться

5 ответов

Я рассмотрел бы для (1) использование формата, который включает, и запустите и время окончания и целочисленное поле в течение дня недели. Я знаю, что Вы заявили, что блоки всегда будут одним часом, но это может быть осуществлено Вашим кодом. Кроме того, если Ваши требования изменятся однажды, то Вы будете иметь намного меньше для волнения о на шаге (2), чем если операторы DB будут все записаны для принятия блоков 1 часа.

CREATE TABLE maintWindow (
   maintWindowId  int primary key auto_increment not null,
   startTime      Time,
   endTime        Time,
   dayOfWeek      int,
   ...

Для (2), если каждая запись имеет запуск и время окончания, связанное с ним, то очень легко проверить на окна в течение любого данного времени:

SELECT maintWindowId
FROM maintWindow
WHERE $time >= TIME(startTime) AND $time <= TIME(endTime) AND DAYOFWEEK($time) = dayOfWeek

(где $time представляет дату и время, которую Вы хотите проверить).

Разрешение или запрещение в течение каждого дня недели были бы обработаны отдельными записями. По моему скромному мнению, это более гибко, чем жесткое кодирование в течение каждого дня недели, так как Вы будете затем использовать некоторый оператор выбора или если еще переключатель для проверки правильного столбца DB в течение дня Вы интересуетесь.

Примечание: Убедитесь, что Вы знаете, какой стандарт Ваш DB использует в течение целочисленного дня недели, и попытайтесь сделать свой кодонезависимый из него (всегда спрашивают DB). У нас была большая забава с различными стандартами для запуска недели (в воскресенье или в понедельник) и начальное значение индекса (0 или 1).

10
ответ дан 3 December 2019 в 22:39
поделиться

Если это будет отличающимся каждую неделю, то настроенный таблица как это;

TABLE:
    StartTime DATETIME    PrimaryKey

Если время начала для конкретной даты/час установлено, то предположите, что она позволяется, иначе отклоните.

Если это - универсальная конфигурация в течение универсальной недели, которая не изменяет, пробует это;

TABLE:
    Hour  INT,
    Day   INT,
    Allow BIT

Затем добавьте строки для каждой комбинации часа/день.

2
ответ дан 3 December 2019 в 22:39
поделиться

Я на самом деле использовал этот дизайн прежде, в основном создавая битовый массив для отрезка времени, который Вы хотите регулярно запланировать разделенный на число периодов, которые Вы хотите. Таким образом в Вашем примере Вы хотите недельное расписание с почасовыми периодами, таким образом, у Вас будет битовый массив на 168 битов, который только 21 байт длиной. Несколько datetimes составляют 16 байтов вместе, и Вам будут нужны несколько строк их для представления возможных расписаний в течение данной недели поэтому, если Вы будете заботиться вообще о размере, я не думаю, что можно победить его.

Я признаю, что это немного более хитро для контакта с и менее гибкий, чем предыдущие предложения. Рассмотрите, хотели ли Вы внезапно использовать 1/2 периоды часа, необходимо было бы транскодировать все существующие данные к новому битовому массиву на 336 битов и распределить значения.

При использовании SQL можно или сохранить это как двоичный блог и сделать битовое жонглирование, чтобы выдержать сравнение, идет ли немного или от себя, или можно сохранить каждый бит как столбец. Поддержка SQL Server MS до 1 024 для стандарта или 30k для широких таблиц, таким образом, Вы могли легко свалить гранулярность к 10 минутам или для или для намного более прекрасный для 30k таблицы.

Я надеюсь, что это включает немного другой точки зрения, как она могла бы быть сделана. Действительно только необходимо, если Вы волнуетесь по поводу пространства/размера или если у Вас есть, возможно, 10-е или 100 с миллионов из них.

1
ответ дан 3 December 2019 в 22:39
поделиться

Вы могли легко просто записать "позволенные" времена в таблице. Тот путь, если это не там, это не позволяется. Если у Вас должно быть более переменное "расписание", Вы могли бы легко добавить поле года и месяца.

 TABLE DBMaintSched
      ID int PK
      ServerID varchar(30) (indexed)
      Day int
      Month char(3)
      DayOfWeek char(3)
      Year int
      StartDT DateTime
      EndDT DateTime

На декабрь 2008:

 SELECT * FROM DBMaintSched WHERE ServerID = 'SQLSERVER01' AND Month = 'DEC' AND Year = 2008 ORDER BY DAY ASC

У Вас есть все дни на декабрь 2008, на котором может быть выполнено обслуживание. Дисплей однако Вы желаете.

1
ответ дан 3 December 2019 в 22:39
поделиться

Возможно, что-то как

TABLE:
   StartTime DATETIME      PrimaryKey,
   EndTime   DATETIME      PrimaryKey,  /*if you are positive it will be in one hour incerments then you might want to omit this one*/
   Monday    BIT,
   TuesDay   BIT,
   Wednesday BIT,
   Thursday  BIT,
   Friday    BIT,
   Saturday  BIT,
   Sunday    BIT
0
ответ дан 3 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: