Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ценные указания. Прошу обсудить. / 25 сообщений из 42, страница 1 из 2
27.12.2019, 14:53
    #39909075
dab2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ценные указания. Прошу обсудить.
Прочитал из "ценных указаний". Насколько оправдана такая инструкция?
"Указания"Везде, где необходимо удалить более 1000 строк из таблицы нужно использовать механизмы, исключающие прямое удаление (например, переименование записей) и последующую сборку мусора в периоды низкой нагрузки на сервер.

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

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

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

Не использовать триггеры.
Собственно, база сваливает данные для аналитики по продажам в большом количестве ежедневно. Основные запросы на аналитику по продажам товаров. Без схемы данных.
============================================================================================================
"О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако).
...
Рейтинг: 0 / 0
27.12.2019, 15:06
    #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
27.12.2019, 15:26
    #39909118
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ценные указания. Прошу обсудить.
dab2,

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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


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

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

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

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


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


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


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

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

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


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