Как сохранить несколько периодов времени в таблице MySQL?

#python #mysql

#python #mysql

Вопрос:

У меня есть столбец, в котором хранятся периоды времени, такие как

 |tcolumn                                                                   |
|1990-01-01 ~ 1990-02-05, 1995-05-02 ~ 1995-08-01                          |
|1992-03-01 ~ 1996-05-02, 1997-07-02 ~ 1998-11-01, 2001-03-02 ~ 2002-08-01 |
|1997-08-01 ~ 1998-07-12                                                   |
  

Каждая строка может хранить разное количество периодов времени.

И я хочу проиндексировать столбец, чтобы проверить, есть ли в столбце набор определенных периодов времени.

Есть ли элегантный способ решить эту проблему?

У меня есть несколько идей, но все становится довольно сложным.

(Я использую Python для доступа к базе данных.)

Комментарии:

1. Нормализуйте свою таблицу. По одному периоду в строке, начало и конец в отдельных столбцах.

2. @Akina В данном случае я не знаю, как его проиндексировать.

3. Создание индекса не может быть самоцелью, создание индекса без определенного списка целей не имеет смысла. Он создан для чего-то — первичный ключ идентифицирует строки, уникальные ключи обеспечивают уникальность (и поддержку внешнего ключа на стороне «один»), ключи обеспечивают увеличение скорости запросов и поддержку внешнего ключа на стороне «много»…

4. @Akina Причина, по которой я хочу проиндексировать, — проверить, установлен ли определенный период времени. Я хочу выполнять запросы, такие как поиск всех строк, для которых установлен определенный период времени.

5. проверьте, есть ли определенный период времени, который определяет этот термин. Означает ли «set», что его начало и завершение строго соответствуют критериям поиска? или перекрывается? или покрыто? или равно с некоторой точностью? Или что-то еще?

Ответ №1:

Вот пример нормализованной среды

 t_id start_date end_date
   1 1990-01-01 1990-02-05
   1 1995-05-02 1995-08-01
   2 1992-03-01 1990-05-02
   2 1997-07-02 1998-11-01
   2 2001-03-02 2002-08-01
   3 1997-08-01 1998-07-12
  

В этом примере предполагается, что ПЕРВИЧНЫЙ КЛЮЧ может быть сформирован на (t_id,start_date)