powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ценные указания. Прошу обсудить.
42 сообщений из 42, показаны все 2 страниц
Ценные указания. Прошу обсудить.
    #39909075
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал из "ценных указаний". Насколько оправдана такая инструкция?
"Указания"Везде, где необходимо удалить более 1000 строк из таблицы нужно использовать механизмы, исключающие прямое удаление (например, переименование записей) и последующую сборку мусора в периоды низкой нагрузки на сервер.

Нельзя использовать Foreign Key. Все связи в таблицах должны обрабатываться в запросах операциями JOIN при чем предпочтительно использовать INNER JOIN и LEFT JOIN. В некоторых случаях можно использовать FULL JOIN. RIGHT JOIN использовать не нужно.

Для всех полей за редким исключением и особых случаев при создании таблиц нужно ставить ALLOW NULLS.

Не использовать никаких CONSTRAINTS кроме Default Value.

Не использовать триггеры.
Собственно, база сваливает данные для аналитики по продажам в большом количестве ежедневно. Основные запросы на аналитику по продажам товаров. Без схемы данных.
============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909094
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2
Прочитал из "ценных указаний". Насколько оправдана такая инструкция?
"Указания"Везде, где необходимо удалить более 1000 строк из таблицы нужно использовать механизмы, исключающие прямое удаление (например, переименование записей) и последующую сборку мусора в периоды низкой нагрузки на сервер.

Нельзя использовать Foreign Key. Все связи в таблицах должны обрабатываться в запросах операциями JOIN при чем предпочтительно использовать INNER JOIN и LEFT JOIN. В некоторых случаях можно использовать FULL JOIN. RIGHT JOIN использовать не нужно.

Для всех полей за редким исключением и особых случаев при создании таблиц нужно ставить ALLOW NULLS.

Не использовать никаких CONSTRAINTS кроме Default Value.

Не использовать триггеры.

Собственно, база сваливает данные для аналитики по продажам в большом количестве ежедневно. Основные запросы на аналитику по продажам товаров. Без схемы данных.
============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).

Для хранилищ данных -- абсолютно правильная и оправданная инструкция. Тригерры, внешние ключи и прочие констрейнты -- в DWH элементы чужеродные.

А вообще -- изучайте якорную модель и все изменения делайте только INSERT-ами .
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909118
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2,

часть этих указаний направлены на оптимизация вставки. Я так понимаю, что вы решаете другую задачу?
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909124
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2,

"Нельзя использовать Foreign Key"

все эти "нельзя" не имеют смысла в общем случае. все хорошо в своей области. если мы пишем систему критическую по связанности данным, то нельзя БЕЗ форейн кеев. поэтому лучше сразу учтонять "в случае двх, не рекомендуем использовать форен кеи"
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909130
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДля всех полей за редким исключением и особых случаев при создании таблиц нужно ставить ALLOW NULLS
интересно, а это зачем?
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909143
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium
авторДля всех полей за редким исключением и особых случаев при создании таблиц нужно ставить ALLOW NULLS

интересно, а это зачем?Пока не знаю.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909146
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavy
dab2,

"Нельзя использовать Foreign Key"

все эти "нельзя" не имеют смысла в общем случае. все хорошо в своей области. если мы пишем систему критическую по связанности данным, то нельзя БЕЗ форейн кеев. поэтому лучше сразу учтонять "в случае двх, не рекомендуем использовать форен кеи"


Вы лучше объясните почему. Потому что вставки массовые и наличие FK -- это серьезный тормоз. Да и OLTP системы можно написать так, то код гарантирует валидность данных.

Более того, в двх загрузка может идти параллельно и по разным расписаниям, поэтому ситуация, когда не на что ссылаться, довольно частая.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909150
Фотография dab2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока я юнга на этом корабле! )) ХЗ куда плывём. По ходу плавания напишу подробности, тема интересная, я уже понял.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909156
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Потому что вставки массовые и наличие FK -- это серьезный тормоз
Механизм массовых вставок умеет игнорировать все констрейнты, bcp это делает по-умолчанию.
a_voronin
Да и OLTP системы можно написать так, то код гарантирует валидность данных.
И получится свой механизм, повторяющий работу FK.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909157
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium
авторДля всех полей за редким исключением и особых случаев при создании таблиц нужно ставить ALLOW NULLS

интересно, а это зачем?

ну возможно это не dwh, а стейдж база и там должны быть допустимы любые, неполные или кривые данные, главное вставить полностью и быстро
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909178
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
И получится свой механизм, повторяющий работу FK.

