Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
 Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
SomewhereSomehow
Данные могут не пройти простую проверку на присутствие одних значений таблицы в других. Требуются более сложные проверки и коррекция данных, также данные могут быть доступны по дням, что-то валидировано, а что-то еще нет. Доступны не клиентам, а дальнейшей обработке.
Мало, что у Вас "смешались в кучу кони, люди" , так Вас еще не устраивает, что большая часть говнокода, связанного непосредственно с обслуживанием ссылочной целостности, была заменена на две стандартные серверные команды... Ну, что ж каждый имеет право на свои персональные извращения...
SomewhereSomehow
Ссылочная целостность это очень хорошо. Вы только от максимализма избавьте! Есть разные проекты и есть разные паттерны...
Ваш "минимализм" - это нечто!

Вы действительно не можете себе представить, что ссылочную целостность в базах данных можно поддерживать не только констрейнтами внешних ключей, но еще триггерами и хранимыми процедурами, а то и вообще может быть "зашито" в код прикладной программы - и это все еще будет называться "ссылочной целостностью"?!

Ссылочная целостность - не максимализму. Это - одно из основных требований соблюдения непротиворечивости хранящихся в базе данных. И ни один "паттерн проектирования" который не обеспечивает соблюдение даже одного-единственного этого требования даже близко нельзя использовать с базами данных.
14 июн 13, 00:06    [14431201]     Ответить | Цитировать Сообщить модератору
 Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Mnior
Гавриленко Сергей Алексеевич
В нашей базе нет FK (включенных, по крайне мере)
sphinx_mv, уверяют вас Сергей Алексеевич спец, так что не надо думать на него. Эта фраза говорит о многом.
Когда спец начинает "путаться в показаниях" - это тоже говорит о многом: "несказанно радует", когда он утверждает о полном отсутствии поддержки ограничений ссылочной целостности в его, типа, не самой простой системе...
И если в элементарных терминах (внешние ключи, ссылочная целостность, констрейнты внешних ключей) начинают путаться ТАКИЕ специалисты, вполне очевидно, что сложно требовать не-быдлокодерства от менее квалифицированного "персонала"...
14 июн 13, 00:21    [14431242]     Ответить | Цитировать Сообщить модератору
 Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
sphinx_mv
Мало, что у Вас "смешались в кучу кони, люди" , так Вас еще не устраивает, что большая часть говнокода, связанного непосредственно с обслуживанием ссылочной целостности, была заменена на две стандартные серверные команды... Ну, что ж каждый имеет право на свои персональные извращения...
Вы, однако, мастер сходу угадывать, что у кого не так.

