В вычислительной технике схема или модель снежинки представляет собой логическое расположение таблиц в многомерной базе данных , при котором диаграмма отношений сущностей напоминает форму снежинки . Схема «снежинка» представлена централизованными таблицами фактов , которые связаны с несколькими измерениями . «Снежинка» — метод нормализации таблиц измерений в звездообразной схеме . При полной нормализации по всем таблицам измерений результирующая структура напоминает снежинку с таблицей фактов посередине. Принцип «снежинки» — нормализация таблиц измерений путем удаления атрибутов низкой мощности и формирования отдельных таблиц. [1]
Схема снежинки аналогична схеме звезды. Однако в схеме «снежинка» измерения нормализованы в несколько связанных таблиц, тогда как измерения в схеме «звезда» денормализованы, и каждое измерение представлено одной таблицей. Сложная форма снежинки возникает, когда размеры схемы снежинки сложны, имеют несколько уровней отношений, а дочерние таблицы имеют несколько родительских таблиц («развилки на дороге»).
Схемы «звезда» и «снежинка» чаще всего встречаются в многомерных хранилищах данных и витринах данных , где скорость извлечения данных важнее, чем эффективность манипуляций с данными. По существу, таблицы в этих схемах не сильно нормализованы и часто разрабатываются на уровне нормализации, близком к третьей нормальной форме . [2]
Нормализация разделяет данные, чтобы избежать избыточности (дублирования), путем перемещения часто повторяющихся групп данных в новые таблицы. Таким образом, нормализация имеет тенденцию увеличивать количество таблиц, которые необходимо соединить для выполнения данного запроса, но уменьшает пространство, необходимое для хранения данных, и количество мест, где их необходимо обновить в случае изменения данных.
С точки зрения хранения пространства таблицы измерений обычно невелики по сравнению с таблицами фактов. Это часто сводит на нет потенциальные преимущества звездообразной схемы в отношении пространства для хранения по сравнению со схемой снежинки. Пример: один миллион транзакций продаж в 300 магазинах в 220 странах приведет к появлению 1 000 300 записей в звездообразной схеме (1 000 000 записей в таблице фактов и 300 записей в таблице измерений, где каждая страна будет указана явно для каждого магазина в этой стране). Более нормализованная схема «снежинка» с ключами стран, ссылающимися на таблицу стран, будет состоять из той же таблицы фактов из 1 000 000 записей, таблицы магазина из 300 записей со ссылками на таблицу стран с 220 записями. В этом случае звездообразная схема, хотя и будет дополнительно денормализована, уменьшит количество записей только на (незначительное) ~0,02% (=[1 000 000+300] вместо [1 000 000+300+220]).
Некоторые разработчики баз данных идут на компромисс, создавая базовую схему «снежинка» с построенными на ее основе представлениями , которые выполняют множество необходимых соединений для имитации схемы «звезда». Это обеспечивает преимущества хранения, достигаемые за счет нормализации измерений и простоты выполнения запросов, обеспечиваемой звездообразной схемой. Компромисс заключается в том, что требование серверу автоматически выполнять базовые соединения может привести к снижению производительности при запросе, а также к дополнительным соединениям с таблицами, которые могут не потребоваться для выполнения определенных запросов. [ нужна цитата ]
Схема «снежинка» принадлежит к тому же семейству, что и логическая модель схемы «звезда» . Фактически схема «звезда» считается частным случаем схемы «снежинка». Схема «снежинка» дает некоторые преимущества перед схемой «звезда» в определенных ситуациях, в том числе:
Основным недостатком схемы «снежинка» является то, что дополнительные уровни нормализации атрибутов усложняют соединения исходных запросов по сравнению со схемой «звезда» .
Схемы «снежинки», в отличие от плоских размеров одной таблицы, подверглись резкой критике. Предполагается, что их целью является эффективное и компактное хранение нормализованных данных, но это достигается значительной ценой низкой производительности при просмотре соединений, необходимых в этом измерении. [4] Этот недостаток, возможно, уменьшился за годы, прошедшие с тех пор, как он был впервые обнаружен, благодаря повышению производительности запросов в инструментах просмотра.
Пример схемы, показанный справа, представляет собой урезанную версию примера звездообразной схемы, приведенного в статье о звездообразной схеме .
Следующий пример запроса представляет собой эквивалент схемы «снежинка» примера кода схемы «звезда», который возвращает общее количество телевизоров, проданных по брендам и странам за 1997 год. Обратите внимание, что для запроса схемы «снежинка» требуется гораздо больше соединений, чем для версии схемы «звезда». выполнить даже простой запрос. Преимущество использования схемы «снежинка» в этом примере заключается в том, что требования к хранению ниже, поскольку схема «снежинка» исключает множество повторяющихся значений из самих измерений.
ВЫБЕРИТЕ Б. _ Бранд , Г. _ Страна , СУММА ( F. Units_Sold ) FROM Fact_Sales F INNER JOIN Dim_Date D ON F. _ _ Дата_Ид = Д. _ Id INNER JOIN Dim_Store S ON F . Идентификатор_магазина = S . Id INNER JOIN Dim_Geography G ON S . Geography_Id = G . Id INNER JOIN Dim_Product P ON F . Product_Id = P . Id INNER JOIN Dim_Brand B ON P . Идентификатор_Бренда = B . Идентификатор INNER JOIN Dim_Product_Category C ON P . Product_Category_Id = C . Идентификатор ГДЕ D . Год = 1997 И С . Product_Category = 'tv' ГРУППА ПО B . Бранд , Г. _ Страна
Не заснеживайте свои размеры, даже если они большие