powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Так ли необходимо устанавливать relations между таблицами?
31 сообщений из 31, показаны все 2 страниц
Так ли необходимо устанавливать relations между таблицами?
    #37721281
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рассматривал на досуге структуру MSCRM
Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations не созданы
Я так понимаю что при большом количестве связей БД начинает тормозить при операциях вставки, удаления, обновления
Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует??
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721450
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spначинает тормозить при операциях вставки, удаления, обновления
Так действительно многие думают, согласен. Но кем это доказано, покажите доказательство. Нельзя же проектировать систему, основываясь на слухах.

Если вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос? Триггера? Проверка на клиенте? Вы уверены, что это будет быстрее? Почитает у Т. Кайта.

Так же все зависит от используемой СУБД.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721482
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим Нspначинает тормозить при операциях вставки, удаления, обновления
Так действительно многие думают, согласен. Но кем это доказано, покажите доказательство. Нельзя же проектировать систему, основываясь на слухах.

Если вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос? Триггера? Проверка на клиенте? Вы уверены, что это будет быстрее? Почитает у Т. Кайта.

Так же все зависит от используемой СУБД.

У себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как пример
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721483
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим НЕсли вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос?

Ну MS делает же без FK и все работает!
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721508
Максим Н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spУ себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как пример
1. Форенкеями нужно тоже грамотно пользоваться
2. Не знаю как в MSSQL, но, например, в Oracle FK по умолчанию создаются без индекса, вы сами решаете нужен он или нет
3. Вы уверены, что сможете самостоятельно найти зависимые записи в дочерних и родительских таблицах и разобраться с ними (удалить, обновить, запретить модификацию) быстрее чем это делает база?:)

spНу MS делает же без FK и все работает!
Про MS не знаю (возможно подразумевается что эта база будет работать только с одним единственным клиентом, который сам контролирует целостность), но что если вашей базой без фк будут пользоваться сторонние приложения, которые ничего не знают о структуре БД? Что если в приложении допущена ошибка?
Ссылочная целостность одна из ключевых возможностей реляционных БД.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721570
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spУ себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как примерДля такого мизерного количества записей не делать констрейны - абсурд. Просто сделайте индексы для поля UserID в ссылающихся на User таблицах, по умолчанию их нет.

Торможение действительно есть, но оно будет хоть как то заметно при вставках и удалениях миллиардов записей в день или в час.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721573
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spУ себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как примерТо есть у вас при удалении пользователя делается скан всех таблиц базы - конечно, будет отваливаться; при этом может отваливается не из за скана милиона записей (это не так долго, в памяти-то), а из за того, что записи в других таблицах могут блокироваться.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721595
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations
> не созданы
> Я так понимаю что при большом количестве связей БД начинает тормозить при
> операциях вставки, удаления, обновления
> Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует??

Ты сколько в своей жизни БД спроектировал, и какого размера?

Вставляй везде FK, и вот когда дойдёт до того, что у тебя в БД будут тормозить
FK CONSTRAINT, вот тогда и будешь их drop-ать.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721600
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Ты сколько в своей жизни БД спроектировал, и какого размера?
+1
А еще сколько покоцанных баз правил? В скольких чужих копался?
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721618
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257MasterZiv Ты сколько в своей жизни БД спроектировал, и какого размера?
+1
А еще сколько покоцанных баз правил? В скольких чужих копался?

а еще где покопацца ? сколько вам для размера и количество будет достаточно?
мужики мы тут не членами мерятся пришли - поэтому оставьте весь свой пафос и сарказм для своих друзей - а тут по делу выступайте пожалуйста!
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721619
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
> Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations
> не созданы
> Я так понимаю что при большом количестве связей БД начинает тормозить при
> операциях вставки, удаления, обновления
> Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует??

Ты сколько в своей жизни БД спроектировал, и какого размера?

Вставляй везде FK, и вот когда дойдёт до того, что у тебя в БД будут тормозить
FK CONSTRAINT, вот тогда и будешь их drop-ать.


я думаю что имею право спросить у тебя - а ты сколько то в жизни прожил для начала? ))
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721620
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv

и во-вторых в публичных местах принято у культурных людей выказывать уважение собеседнику а не тыкать!
мы с тобой коров не пасли и на одном поле не гадили - поэтому думаю не стоит мне тыкать в следующий раз! будь так любезен :)
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721623
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДля такого мизерного количества записей не делать констрейны - абсурд. Просто сделайте индексы для поля UserID в ссылающихся на User таблицах, по умолчанию их нет.

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

Теории то мы все учили и от тойже MS мануалы читали:)
Но на практике сама MS этим инструкциям ну никах не следует - посмотрите в MS CRM SDK схему базы данных - много любопытного там можно увидеть)
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721681
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp Теории то мы все учили и от тойже MS мануалы читали:)
Но на практике сама MS этим инструкциям ну никах не следует - посмотрите в MS CRM SDK схему базы данных - много любопытного там можно увидеть) Давайте говорить предметно. Как мне стоит понимать сабж
1 Нас обманывали, сама MS этим инструкциям ну никах не следует , FK - зло, придуманное производителями железа для поднятия продаж
2 Пользуемся здравым смыслом. Делаем нормальную базу, и если испытываем проблемы, выносим это ограничение из базы на другой уровень, описываем в документации, возможно устраиваем проверки и т.п.

Если ваш выбор 2 то найдите разницу с постом MasterZiv. Или дайте свою интерпретацию.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721720
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДля такого мизерного количества записей не делать констрейны - абсурд.
Я подозреваю, автор деликатно забыл упомянуть, что на констрейнте висел on delete cascade
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37721965
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spalexeyvgДля такого мизерного количества записей не делать констрейны - абсурд. Просто сделайте индексы для поля UserID в ссылающихся на User таблицах, по умолчанию их нет.

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

Теории то мы все учили и от тойже MS мануалы читали:)
Но на практике сама MS этим инструкциям ну никах не следует - посмотрите в MS CRM SDK схему базы данных - много любопытного там можно увидеть)Есть выбор разработчика для конкретной ситуации, да и ошибки есть тоже. Но никак не общее правило всего MS при разработке.

Вы в стартовом посте какой вопрос задаёте? Если именно про MS CRM, то самое правильное - спросить у программиста (сделать это несложно, например, в блоге разработчиков)

Если интересны общие правила, то вам про них сказали - делать ключи и констрейны. Могут быть таблицы без FK и даже без PK, но это должен быть осознанный выбор для конкретной ситуации, нарушающий общее правило, и нужно осознавать все недостатки этого выбора.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722054
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwareralexeyvgДля такого мизерного количества записей не делать констрейны - абсурд.
Я подозреваю, автор деликатно забыл упомянуть, что на констрейнте висел on delete cascade

Нет вы неверно подозреваете - не упомянул - означает что такое отсутствует как таковое! :)
скорее всего проверка констрейнтов занимает такое время - другого объяснения не вижу - потому как у удаляемой записи в других таблицах отсутствовали подчиненные записи
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722128
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поэтому оставьте весь свой пафос и
> сарказм

Никакого пафоса или сарказма. Ещё раз, забудь про всё, что там тебе говорили или
где-то ты читал про то, что FK тормозят, и тупо создавай FK везде.

Пока сам не наткнёшься на то, что FK тормозит. ТОГДА будешь думать. Сейчас не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722131
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> мы с тобой коров не пасли и на одном поле не гадили - поэтому думаю не стоит мне
> тыкать в следующий раз! будь так любезен :)

Я в форумах всегда всем говорю "ты". Мне лень проявлять высокопарность.
Мы все коллеги, все товарищи по оружию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722133
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Есть выбор разработчика для конкретной ситуации, да и ошибки есть тоже. Но никак
> не общее правило всего MS при разработке.
>
> Вы в стартовом посте какой вопрос задаёте? Если именно про MS CRM, то самое
> правильное - спросить у программиста (сделать это несложно, например, в блоге
> разработчиков)
>
> Если интересны общие правила, то вам про них сказали - делать ключи и
> констрейны. Могут быть таблицы без FK и даже без PK, но это должен быть
> осознанный выбор для конкретной ситуации, нарушающий общее правило, и нужно
> осознавать все недостатки этого выбора.