На бумаге вкл/выкл констрейнтов выглядит классно. На практике осложняется следующим:
  • Данные в таблицах могут никогда не быть консистентны полностью, но могут быть консистенты частично: например, для некторых клиентов;
  • Выключение и включение FK предполагают классный лок Sch-M на обе таблицы, и если выключить -- быстро, то назад на огромных таблицах включаться может часами. И достучаться все это время до данных можно разе что через снапшот.
  • 14 июн 13, 00:21    [14431243]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Maxx
    Member [скрыт]

    Откуда:
    Сообщений: 24290
    SomewhereSomehow
    Наблюдайте: JOIN simplification in SQL Server

    ну скажем так чисто ситетический пример ,особено 1 случай. Ваши статьи по оптимизатору гораздо интересней
    14 июн 13, 00:22    [14431247]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда: Moscow
    Сообщений: 37069
    sphinx_mv
    Mnior
    пропущено...
    sphinx_mv, уверяют вас Сергей Алексеевич спец, так что не надо думать на него. Эта фраза говорит о многом.
    Когда спец начинает "путаться в показаниях" - это тоже говорит о многом: "несказанно радует", когда он утверждает о полном отсутствии поддержки ограничений ссылочной целостности в его, типа, не самой простой системе...
    И если в элементарных терминах (внешние ключи, ссылочная целостность, констрейнты внешних ключей) начинают путаться ТАКИЕ специалисты, вполне очевидно, что сложно требовать не-быдлокодерства от менее квалифицированного "персонала"...
    Я вам настоятельно рекомендую воздержаться от обсуждения как меня, так кого бы то ни было, потому что здесь это оффтопик.

    Сообщение было отредактировано: 14 июн 13, 00:27
    14 июн 13, 00:23    [14431251]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    sphinx_mv
    Вас еще не устраивает, что большая часть говнокода, связанного непосредственно с обслуживанием ссылочной целостности, была заменена на две стандартные серверные команды...

    Замените-ка мне на две стандартные команды логирование всех ошибок и пометки на повторную валидацию с учетом архивных данных.
    И в качестве сладкого бонуса, скажите мне, что происходит при "ALTER TableXXX CHECK CONSTRAINT ALL"? Строится ли секретный план? План который в 100 раз быстрее выполняет проверку ссылочной целостности? Давайте репро! Я люблю репро! Попутно, попытайтесь встроить в вашу команду проверки FK, еще и проверку повторной загрузки и т.д., пометки записей FK для повторной загрузки, тех что не помечены в архиве как не важные.

    Вперед. Жду от вас завтра репро.

    Сообщение было отредактировано: 14 июн 13, 00:26
    14 июн 13, 00:23    [14431253]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Maxx
    Member [скрыт]

    Откуда:
    Сообщений: 24290
    я вот тока 1 непонимаю,че все такие категоричные то ?
    Есть место где ФК имеют место быть,а есть где их хрен примениш (например в той части системц где что-то грузиться с левых истояников,а только патом нормализируеться,причесываеться..етц)
    14 июн 13, 00:26    [14431259]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда: Moscow
    Сообщений: 37069
    SomewhereSomehow
    Вперед. Жду от вас завтра репро.
    Да не будет никаких репро. Даже элеметарный практический вопрос 14430500 в этом топике был проигнорирован. Надо же "специалистов" пообсуждать, как их "кони" и "люди" в "кучу" мешаются.
    14 июн 13, 00:32    [14431276]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    Maxx
    SomewhereSomehow
    Наблюдайте: JOIN simplification in SQL Server

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


    Спасибо. Но с тех пор сколько воды утекло, 2008 год... я тогда пешком под стол ходил, в плане оптимизатора, а народ уже такие нутрянки копал. Интересно. Для меня до сих пор открытие книга Хендерсона про Структуру и реализацию (хоть уже многое не актуально и поменялось, но принципы те же), раза три перечитывал, все время что-то новое нахожу - признак классики.
    14 июн 13, 00:35    [14431283]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    sphinx_mv
    Member [заблокирован]

    Откуда:
    Сообщений: 1672
    Гавриленко Сергей Алексеевич
    Собственно, все началось с попытки показать, что иногда они не нужны. И я даже склоняюсь к мысли - хотя бы по своему опыту - что они сильно чаще нужны, чем нет.
    Скромненько-то так... Хотя (на самом деле) "все началось с того", что кое-кто начал двигать идею, что использование констрейнтов внешних ключей каким-то принципиально существенным образом влияет на нагрузку сервера баз данных - ну, вот как раз на величину нагрузки на проверку допустимости внешних ключей...

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

    Вам бы теперь (с новой попытки) еще раз попытаться доказать, что затраты на вставку данных у Вас при отказе от констрейнтов внешних ключей (сами-то внешние ключи никуда у Вас не делись) нагрузка на систему "в-целом" хотя бы не стала больше... (даже если попытаться забыть про возросшую глюкавость)
    14 июн 13, 00:36    [14431286]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    gps monitoring'ов
    Guest
    F-K,

    в вашей задаче не нужен ни fk ни pk в таблице истории.
    14 июн 13, 00:51    [14431328]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    SomewhereSomehow
    Member

    Откуда: Moscow
    Сообщений: 2480
    Блог
    sphinx_mv,

    Вы очень однобоко относитесь к понятию "нагрузка". Что это за нагрузка у Вас? Опишите проект над которым работаете, опишите проекты над которыми работали. Нужны какие-то объективные критерии, кроме вашего однозначного "НЕТ".

    И, да, я жду от Вас репро, по тем условиям что описал. Не будет репро, где включение constraints явно выигрывает у процедуры проверки - при этом имплементируя заявленные требования - имею полное право назвать вас ... простофилей!
    +
    Картинка с другого сайта.
    14 июн 13, 00:52    [14431335]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда: Moscow
    Сообщений: 37069
    sphinx_mv
    Скромненько-то так... Хотя (на самом деле) "все началось с того", что кое-кто начал двигать идею, что использование констрейнтов внешних ключей каким-то принципиально существенным образом влияет на нагрузку сервера баз данных - ну, вот как раз на величину нагрузки на проверку допустимости внешних ключей...
    Принципиально заметным уровнем, я бы сказал. При вставке 1кк записей с уникальным внешним ключом будет ровно на 1кк больше seek'ов (или на 1 скан).

    sphinx_mv
    При этом Вы настолько активно выступали против самих констрейнтов внешних ключей, что забыли, что у Вас в Вашей базе тоже есть поддержка ссылочной целостности - даже если она при этом реализована совсем не констрейнтами... И даже не триггерами и хранимыми процедурами.
    Хорошо, будем считать, что по-вашему у нас такая поддержка есть. Но она опять же делает в вышеописанном кейсе ровно на 1кк меньше seek'ов.

    sphinx_mv
    Вам бы теперь (с новой попытки) еще раз попытаться доказать, что затраты на вставку данных у Вас при отказе от констрейнтов внешних ключей (сами-то внешние ключи никуда у Вас не делись) нагрузка на систему "в-целом" хотя бы не стала больше... (даже если попытаться забыть про возросшую глюкавость)
    Нет, затраты стали ровно на 1кк seek'ов меньше для вышеописанного кейса.

    И для этого достаточно двух простых вещей, которые я вам уже приводил: протестированный T-SQL код (который только модифицирует, но ничего не проверяет) и отсутствие модификаций в обход него. Можете считать что это фантастика и случай из ряда вон выходящий - ок, пусть так и будет.
    14 июн 13, 00:55    [14431345]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6723
    SomewhereSomehow
    Началось с подачи Mnior
    Вот не надо вешать.
    После слов экспертов подумают только одно:
    В половине случаев (50%) FK можно не юзать. А это бред.
    Не надо упускать важные детали, читают форум разнообразные по мышлению люди. И то что ваши "Its depends" вы понимаете правильно, остальные 64% понимают совершенно по другому.
    Maxx
    Есть место где ФК имеют место быть,а есть где их хрен примениш
    Аналогично. 50/50
    Так не пишут для "простого народа".

    Кто-то пытестся правильно сформулировать, ан нет все применяют сказанное для всех только на себя родимого.
    Не надо так близко и категорично воспринимать.

    Более того меня, всегда умиляло как люди совершенно не понимают друг друга.
    SomewhereSomehow и другие гуру - вы просто не поняли суть проблемы. Проблема не в использовании FK, а в том как это преподносится. И не надо троллить, потому что могёте.
    Ответы такого рода 14430940 лучше.

    sphinx_mv, вы тут недавно, и всех фишек постояльцев не знаете. Я вас отлично понимаю и чувствую (могу перепутать с собой), но разнообразия разработки очень большое, а взгляды кардинально отличаются.
    У вас/нас одни ценности у других другие.
    Ответ Сергея Алексеевича "что они сильно чаще нужны, чем нет" (14430937) обязан вас удовлетворить:
    - как то что он всё понимает и
    - как ответ этому топику.

    И кстати народ, голосуйте. Хоть его пока тупо временно прикрыли.

    SomewhereSomehow
    Добро б тут люди из MS CAT были, они бы рассказали о разнообразии.
    Не скажи. Любой работник Кунсткамеры скажет что вокруг одни уродцы.
    Но да, именно людей чья работа чьё призвание наблюдать за многими и применять разные подходы и скажут более веские аргументы, и правильно их преподнесут.
    Все несут свой груз опыта и некоторые понимают как он искажает реальность.
    Уверен, что я пишу преувеличенно про декларативную сторону, относительно "всё понимающего умного специалиста".
    MasterZiv
    Рел. теория не требует и даже не обсуждает foreign key constraints и декларативную ссылочную целостность.
    А под "связями" -- relation -- имеются в виду таблицы, а не "связи между ними".
    Реляционная БД в теории очень легко может существовать без FK, и иногда так и делают.
    Это такой толстый вброс? Или я в терминологию не вкурил?
    Связи эти И кортежи таблиц И связи с другими кортежами. Независимо, в какой "табле" находится колонка.
    Не надо путать теоретическую основу и физическую реализацию.
    И отношение это не только простая связка, они ещё и функциональные бывают. (вешать ограничения можно и на представления)
    Судя по вашей активности на форуме, вы должны ответить развёрнуто.

    PS: Жаль что тихо мирно проигнорировали посыл про TDD. (14430733)
    Или вы так сильно быстро хотите закрыть это "неугодный топик".
    14 июн 13, 01:30    [14431422]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6723
    Гавриленко Сергей Алексеевич
    Даже элеметарный практический вопрос 14430500 в этом топике был проигнорирован.
    Всё равно будет встречный вопрос, а причём тут MSSQL и SQL вообще?
    Некоторые только сейчас узнали что аказывается можна пользоваться и NoSQL (не к месту будет сказано).

    Проблема скуля в малом функционале есть. Данные можно грузить не отдельно, а потом целостность проверять, а правильно организовать загрузку, когда данные уже "хорошо подготовлены". А то сики да сики.
    И CHECK CONSTRAINT должен быть с ONLINE.

    sphinx_mv правильно рассуждает, но со стороны глобального подхода, а не "что имеет то и используем". Кстати, поэтому я и сказал "тесты говно".
    И поэтому тут легко спутать смысл:
    FK нужен всегда, но для некоторых задач MSSQL плохо с ними справляется
    Понятно выразился?
    14 июн 13, 01:48    [14431455]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Maxx
    Member [скрыт]

    Откуда:
    Сообщений: 24290
    Mnior
    PS: Жаль что тихо мирно проигнорировали посыл про TDD. (14430733)
    Или вы так сильно быстро хотите закрыть это "неугодный топик".

    тут етого TDD на 3 стр развели,чуть на личности не перешли- не находиш ?
    14 июн 13, 02:02    [14431472]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6723
    Maxx
    тут етого TDD на 3 стр развели,чуть на личности не перешли- не находиш ?
    Неа.
    Вообще ничего не было сказано. Или вы тролите?
    14 июн 13, 03:17    [14431527]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    rino_spam
    Member

    Откуда:
    Сообщений: 4
    Вот тут есть кое что о влиянии внешних ключей (fk) на производительность запросов
    [url=]http://www.f1incode.com/2011/09/foreignkeyoptimization.html[/url]
    14 июн 13, 07:16    [14431587]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47001
    Mnior
    (вешать ограничения можно и на представления)
    Не понял.
    Или это не про MSSQL?
    14 июн 13, 09:52    [14432105]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    defragmentator
    Member

    Откуда:
    Сообщений: 20504
    rino_spam
    Вот тут есть кое что о влиянии внешних ключей (fk) на производительность запросов
    [url=]http://www.f1incode.com/2011/09/foreignkeyoptimization.html[/url]

    Благодарю, интересная статья.
    14 июн 13, 09:57    [14432122]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    kain111
    Member

    Откуда:
    Сообщений: 226
    Пользуясь случаем, раз уж тема так всех волнующая, вопрос ( не путать с вбросом :))
    В случае существования ФК какой опыт и соображения существует у форумчан по поводу каскадного удаления. Интересует именно опыт, т.е. гипотетические ситуации где это полезно и выгодно и подводные камни которые следует рассматривать при применении.
    14 июн 13, 09:58    [14432130]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Guf
    Member

    Откуда: Новосибирск
    Сообщений: 647
    kain111
    В случае существования ФК какой опыт и соображения существует у форумчан по поводу каскадного удаления. ... подводные камни которые следует рассматривать при применении.

    Вот, например

    Сообщение было отредактировано: 14 июн 13, 11:11
    14 июн 13, 10:28    [14432273]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    ку-ку
    Guest
    MasterZiv
    А под "связями" -- relation -- имеются в виду таблицы, а не "связи между ними".


    ну сколько повторять, что в математике и в теории БД это ОТНОШЕНИЕ.
    а таблица -- его графическое представление.
    читайте Кодда и Дэйта, блин!
    14 июн 13, 11:30    [14432713]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 48983
    Я знаю откуда растут ноги этого вопроса. В последнее время лет 5-10 резко
    упала культура SQL-знаний у разработчиков. Настойчиво культивируется
    тезис о том что SQL-мёртв/умер/устарел/некрасив/неудобен. Растёт разделение
    задачи на DBMS и APP слои причём DBMS теряет свои сильные стороны и используется
    очень тупо. В основном как сторедж лишённый бизнес-логики. По сути - файловый
    сервак. Засилие ORM-решений производит кучу DDL-SQL кода который никто не
    ревьювает и вообще не интересуется наличием в этом коде бизнес-правил
    (constraints, triggers).
    14 июн 13, 14:02    [14433754]     Ответить | Цитировать Сообщить модератору
     Re: Скажите, а обязательно нужно делать связи между таблицами?  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6723
    mayton
    Настойчиво культивируется тезис о том что SQL-мёртв/умер/устарел/некрасив/неудобен. Растёт разделение
    задачи на DBMS и APP слои
    Дальше копайте. Стандартный "Испорченный телефон".
    Не надо подменять результат некоторого процесса как цель. Ни MSSQL ни RDBS ни разделение приложения на слои не есть основа.
    Как я писал выше (14430733) и изначально считалось что система декларируется/описывается, а софт и железо это интерпретирует эффективным способом и подстраивается под задачи.
    А сейчас всё наоборот, доходит до полного абсурда.

    FK должно быть логическим описанием задачи, на этом "убожестве первого поколения" (SQL). А в итоге мы имеем "убожество третьего поколения" (тесты и TDD).
    Вместо того чтобы устранять проблемы реализации, неточности подхода и языков, мы имеем в промежутке костыль, а потом пытаемся его сделать идеальным. Плодя ещё костыли, которые пытаемся опять сделать идеальными.
    Создавая целую науку TDD и покупая и пиля дофига инструментов для него, ещё один кирпичек в огромной отрасли, отрасль IT, отрасль костылей.
    Пол Грэм смотрит на это с умилением.
    14 июн 13, 15:40    [14434468]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить