Nano Hash - криптовалюты, майнинг, программирование

Почему дата окончания во временной таблице является максимальным системным временем, а не просто NULL

Мы планируем реализовать битемпоральное решение для нескольких наших таблиц, поскольку они должны записывать как время приложения, так и системное время.

Я знаю, что SQL 2016 имеет встроенную поддержку только компонента системного времени, поэтому мы будем преобразовывать таблицы во временные и модифицировать то, что у нас есть сейчас, чтобы создать полнофункциональное битемпоральное решение.

Мой вопрос о последовательности. Компонент даты окончания системного времени временной таблицы установлен на 9999-12-31 23:59:59.9999999, поэтому я подумал, что было бы неплохо установить дату окончания нашего приложения/действительного времени также на 9999-12- 31 23:59:59.9999999.

Однако меня спросили: «Почему мы не можем просто установить его в NULL, чтобы указать, что период в основной таблице не имеет конца?»

Так почему же? Почему MS решила использовать 9999-12-31 23:59:59.9999999, а не NULL?

Это так же просто, как сделать запросы (потенциально) более легкими для написания? Я предполагаю, что МЕЖДУ лучше работает с двумя фактическими значениями даты, но я не могу думать ни о чем другом.


Ответы:


1

Это потому, что эти столбцы являются столбцами периода. (По сути, вы правы). Поскольку период является определением времени, его логически не следует сравнивать с нулевым значением. Таким образом, MSSQL может сравнивать значения времени со значениями времени и отслеживать все обновления (в отличие от сравнения с нулевым и необходимость предполагать нулевые значения означает отсутствие данных, но конец периода.

Столбец начала периода: система записывает время начала для строки в этом столбце, обычно обозначаемом как столбец SysStartTime.

Столбец окончания периода: система записывает время окончания строки в этом столбце, обычно обозначаемое в столбце SysEndTime. MSDN

11.12.2018
  • Спасибо. Мои столбцы, которые записывают время приложения, не являются столбцами периода, поэтому теоретически вы можете использовать NULL для EndDate. Я предполагаю, что если MS добавит поддержку времени приложения, то у нас будет что-то вроде PERIOD FOR APPLICATION_TIME, которое создаст период. Ваше замечание о том, что NULL является отсутствием данных и не указывает на конец периода, является хорошим замечанием и поможет мне аргументировать это. 12.12.2018
  • @Crogacht Значит, вы не создали темпоральную таблицу с system versioning = on? 12.12.2018
  • Нет, я делал. Все столбцы системной версии работают, как и следовало ожидать, с 9999-12-31 23:59:59.9999999 в качестве EndDate, но когда дело доходит до столбцов времени моего приложения, похоже, у меня есть возможность использовать либо NULL ИЛИ 9999-12-31 23:59:59.9999999 как EndDate, потому что они не являются столбцами периодов. Однако 9999-12-31 23:59:59.9999999 кажется более чистым и последовательным. 12.12.2018
  • Круто, Period Column — это просто имя, которое использует MS. Это просто относится к двум столбцам, которые MS создает во всех временных таблицах. На самом деле это не так, это просто соглашение об именах для двух автоматически сгенерированных столбцов. 12.12.2018
  • когда я сказал временные таблицы, я использовал сокращение для временных таблиц 12.12.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..