..., только с ошибками.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909179
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
a_voronin
Потому что вставки массовые и наличие FK -- это серьезный тормоз
Механизм массовых вставок умеет игнорировать все констрейнты, bcp это делает по-умолчанию.
a_voronin
Да и OLTP системы можно написать так, то код гарантирует валидность данных.
И получится свой механизм, повторяющий работу FK.


А потом их надо включать. И truncate не будет работать, а он в двх распространенное явление.

В общем в двх форейн кей есть зло.

И никаким механизмом повторяющим внешние ключи это не будет. Если вы правильно делаете транзакции и у вас в них нет багов, то все вставляется целостно.

Если вы создаете заказ и прямо в этой транзакции вставляете юзера или он пришел в качестве параметра, а стало быть есть. А потом юзер не удаляется, а метится как удаленный признаком, то никаких внешних ключей вам не надо.

И скажу вам по секрету -- в высоконагруженных oltp системах внешние ключи тоже убивают.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909210
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
А потом их надо включать.
Сами придумали или где-то прочитали?
a_voronin
Если вы правильно делаете транзакции и у вас в них нет багов, то все вставляется целостно.
Кто контролирует правильность транзакций и т.п.? Специальный, хорошо обученный контролер? Так он заболел или уволился. И т.д. и т.п.
Где гарантия, что этот контролер ничего не пропустит? И что контролер, контролирующий контролера тоже?

Декларативную целостность и придумали в том числе и для того, чтобы избавиться от контролеров.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909223
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С 2016 сервера, если правильно помню, были приняты меры по ускорению проверки внешних ключей. На 2000 сервере действительно были сложности, припоминаю. Если речь идет о проверке нескольких сотен внешних ключей, то наверное, замедление в работе появится.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909255
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу вспомнился анекдот про пять бабуинов.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909278
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dab2,

Кроме этого
>>при создании таблиц нужно ставить ALLOW NULLS

все остальное нормально для dwh
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909319
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критик
dab2,

Кроме этого
>>при создании таблиц нужно ставить ALLOW NULLS

все остальное нормально для dwh

А почему можно использовать Left join, но нельзя Right join?
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909324
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
А почему можно использовать Left join, но нельзя Right join?
Лучше спросите почему нельзя full и чем его заменить :)
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909326
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Критик
dab2,

Кроме этого
>>при создании таблиц нужно ставить ALLOW NULLS

все остальное нормально для dwh

А почему можно использовать Left join, но нельзя Right join?


Вероятно, для стандартизации. Эти методы соединения по сути идентичны, поэтому не стоит ломать голову, если можно обойтись только left вместо left и right-соединений.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909380
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Критик
dab2,

Кроме этого
>>при создании таблиц нужно ставить ALLOW NULLS

все остальное нормально для dwh

А почему можно использовать Left join, но нельзя Right join?


Лично я не знаю почему, но за свою карьеру нигде не использовал RIGHT JOIN. FULL JOIN использовал всего 3 раза.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909383
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
a_voronin
А потом их надо включать.
Сами придумали или где-то прочитали?
a_voronin
Если вы правильно делаете транзакции и у вас в них нет багов, то все вставляется целостно.
Кто контролирует правильность транзакций и т.п.? Специальный, хорошо обученный контролер? Так он заболел или уволился. И т.д. и т.п.
Где гарантия, что этот контролер ничего не пропустит? И что контролер, контролирующий контролера тоже?

Декларативную целостность и придумали в том числе и для того, чтобы избавиться от контролеров.


Есть способы построить БД так и следовать шаблонам написания кода так, что никакой контроллер не нужен. Я говорю о ХД.

В OLTP как правило есть небольшое число таблиц большого размера, где это критично и там надо написать некоторое кол-во кода, который надо хорошо проверить и протестировать и который для ускорения работает без констрейнтов.

Одно дело, если вы проводите платежи, другие дело, если вы скидывает информацию в исторический лог, где эти констрейнты никому не нужны.

Вообще введение принципа -- ничего не удалять, только метить DELETED = 1 это шаг к тому, чтобы избавиться от внешних ключей.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909390
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
FULL JOIN использовал всего 3 раза.
Зато наверняка неоднократно пользовались MERGE. А MERGE вполне себе использует FULL JOIN
a_voronin
Есть способы построить БД так и следовать шаблонам написания кода так, что никакой контроллер не нужен.
Криворукий разработчик всегда найдет способ сделать криво. А нынче криворуких подавляющее большинство.
a_voronin
Вообще введение принципа -- ничего не удалять, только метить DELETED = 1 это шаг к тому, чтобы избавиться от внешних ключей.
А так же ничего не вставлять и не изменять. Действительно, в read only БД констрейнты не нужны.
Констрейнты всего лишь инструмент. И просто нужно уметь им пользоваться.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909393
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Есть способы построить БД так и следовать шаблонам написания кода так, что никакой контроллер не нужен. Я говорю о ХД.


Все равно нужен будет контролер, который будет проверять на следование шаблонам, иначе получится полная дичь даже с 2мя разработчиками.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909399
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
a_voronin
Есть способы построить БД так и следовать шаблонам написания кода так, что никакой контроллер не нужен. Я говорю о ХД.


Все равно нужен будет контролер, который будет проверять на следование шаблонам, иначе получится полная дичь даже с 2мя разработчиками.


Как насчет того, чтобы использовать генератор кода, и возложить функцию контроллера на код.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909402
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

А генератор кода кто напишет? А кто будет контролировать правильность генерации? И т.д. и т.п.

Если есть критичные места, где нужно гарантировать целостность данных, то таки придется обеспечивать это средствами декларативной целостности. Ибо ничего другое эту целостность не гарантирует.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909404
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Есть способы построить БД так и следовать шаблонам написания кода так, что никакой контроллер не нужен. Я говорю о ХД.

В OLTP как правило есть небольшое число таблиц большого размера, где это критично и там надо написать некоторое кол-во кода, который надо хорошо проверить и протестировать и который для ускорения работает без констрейнтов.

Одно дело, если вы проводите платежи, другие дело, если вы скидывает информацию в исторический лог, где эти констрейнты никому не нужны.

Вообще введение принципа -- ничего не удалять, только метить DELETED = 1 это шаг к тому, чтобы избавиться от внешних ключей.
Реальная система пишется многими людьми долгое время. Эти люди разной квалификации, и, если система сложная, не знают весь код.

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

Ссылочная целостность не гарантирует отсутствие ошибок вообще, но защищает хотя бы от части ошибок.

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

В ОЛТП замедление не такое большое, не "в разы".
А вот в DWH ссылочная целостность может помешать максимально быстрому балк инсёрту, поэтому её часто не используют, но только для тех огромных таблиц, в которые нужно вставлять максимально быстро - и в том случае, если целостность не стоит дополнительных затрат на железо.

Т.е., в итоге, ваши рассуждения совершенно правильные, но не правильно обобщать на уровне "Для хранилищ данных -- абсолютно правильная и оправданная инструкция. Тригерры, внешние ключи и прочие констрейнты -- в DWH элементы чужеродные".
И так же неправильно правило, которое озвучил ТС: "Нельзя использовать Foreign Key". Очевидная низкая квалификация команды, независимо от того, DWH они делают, или OLTP. ИМХО "старая школа", 30 лет назад это было модно.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909406
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm

А генератор кода кто напишет? А кто будет контролировать правильность генерации? И т.д. и т.п.

Если есть критичные места, где нужно гарантировать целостность данных, то таки придется обеспечивать это средствами декларативной целостности. Ибо ничего другое эту целостность не гарантирует.

FK в эпоху бигдаты ? вы там на периферии совсем одичали. банки давно мигрировали на бигдата платформы типа хадупа и как бы справляются с гарантиями без "декларативной целостности" (tm)
в мсскл2019 запихнули хадуп под задачи аналитики, кто-то в серьез собрался и там колхозить FK ?

ЗЫ. в оракле нормальная практика держать отключенными FK, в рсубд FK дают критическую инфу оптимизатору.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909407
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
a_voronin
Есть способы построить БД так и следовать шаблонам написания кода так, что никакой контроллер не нужен. Я говорю о ХД.

В OLTP как правило есть небольшое число таблиц большого размера, где это критично и там надо написать некоторое кол-во кода, который надо хорошо проверить и протестировать и который для ускорения работает без констрейнтов.

Одно дело, если вы проводите платежи, другие дело, если вы скидывает информацию в исторический лог, где эти констрейнты никому не нужны.

Вообще введение принципа -- ничего не удалять, только метить DELETED = 1 это шаг к тому, чтобы избавиться от внешних ключей.
Реальная система пишется многими людьми долгое время. Эти люди разной квалификации, и, если система сложная, не знают весь код.

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

Ссылочная целостность не гарантирует отсутствие ошибок вообще, но защищает хотя бы от части ошибок.

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

В ОЛТП замедление не такое большое, не "в разы".
А вот в DWH ссылочная целостность может помешать максимально быстрому балк инсёрту, поэтому её часто не используют, но только для тех огромных таблиц, в которые нужно вставлять максимально быстро - и в том случае, если целостность не стоит дополнительных затрат на железо.

Т.е., в итоге, ваши рассуждения совершенно правильные, но не правильно обобщать на уровне "Для хранилищ данных -- абсолютно правильная и оправданная инструкция. Тригерры, внешние ключи и прочие констрейнты -- в DWH элементы чужеродные".
И так же неправильно правило, которое озвучил ТС: "Нельзя использовать Foreign Key". Очевидная низкая квалификация команды, независимо от того, DWH они делают, или OLTP. ИМХО "старая школа", 30 лет назад это было модно.


Прошло уже много времени с тех пор, как я занимался OLTP, но у нас была ситуация, когда на трех реально крупных таблицах мы для скорости убили внешние ключи. И эта была долгая разработка разными людьми на протяжении 8-9 лет. При этом на этом же проекте таблицы платежного модуля были обвешены внешними ключами по максимуму.

DEFAULT и UNIQUE констрейнты в ДВХ я сам использовал буквально вот недавно. Триггеры показали себе не с лучшей стороны. Я пробовал их в ДВХ года 4 назад. Лучше использовать OUTPUT и далее в скрипте обновлять по его выхлопу. Но вот внешние ключи на всех хранилищах, которыми я занимался, отсутствовали как класс. Причем далеко не всегда это было моим решением.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909410
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1
FK в эпоху бигдаты ? вы там на периферии совсем одичали. банки давно мигрировали на бигдата платформы типа хадупа и как бы справляются с гарантиями без "декларативной целостности" (tm)
в мсскл2019 запихнули хадуп под задачи аналитики, кто-то в серьез собрался и там колхозить FK ?
О! Хадупно-бигдатный небожитель снизошел до нас, убогих :) И, само-собой, кроме банков с бигдатами ничего более на свете не существует. А если и появится, то срочно должно мигрировать в сторну хадупа...
H5N1
в оракле нормальная практика держать отключенными FK, в рсубд FK дают критическую инфу оптимизатору.
В ваших оптимизаторах может и дают, а в наших отключенный или not trusted FK никакую критичную инфу дать не может.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909421
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
a_voronin,

А генератор кода кто напишет?


Я лично
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909426
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
Я лично
Да, это конечно же гарантирует безошибочность его работы и отсутствие необходимости контроля нагенеренного. И как я раньше не догадался?...
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909446
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Для сравнения СУБД есть отдельный форум.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909559
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1,

Вы путаете твердое с тяжелым.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909727
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavy

если мы пишем систему критическую по связанности данным, то нельзя БЕЗ форейн кеев. поэтому лучше сразу учтонять "в случае двх, не рекомендуем использовать форен кеи"


Смысл такой, что всю эту внешнюю целостность надо проверять на других уровнях, - когда формируется stage, когда определяется, обрабатывается и передается относительная небольшая дельта в КХД, либо полностью перекладывать на ИС.

Вот, к примеру, если изначально ХД основывается на источнике 1С, и там уже построены все внешние ограничения, - зачем делать это еще раз, повторять на уровне DWH? Если у нас не генерятся новые строки, а если и генерятся - то подчинены всем правилам SCD, - то смысл на основном большом массиве данных проверять внешнюю целостность каждый раз? Пусть уровень stage это хотя бы делает - он хоть работает с малым набором данных, и пусть поставляет очищенные и отвалидированные данные в основную, рабочую область
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909729
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin

В общем в двх форейн кей есть зло.


и тут плюсадин
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909749
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PsyMisha,

Довольно странная точка зрения. Лично я на stage никогда не навешивал функции проверок целостности.
У меня обычно все данные уходили в детальный слой, где неконсистентные данные привязывались к "неизвестному элементу". Если такая привязка сохраняется несколько дней/загрузок, то проверочные процедуры в отдельной базе "качества данных" сигнализируют об этом службе поддержки, которая и разбирается, что там такое приехало.

Ну и нельзя расчитывать на "изначально ХД основывается на источнике 1С", потому что сначала это 1с, через 3 года это какой-нибудь SAP, а 1с выведена из эксплуатации. А через 5 лет в качестве источников 1С, SAP, Диасофт и Microsoft Dynamics.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909751
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик,

