Я отвечаю за создание базы данных по проекту. У нас есть поля, которые редко имеют значение (1 на каждые 10 000 записей), и я пытаюсь найти лучший способ сохранить это в базе данных.
Насколько я вижу, у меня есть 3 варианта:
- Добавить столбец в таблице для каждого дополнительного значения
- Добавьте связанную таблицу, которая ссылается на исходную таблицу и содержит записи только там, где нам нужно сохранить значение
- Используйте тип данных XML в исходной таблице и сохраните все значения в этом.
Есть ли другие варианты, которые я не рассматривал?
Я пытаюсь проработать плюсы и минусы каждого метода. Насколько я могу судить, 1 будет самым простым, а 2 займет меньше всего места, но я изо всех сил пытаюсь найти много ресурсов для 3.
sql-server-2008
xml
Мэтью Стиплз
источник
источник
Ответы:
Похоже, что вам нужно, это разреженные столбцы и отфильтрованные индексы и идти с опцией 1. Это полностью поддерживаемые и документированные функции именно для этого сценария.
Я не могу представить, чтобы решение XML работало хорошо в этом сценарии, оно будет иметь огромные накладные расходы на избыточные метаданные и будет медленным для запроса.
источник
Обнуляемая колонна не занимает не места , если длина переменной в SQL Server. Факт NULL сохраняется в битовой карте NULL . Вы можете индексировать его, если требуется, с помощью отфильтрованных индексов, поэтому вы игнорируете пустые столбцы.
Добавляет сложность, когда вы рассматриваете пункт 1.
Не. Трудно искать, синтаксический анализ и т.д. , вы будете сожалеть об этом позже
Это также зависит от размера: будет ли это char (1000) для нескольких миллиардов строк? Или tinyint для 100k строк? Если последние считают сложность пункта 2: не стоит.
источник
В SQL Server 2008 у вас есть дополнительная опция использования разреженных столбцов, разработанных специально для упомянутой вами ситуации.
Они имеют дополнительное преимущество, заключающееся в том, что вы можете просматривать их как объединенный объект XML с помощью XML COLUMN_SET или ссылаться на них по отдельности, и они обеспечивают огромную экономию места.
Для получения дополнительной информации просмотрите следующую статью в блоге: http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx
источник
Четвертый вариант: не используйте таблицы. Таблицы очень плохо подходят для такого рода данных (фактически, для любого типа данных, которые не были принудительно помещены в табличную форму). Просто используйте XML.
источник