Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
У нас в проекте таблица Users связана почти со всеми таблицами.
Разумеется таблички могут быть ооочень большими.
При попытке удалить юзера - сервер шуршит секунд 20-30 - но это не проблема - подождем!
Я подозреваю что и с запросами не все так гладко...

Подозрения у меня закрались после того как начал рассматривать диаграмму БД Microsoft CRM - и фу какая мерзость!!!! предательство и низменная ложь!!!! сколько лет маскировки под стандарты!!! :) - там почти отсутствуют связи между таблицами!!!!
Ссылочная целостность доверена процедурам и функциям...

Вот подозрения меня и мучают... потерял покой и сон... пишу как какой-то программер среди ночи...:)
Люди, помогите обрести покой и уверенность в справедливости в этом мире! Дайте мне веру в ссылочную целостность при помощи связей!!!

Или это правда, что связи можно не устанавливать а обрабатывать ссылочную целостность в функциях и триггерах и это быстрее чем средствами самой БД при помощи связей (мне только почему-то никто из MS этого не сказал)????
29 сен 12, 03:42    [13242837]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
связи то конечно там есть :)
ну немного усилил, сгустил... ну это чтоб заинтересовать, но все же связи установлены выборочно: к примеру SystemUserBase (аналог Users) связана лишь с незначительным количеством таблиц, хотя логическая связь есть почти с каждой таблицей (т.е. CreatedBy что эквивалентно UserID есть в любой таблице)
29 сен 12, 04:12    [13242841]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
Читатель неместный
Guest
Если это ссылка именно на юзера... то удалять их вы не будете... если вообще пользователь что либо когда либо делал в базе.
И считаю).. что базу нужно денормализовать, убрать везде эти связи(через триггера) и сажать их в базу - логин, пользователя и хост например... во все таблицы.
FK вообще не пользую, если кому это интересно)
Есть ограничения в 2005м на количество связей к одной таблице - ну около 250 - это очень немного.
Они вроде полезны очень при построении планов запросов.
В случае репликации с ними вообще геммор большой
29 сен 12, 08:04    [13242869]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
sp
Или это правда, что связи можно не устанавливать а обрабатывать ссылочную целостность в функциях и триггерах и это быстрее чем средствами самой БД при помощи связей (мне только почему-то никто из MS этого не сказал)????
Мне кажется, FK быстрее. Проверка в триггере всех таблиц будет точно не лучьше.

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

Но если такая необходимость всё таки есть, то нужно в таблицах сделать индексы на поле UserId, чтобы проверка делалась быстро.
29 сен 12, 08:43    [13242874]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Удалять это моветон. Это нарушает принцип референтности, необходимый для максимальной эффективности декларативного подхода. Отсутствие мутаторов очень сильно упрощает систему.
Иногда бывает, если ошибочные или мёртвые записи (нигде не встречаются и не нужны).
Да, ставятся индексы, если это часто (когда сначала вставляют, потом думают), иначе ждут момента (нет нагрузки) или вообще оставляют (полем Deleted/Hide управляют).
Естественно что CASCADE ставить нельзя (ну разве только на UPDATE - тот ещё дет сад).

А не использовать FK это как бежать за такси, чтобы больше сэкономить.
29 сен 12, 18:11    [13243827]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
Mnior
Удалять это моветон. Это нарушает принцип референтности, необходимый для максимальной эффективности декларативного подхода. Отсутствие мутаторов очень сильно упрощает систему.
Иногда бывает, если ошибочные или мёртвые записи (нигде не встречаются и не нужны).
Да, ставятся индексы, если это часто (когда сначала вставляют, потом думают), иначе ждут момента (нет нагрузки) или вообще оставляют (полем Deleted/Hide управляют).
Естественно что CASCADE ставить нельзя (ну разве только на UPDATE - тот ещё дет сад).

А не использовать FK это как бежать за такси, чтобы больше сэкономить.


все это я тоже понимаю, но почему в Microsoft CRM явно не установлены связи? зачемто они их явно не задекларировали! Почему??
29 сен 12, 20:17    [13244093]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
sp
все это я тоже понимаю, но почему в Microsoft CRM явно не установлены связи? зачемто они их явно не задекларировали! Почему??
Потому что разработчикам Microsoft CRM так захотелось.
29 сен 12, 20:55    [13244142]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
Гавриленко Сергей Алексеевич
sp
все это я тоже понимаю, но почему в Microsoft CRM явно не установлены связи? зачемто они их явно не задекларировали! Почему??
Потому что разработчикам Microsoft CRM так захотелось.


а почему им так захотелось???
есть же для этого основания или причины!?
29 сен 12, 21:17    [13244185]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
sp
а почему им так захотелось???
есть же для этого основания или причины!?
Да просто есть разные подходы к использованию FK