+1 . Хотел сам то же написать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722322
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp
У себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как пример

Это не повод, чтобы не использовать FK. Возможное решение в данной ситуации - удалять запись не физически, а логически (добавить в таблицу Users колонку Is_deleted, присвоить ей значение True, в запросах выводить данные с is_Deleted = False). Физически удалять эти записи можно в моменты низкой нагрузки, например, ночью или по выходным.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722323
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spМаксим НЕсли вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос?

Ну MS делает же без FK и все работает!

В этом случае необходимы дополнительные затраты труда программиста для поддержки целостности данных.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722335
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spРассматривал на досуге структуру MSCRM
Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations не созданы
Я так понимаю что при большом количестве связей БД начинает тормозить при операциях вставки, удаления, обновления
Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует??

Отсутствие FK - часто встречающийся антипаттерн.

Почему в этой БД отсутствуют внешние ключи ?

Может, она была создана еще лет 15-20 назад. Тогда вопросы производительности стояли гораздо более острее, чем сейчас.

Может, ее создавали разработчики невысокой квалификации.

Может, это сделано специально, чтобы труднее было бы разобраться в структуре БД. (Особенно если колонки PK и FK имеют разные имена -- очень трудно разобраться, что с чем соединяется. Видел я года три назад такую БД в одном проекте.)
Например, в базе данных, которую использует для своих внутренних нужд Power Designer версии 15, не только отсутствуют все FK, но и таблицы и колонки имеют бессмысленные названия типа JKEWUIEW. Наверное, чтобы злые конкуренты не разобрались.

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

Что же касается влияния FK на производительность, то нужно сначала реализовать БД со всеми FK, посмотреть, влияет ли это где-нибудь на производительность, и только потом, возможно, какие-нибудь FK удалить. (А лучше не удалять, а сделать этому ключу disable, оставив его для документирования схемы БД). Опыт показывает, что для 80-85% таблиц в БД вопросы производительности не играют роли.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722345
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying DutchmanПочему в этой БД отсутствуют внешние ключи ?Нужно ещё учитывать специфику распространения и поддержки БД. Всё таки данное решение перед началом эксплуатации тестируют по полгода в тысячах компаний.

В общем, как я уже писал, лучьше всего спросить у разработчиков.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722384
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flying Dutchman,

Спасибо за развернутый ответ! )
данная базейка выпущена в этом году и так все ключи GUID - может это как-то повлияло на их решение не связывать таблицы констрейнтами?
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722529
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spвыпущена в этом годуВ 2003
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722573
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> sp
>
> У себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц
> (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у
> клиента из-за таймаута удалить юзера - это как пример

В таких случаях нужно создавать на поля FK в дочерней таблице индексы,
если их нет. Без индекса в дочерней таблице update/delete родительской будут
давать table scan-ы по всем дочерним таблицам , в которых нет таких индексов,
для всех FK, существующих на родительской таблице.

Автоматом такие индексы создают не все СУБД, некоторые имеют опциив CREATE
CONSTRAINT для таких индекстов.

Но нужны эти индексы не всегда, поэтому и логично их не создавать автоматом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37722577
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> данная базейка выпущена в этом году и так все ключи GUID - может это как-то
> повлияло на их решение не связывать таблицы констрейнтами?

Типы данных не имеют значения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37723648
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgspвыпущена в этом годуВ 2003
это вы имеете в виду дату основания, а версия CRM2011 выпущена в этом году или в конце прошлого :)
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37724142
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spalexeyvgпропущено...
В 2003
это вы имеете в виду дату основания, а версия CRM2011 выпущена в этом году или в конце прошлого :)Ну вы же имеете в виду дату основания, потому что версия CRM2011 (выпущена в 2010) не отличается кардинально по модели данных от любой прежней версии. Продукт ещё молодой, не успел поменяться.
...
Рейтинг: 0 / 0
Так ли необходимо устанавливать relations между таблицами?
    #37726427
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spРассматривал на досуге структуру MSCRM
Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations не созданы
...
Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует??Можно предположить, что MS-ту стыдно рекомендовать этот подход остальным. .
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Так ли необходимо устанавливать relations между таблицами?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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