Ну или так, почему нет - тот же UnknownMember в SSAS
Но это - хотя бы логические внешние ключи, как и например в SAP BO - Юниверсы, как и в DAL SSAS - такие же логические сущности. Но главное - не прибитые гвоздями классические FK на уровне БД
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909752
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик,

Ну или так, почему нет - тот же UnknownMember в SSAS
Но это - хотя бы логические внешние ключи, как и например в SAP BO - Юниверсы, как и в DAL SSAS - такие же логические сущности. Но главное - не прибитые гвоздями классические FK на уровне БД
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909753
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик

А через 5 лет в качестве источников 1С, SAP, Диасофт и Microsoft Dynamics.


ну это да, - тут уже суррогатными ключами надо орудовать, чтобы смена ИС внизу не повлияла на уровень выходных витрин для клиентов
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909881
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PsyMisha
StarikNavy

если мы пишем систему критическую по связанности данным, то нельзя БЕЗ форейн кеев. поэтому лучше сразу учтонять "в случае двх, не рекомендуем использовать форен кеи"


Смысл такой, что всю эту внешнюю целостность надо проверять на других уровнях, - когда формируется stage, когда определяется, обрабатывается и передается относительная небольшая дельта в КХД, либо полностью перекладывать на ИС.

Вот, к примеру, если изначально ХД основывается на источнике 1С, и там уже построены все внешние ограничения, - зачем делать это еще раз, повторять на уровне DWH? Если у нас не генерятся новые строки, а если и генерятся - то подчинены всем правилам SCD, - то смысл на основном большом массиве данных проверять внешнюю целостность каждый раз? Пусть уровень stage это хотя бы делает - он хоть работает с малым набором данных, и пусть поставляет очищенные и отвалидированные данные в основную, рабочую область


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

Например, ваше начальство хочет, чтобы кол-во продаж обновлялось, каждые 10 минут, и вы можете закачивать их с такой скоростью, но при этом вам приходиться сознательно идти на нарушения целостности: вы грузите юзеров, товарный каталог, ответственного за данное направление менеджера, 2-3 раза в сутки, чтобы не мешать этой скоростной загрузке заказов.

Тогда вы должны вставлять в эти зависимые справочники заглушки, либо вообще не рассчитывать на то, что найдете зависимую запись.
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39909988
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

Да-да, все верно, такая ситуация может так же возникнуть

Я когда-то с таким решением работал: все операционные источники стекались на сервер с инстансом DWH через AlwaysOn - т.е. - их secondary-базы в асинхронном режиме были актуальны с master-репликой, где были писатели/читатели.
В момент, когда требовалось прогрузить дельту в КХД - на secondary-базы, которые были в открытом состоянии и аплаили журнал транзакций - приходила команда на создание snapshot'а.
И, таким образом, на время обработки инкремента Хранилищем, - оно работало с замороженными на момент до начала операции данными в снепшоте, поэтому там не могла случиться ссылочная нецелостность, когда часть таблиц отработали, а в часть справочников уже залились обновленные/новые строки, и FK мог не отбиться.
Ну и весь ETL так же смотрел на снепшот, получается, которые динамикой создавался, дропался и переобновлялся в свою очередь

У вас описан так же частный случай этой ситуации, - но обработать-придумать что-либо можно
...
Рейтинг: 0 / 0
Ценные указания. Прошу обсудить.
    #39911086
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PsyMisha
a_voronin,

Да-да, все верно, такая ситуация может так же возникнуть

Я когда-то с таким решением работал: все операционные источники стекались на сервер с инстансом DWH через AlwaysOn - т.е. - их secondary-базы в асинхронном режиме были актуальны с master-репликой, где были писатели/читатели.
В момент, когда требовалось прогрузить дельту в КХД - на secondary-базы, которые были в открытом состоянии и аплаили журнал транзакций - приходила команда на создание snapshot'а.
И, таким образом, на время обработки инкремента Хранилищем, - оно работало с замороженными на момент до начала операции данными в снепшоте, поэтому там не могла случиться ссылочная нецелостность, когда часть таблиц отработали, а в часть справочников уже залились обновленные/новые строки, и FK мог не отбиться.
Ну и весь ETL так же смотрел на снепшот, получается, которые динамикой создавался, дропался и переобновлялся в свою очередь

У вас описан так же частный случай этой ситуации, - но обработать-придумать что-либо можно


Все уже давно придумали. Data Vault и Anchor Model грузят все что угодно по любым расписаниям сохраняя целостность там, где она есть и не стопорясь там, где её нет.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ценные указания. Прошу обсудить.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]