Скажем, отказ от FK обеспечит более свободные подходы к программированию клиента (например, проще использовать асинхронные средства модификации данных)
29 сен 12, 21:26    [13244204]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
alexeyvg
(например, проще использовать асинхронные средства модификации данных)


а можно подробней про это?
каже тогда с целостностью данных быть? насколько асинхронная модификация? в одной или разных транзакциях??
29 сен 12, 23:12    [13244398]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
Alexander Titkin
Member

Откуда: Москва
Сообщений: 91
sp,

а также чтобы не совали нос в чужие базы ;)в БД MS TFS также отсутствуют FK, похоже на "стиль"
29 сен 12, 23:12    [13244399]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
Alexander Titkin
sp,
а также чтобы не совали нос в чужие базы ;)в БД MS TFS также отсутствуют FK, похоже на "стиль"


не совать нос - это значит не обучаться и не узнавать нового! это ваш девиз!?? :)
29 сен 12, 23:26    [13244433]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
Alexander Titkin
sp,
а также чтобы не совали нос в чужие базы ;)в БД MS TFS также отсутствуют FK, похоже на "стиль"


я так же как и Буратино люблю делать открытия :)
29 сен 12, 23:27    [13244438]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
все же какойто смысл в этом есть раз сама глава нашей секты делает такое!!?
29 сен 12, 23:28    [13244441]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
sp
alexeyvg
(например, проще использовать асинхронные средства модификации данных)
а можно подробней про это?
каже тогда с целостностью данных быть? насколько асинхронная модификация? в одной или разных транзакциях??
Про что подробнее? С целостностью будет плохо, естественно. Насколько асинхронная - в чём мерять? В разных транзакциях.

Ну вообще в разных задачах и для разных целей используются разные подходы, это же естественно. И естественно, что разные затраты на проекты, разные специалисты.
29 сен 12, 23:40    [13244460]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
sp
Alexander Titkin
sp,
а также чтобы не совали нос в чужие базы ;)в БД MS TFS также отсутствуют FK, похоже на "стиль"


не совать нос - это значит не обучаться и не узнавать нового! это ваш девиз!?? :)
Обучаться на базах продуктов MS, имхо, не самая удачная идея.
30 сен 12, 00:43    [13244584]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
[quot sp]
Mnior
все это я тоже понимаю, но почему в Microsoft CRM явно не установлены связи? зачемто они их явно не задекларировали! Почему??
А кто сказал, что их там не было?
Это вполне нормальная практика, разрабатывать в ограничениях, и после того как основная часть системы вылизана - браться за спички.
Да и у CRM своя специфика.

К примеру, имеет ли смысл оптимизатору запросов генерить проверку FK, если при вставке явно указывается связанная колонка напрямую?
Задумывались ли об этом M$?
Вот поэтому я за продолжение идеологию RC - мульти-табличное изменение одной командой и за декларативные триггера.
FK некоторым кажется плохим из-за его "природы", но всё дело в том что он криво реализован.
30 сен 12, 01:17    [13244630]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
Alexander Titkin
Member

Откуда: Москва
Сообщений: 91
sp
Alexander Titkin
sp,
а также чтобы не совали нос в чужие базы ;)в БД MS TFS также отсутствуют FK, похоже на "стиль"


не совать нос - это значит не обучаться и не узнавать нового! это ваш девиз!?? :)


Отнюдь, это MS хочет чтобы Мы не совали нос, а Мы все равно суем) И, как правильно подметил Сергей Гавриленко, БД от MS не лучший пример для подражания
30 сен 12, 12:40    [13244975]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
Гавриленко Сергей Алексеевич
sp
пропущено...
не совать нос - это значит не обучаться и не узнавать нового! это ваш девиз!?? :)
Обучаться на базах продуктов MS, имхо, не самая удачная идея.


ну их по крайней мере стоит посмотреть...:) все же типа лидер секты!)))
а что вы предложите для всрытия? какие примеры для подражания, изучения? :)
30 сен 12, 13:35    [13245122]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
sp
Гавриленко Сергей Алексеевич
пропущено...
Обучаться на базах продуктов MS, имхо, не самая удачная идея.


ну их по крайней мере стоит посмотреть...:) все же типа лидер секты!)))
а что вы предложите для всрытия? какие примеры для подражания, изучения? :)

Бразилиський телеком, например
Очень, очень неплохо
Португальские идентификаторы поначалу угнетают, но потом это даже нравится
30 сен 12, 13:56    [13245153]     Ответить | Цитировать Сообщить модератору
 Re: Связи между таблицами  [new]
sp
Member

Откуда:
Сообщений: 3947
locky
Бразилиський телеком, например
Очень, очень неплохо
Португальские идентификаторы поначалу угнетают, но потом это даже нравится


да вы знаете толк в изврасчениях!!! :))
30 сен 12, 14:10    [13245172]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить