Я работаю над всемирной службой планирования, которая использует физические местоположения в разных часовых поясах. Эти часовые пояса должны сохраняться в базе данных вместе с каждым местоположением. Вопрос в том, как их лучше всего хранить?
В настоящее время мы используем таблицу пользовательского часового пояса, в которой сопоставляются индивидуальные идентификаторы целого числа с идентификаторами строки часового пояса Microsoft. Вместо этого я хочу сохранить идентификаторы часовых поясов IANA. Наша база данных - это SQL Server, доступ к которой осуществляется на C # с использованием Entity Framework 6. Мы обрабатываем время с использованием NodaTime. Решение должно хорошо работать со всеми этими технологиями.
Я вижу два разных способа сделать это:
- Просто сохраните идентификатор IANA в виде строки вместе с каждым местоположением.
- Храните все идентификаторы IANA в отдельной таблице и используйте внешний ключ для связи с ним.
Первое решение, вероятно, является самым простым, так как оно легко позволяет создавать новые идентификаторы и тесно связывает данные. Однако у него есть недостаток в использовании большого количества места.
Второе решение требует, чтобы мы присоединились к таблице часовых поясов каждый раз, когда нам нужен часовой пояс, что довольно часто, но требует небольшого пространства. При необходимости в эту таблицу должны добавляться новые идентификаторы часовых поясов. Он также вводит эти магические идентификаторы целого числа (используемый внешний ключ), которые могут быть ошибочными как общеизвестные идентификаторы (в настоящее время у нас есть эта проблема, когда идентификаторы вышли из базы данных и в словарь в коде, используемый вместо базы данных Таблица).
Поскольку я пишу это, мне интересно, может ли быть возможно создать пользовательский часовой пояс UDT для SQL Server, где часовые пояса могут быть сохранены и загружены как их строковые идентификаторы, но будут храниться более эффективно у пользователя - скрытый формат.
c#,sql-server,timezone,nodatime,iana,