Здесь еще есть несколько неизвестных о том, как вы хотите обрабатывать около дат. Около даты могут быть любые из следующих значений: точность по месяцу или году или заданный период времени с различной точностью.
Если вы ожидаете использовать только приблизительную дату, которая может иметь точность либо месяца, либо года, я бы предложил следующее:
Используйте поле event_date
для точных дат в любой таблице, которую вы отслеживаете, вероятно, в таблице events
. Для приблизительных дат используйте event_date
, но добавьте month
или year
к столбцу accuracy
. Ваша система может затем принять введенную дату только с точностью, указанной в этом столбце. Если ваши даты должны быть датой-временем, то accuracy
можно легко расширить, чтобы принять во внимание день.
Если вы имеете дело с датами, которые могут охватывать две точности, я бы предположил, что вы используете предыдущую информацию с несколькими дополнительными критериями:
Если допущения в таблице events
верны, вам потребуется дополнительная таблица для event_dates
, в которой будут использоваться столбцы даты, которые я обсуждал ранее. Эта новая таблица также будет нуждаться в столбце для date_type
, который представляет начало или конец события около даты. Для таблицы event_dates
потребуется ссылка на event_id
, чтобы поддерживать связь.
В качестве альтернативы, вы можете создать приблизительную дату в той же таблице, если ваши требования могут быть выполнены с указанием buffer_date
или date_range
. Это решение будет использовать точную введенную дату и использовать логику, чтобы сказать, что любая дата, которая встречается в числе дней / месяцев / лет, указанных в buffer_date
, должна вызывать это событие.
Надеюсь, это поможет.