|
|
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
Рассматривал на досуге структуру MSCRM Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations не созданы Я так понимаю что при большом количестве связей БД начинает тормозить при операциях вставки, удаления, обновления Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 13:59 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
spначинает тормозить при операциях вставки, удаления, обновления Так действительно многие думают, согласен. Но кем это доказано, покажите доказательство. Нельзя же проектировать систему, основываясь на слухах. Если вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос? Триггера? Проверка на клиенте? Вы уверены, что это будет быстрее? Почитает у Т. Кайта. Так же все зависит от используемой СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 17:55 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
Максим Нspначинает тормозить при операциях вставки, удаления, обновления Так действительно многие думают, согласен. Но кем это доказано, покажите доказательство. Нельзя же проектировать систему, основываясь на слухах. Если вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос? Триггера? Проверка на клиенте? Вы уверены, что это будет быстрее? Почитает у Т. Кайта. Так же все зависит от используемой СУБД. У себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 19:24 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
Максим НЕсли вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос? Ну MS делает же без FK и все работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 19:25 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
spУ себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как пример 1. Форенкеями нужно тоже грамотно пользоваться 2. Не знаю как в MSSQL, но, например, в Oracle FK по умолчанию создаются без индекса, вы сами решаете нужен он или нет 3. Вы уверены, что сможете самостоятельно найти зависимые записи в дочерних и родительских таблицах и разобраться с ними (удалить, обновить, запретить модификацию) быстрее чем это делает база?:) spНу MS делает же без FK и все работает! Про MS не знаю (возможно подразумевается что эта база будет работать только с одним единственным клиентом, который сам контролирует целостность), но что если вашей базой без фк будут пользоваться сторонние приложения, которые ничего не знают о структуре БД? Что если в приложении допущена ошибка? Ссылочная целостность одна из ключевых возможностей реляционных БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 20:03 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
spУ себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как примерДля такого мизерного количества записей не делать констрейны - абсурд. Просто сделайте индексы для поля UserID в ссылающихся на User таблицах, по умолчанию их нет. Торможение действительно есть, но оно будет хоть как то заметно при вставках и удалениях миллиардов записей в день или в час. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 22:20 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
spУ себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как примерТо есть у вас при удалении пользователя делается скан всех таблиц базы - конечно, будет отваливаться; при этом может отваливается не из за скана милиона записей (это не так долго, в памяти-то), а из за того, что записи в других таблицах могут блокироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 22:22 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
> Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations > не созданы > Я так понимаю что при большом количестве связей БД начинает тормозить при > операциях вставки, удаления, обновления > Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует?? Ты сколько в своей жизни БД спроектировал, и какого размера? Вставляй везде FK, и вот когда дойдёт до того, что у тебя в БД будут тормозить FK CONSTRAINT, вот тогда и будешь их drop-ать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 22:48 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
MasterZiv Ты сколько в своей жизни БД спроектировал, и какого размера? +1 А еще сколько покоцанных баз правил? В скольких чужих копался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 22:53 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
SERG1257MasterZiv Ты сколько в своей жизни БД спроектировал, и какого размера? +1 А еще сколько покоцанных баз правил? В скольких чужих копался? а еще где покопацца ? сколько вам для размера и количество будет достаточно? мужики мы тут не членами мерятся пришли - поэтому оставьте весь свой пафос и сарказм для своих друзей - а тут по делу выступайте пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 23:30 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
MasterZiv > Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations > не созданы > Я так понимаю что при большом количестве связей БД начинает тормозить при > операциях вставки, удаления, обновления > Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует?? Ты сколько в своей жизни БД спроектировал, и какого размера? Вставляй везде FK, и вот когда дойдёт до того, что у тебя в БД будут тормозить FK CONSTRAINT, вот тогда и будешь их drop-ать. я думаю что имею право спросить у тебя - а ты сколько то в жизни прожил для начала? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 23:31 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
MasterZiv и во-вторых в публичных местах принято у культурных людей выказывать уважение собеседнику а не тыкать! мы с тобой коров не пасли и на одном поле не гадили - поэтому думаю не стоит мне тыкать в следующий раз! будь так любезен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 23:33 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
alexeyvgДля такого мизерного количества записей не делать констрейны - абсурд. Просто сделайте индексы для поля UserID в ссылающихся на User таблицах, по умолчанию их нет. Торможение действительно есть, но оно будет хоть как то заметно при вставках и удалениях миллиардов записей в день или в час. Теории то мы все учили и от тойже MS мануалы читали:) Но на практике сама MS этим инструкциям ну никах не следует - посмотрите в MS CRM SDK схему базы данных - много любопытного там можно увидеть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2012, 23:37 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
sp Теории то мы все учили и от тойже MS мануалы читали:) Но на практике сама MS этим инструкциям ну никах не следует - посмотрите в MS CRM SDK схему базы данных - много любопытного там можно увидеть) Давайте говорить предметно. Как мне стоит понимать сабж 1 Нас обманывали, сама MS этим инструкциям ну никах не следует , FK - зло, придуманное производителями железа для поднятия продаж 2 Пользуемся здравым смыслом. Делаем нормальную базу, и если испытываем проблемы, выносим это ограничение из базы на другой уровень, описываем в документации, возможно устраиваем проверки и т.п. Если ваш выбор 2 то найдите разницу с постом MasterZiv. Или дайте свою интерпретацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 02:42 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
alexeyvgДля такого мизерного количества записей не делать констрейны - абсурд. Я подозреваю, автор деликатно забыл упомянуть, что на констрейнте висел on delete cascade ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 09:50 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
spalexeyvgДля такого мизерного количества записей не делать констрейны - абсурд. Просто сделайте индексы для поля UserID в ссылающихся на User таблицах, по умолчанию их нет. Торможение действительно есть, но оно будет хоть как то заметно при вставках и удалениях миллиардов записей в день или в час. Теории то мы все учили и от тойже MS мануалы читали:) Но на практике сама MS этим инструкциям ну никах не следует - посмотрите в MS CRM SDK схему базы данных - много любопытного там можно увидеть)Есть выбор разработчика для конкретной ситуации, да и ошибки есть тоже. Но никак не общее правило всего MS при разработке. Вы в стартовом посте какой вопрос задаёте? Если именно про MS CRM, то самое правильное - спросить у программиста (сделать это несложно, например, в блоге разработчиков) Если интересны общие правила, то вам про них сказали - делать ключи и констрейны. Могут быть таблицы без FK и даже без PK, но это должен быть осознанный выбор для конкретной ситуации, нарушающий общее правило, и нужно осознавать все недостатки этого выбора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 16:31 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
softwareralexeyvgДля такого мизерного количества записей не делать констрейны - абсурд. Я подозреваю, автор деликатно забыл упомянуть, что на констрейнте висел on delete cascade Нет вы неверно подозреваете - не упомянул - означает что такое отсутствует как таковое! :) скорее всего проверка констрейнтов занимает такое время - другого объяснения не вижу - потому как у удаляемой записи в других таблицах отсутствовали подчиненные записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 18:41 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
поэтому оставьте весь свой пафос и > сарказм Никакого пафоса или сарказма. Ещё раз, забудь про всё, что там тебе говорили или где-то ты читал про то, что FK тормозят, и тупо создавай FK везде. Пока сам не наткнёшься на то, что FK тормозит. ТОГДА будешь думать. Сейчас не надо. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 20:18 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
> мы с тобой коров не пасли и на одном поле не гадили - поэтому думаю не стоит мне > тыкать в следующий раз! будь так любезен :) Я в форумах всегда всем говорю "ты". Мне лень проявлять высокопарность. Мы все коллеги, все товарищи по оружию. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 20:20 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
> Есть выбор разработчика для конкретной ситуации, да и ошибки есть тоже. Но никак > не общее правило всего MS при разработке. > > Вы в стартовом посте какой вопрос задаёте? Если именно про MS CRM, то самое > правильное - спросить у программиста (сделать это несложно, например, в блоге > разработчиков) > > Если интересны общие правила, то вам про них сказали - делать ключи и > констрейны. Могут быть таблицы без FK и даже без PK, но это должен быть > осознанный выбор для конкретной ситуации, нарушающий общее правило, и нужно > осознавать все недостатки этого выбора. +1 . Хотел сам то же написать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 20:21 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
sp У себя замечал - когда ссылка на таблицу Users присутствует в большинстве таблиц (т.е в миллионах записей) - практически невозможно чтоб не отвалился коннект у клиента из-за таймаута удалить юзера - это как пример Это не повод, чтобы не использовать FK. Возможное решение в данной ситуации - удалять запись не физически, а логически (добавить в таблицу Users колонку Is_deleted, присвоить ей значение True, в запросах выводить данные с is_Deleted = False). Физически удалять эти записи можно в моменты низкой нагрузки, например, ночью или по выходным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 22:51 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
spМаксим НЕсли вы не будете использовать встроенную в БД поддержку ссылочной целостности (FK), то как будете решать это вопрос? Ну MS делает же без FK и все работает! В этом случае необходимы дополнительные затраты труда программиста для поддержки целостности данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 22:52 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
spРассматривал на досуге структуру MSCRM Много таблиц в которых есть столбцы из других таблиц (FK) но физически relations не созданы Я так понимаю что при большом количестве связей БД начинает тормозить при операциях вставки, удаления, обновления Так почему об этом MS нигде не пишет в качестве рекомендаций, хотя сама использует?? Отсутствие FK - часто встречающийся антипаттерн. Почему в этой БД отсутствуют внешние ключи ? Может, она была создана еще лет 15-20 назад. Тогда вопросы производительности стояли гораздо более острее, чем сейчас. Может, ее создавали разработчики невысокой квалификации. Может, это сделано специально, чтобы труднее было бы разобраться в структуре БД. (Особенно если колонки PK и FK имеют разные имена -- очень трудно разобраться, что с чем соединяется. Видел я года три назад такую БД в одном проекте.) Например, в базе данных, которую использует для своих внутренних нужд Power Designer версии 15, не только отсутствуют все FK, но и таблицы и колонки имеют бессмысленные названия типа JKEWUIEW. Наверное, чтобы злые конкуренты не разобрались. Кстати говоря, профессионально сделанная схема базы данных, хорошо покрывающая какую-нибудь предметную область, сама по себе является большой ценностью. Что же касается влияния FK на производительность, то нужно сначала реализовать БД со всеми FK, посмотреть, влияет ли это где-нибудь на производительность, и только потом, возможно, какие-нибудь FK удалить. (А лучше не удалять, а сделать этому ключу disable, оставив его для документирования схемы БД). Опыт показывает, что для 80-85% таблиц в БД вопросы производительности не играют роли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 23:13 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
Flying DutchmanПочему в этой БД отсутствуют внешние ключи ?Нужно ещё учитывать специфику распространения и поддержки БД. Всё таки данное решение перед началом эксплуатации тестируют по полгода в тысячах компаний. В общем, как я уже писал, лучьше всего спросить у разработчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2012, 23:24 |
|
||
|
Так ли необходимо устанавливать relations между таблицами?
|
|||
|---|---|---|---|
|
#18+
Flying Dutchman, Спасибо за развернутый ответ! ) данная базейка выпущена в этом году и так все ключи GUID - может это как-то повлияло на их решение не связывать таблицы констрейнтами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 00:10 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37721483&tid=1541770]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 482ms |

| 0 / 0 |
