|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
Добрый день Уважаемые! Хочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 13:31 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
Скажем так - нет ни одной вменяемой причины этого не делать. Теоретически без обьявления внешних ключей обновления происходят чуть-чуть быстрее, но на практике это заметить, ээ, непросто - а вот затупы оптимизатора из-за недостатка информации и грязь в данных заметить куда как легче. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 14:32 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
И про индексы на внешние ключи не забываем, во избежании... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 15:39 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotправильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет? в зависимости от зависимости. Бывают разные случаи: чаще всего да надо ссылки делать FK, но бывают случаи когда так делать не нужно. Универсального рецепта нет. На каждый конкретный пример надо смотреть и решать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 15:41 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
Relic HunterИ про индексы на внешние ключи не забываем, во избежании... Это что значит? Т.е. кроме описания FK objID->objects(id) ещё надо KEY objIdx (objID)? Разве наличие FK не даёт индекса? Объясните пожалуйста. На всяк случай я в MariaDB всё это делаю. Кот МатроскинСкажем так - нет ни одной вменяемой причины этого не делать. Теоретически без обьявления внешних ключей обновления происходят чуть-чуть быстрее, но на практике это заметить, ээ, непросто - а вот затупы оптимизатора из-за недостатка информации и грязь в данных заметить куда как легче. Хорошо, учту. А то делал всегда делал всё жёстко описывая связями а потом подумал, так а надо ли и решил уточнить тут. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 15:48 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormot, Если у вас oltp, то нужно. Если же dwh, то не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 15:54 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
Relic HunterИ про индексы на внешние ключи не забываем, во избежании... Или это имеется ввиду накладывать условие уникальности FK или их комбинации в случае такого правила в предметной области? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 18:32 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotРазве наличие FK не даёт индекса? Объясните пожалуйста.The foreign key constraint alone does not provide the index - one must (and should) be created. https://sqlperformance.com/2012/11/t-sql-queries/benefits-indexing-foreign-keys ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 22:26 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotRelic HunterИ про индексы на внешние ключи не забываем, во избежании... Или это имеется ввиду накладывать условие уникальности FK или их комбинации в случае такого правила в предметной области? No. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 22:28 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotРазве наличие FK не даёт индекса? Объясните пожалуйста. На всяк случай я в MariaDB всё это делаю.Зависит от СУБД. https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist. This index might be silently dropped later, if you create another index that can be used to enforce the foreign key constraint. index_name, if given, is used as described previously. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2019, 22:40 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
Relic HunterThe foreign key constraint alone does not provide the index - one must (and should) be created. miksoft https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan. In the referencing table, there must be an index where the foreign key columns are listed as the first columns in the same order. Such an index is created on the referencing table automatically if it does not exist. This index might be silently dropped later, if you create another index that can be used to enforce the foreign key constraint. index_name, if given, is used as described previously. Охренеть. Вот что называется век живи и столько же учись. А я всю жизнь жил в полной уверенности, что описания FK хватает и не парился. Жесть какая. Т.е. для каждого FOREIGN KEY надо создать дополнительно KEY idx (fkID)? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2019, 09:08 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotЖесть какая. авторMySQL требует индексов для внешних ключей и ссылочных ключей, чтобы проверка внешних ключей могла быть быстрой и не требовала сканирования таблицы. В ссылочной таблице должен быть индекс, в котором столбцы внешнего ключа перечислены как первые столбцы в том же порядке. Такой индекс создается в ссылочной таблице автоматически, если он не существует. Этот индекс может быть автоматически удален позже, если вы создадите другой индекс, который можно будет использовать для применения ограничения внешнего ключа. index_name, если дано, используется, как описано ранее. сколько же всего мы не знаем, проработав в аксесс 20 лет ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2019, 10:04 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotОхренеть. Вот что называется век живи и столько же учись. А я всю жизнь жил в полной уверенности, что описания FK хватает и не парился. Жесть какая. Т.е. для каждого FOREIGN KEY надо создать дополнительно KEY idx (fkID)? (postgres): Код: sql 1.
id в users должен иметь уникальный индекс (обычно PK) uid в users_ops должен иметь любой индекс ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2019, 13:41 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
и да, каждый такой индекс будет грузить таблицу, поэтому нет, не нужно бездумно лепить FK на каждый чих вот конкретно такой FK - милое дело, т.к. эти индексы и так всегда присутствуют в идеале связи ставятся на колонки, в которых уже есть индекс а вот если новый индекс надо создавать только под FK, вот тут уже надо подумать и взвесить - часто можно и без него обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2019, 13:45 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
но в любом случае, когда в одной таблице id, а в другой ссылка на этот id, то FK нужен, чтобы при удалении автоматом всё делалось ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2019, 13:47 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
вот с триггерами ситуация гораздо хуже они могут попасть в цикл и так протормозить базу, что раком встанет весь сайт вот их я вообще не использую. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2019, 13:49 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotТ.е. для каждого FOREIGN KEY надо создать дополнительно KEY idx (fkID)?Совсем необязательно. Основная задача внешнего ключа гарантировать ссылочную целостность. Для этого вполне достаточно основного ключа или ограничения уникальности на основной таблице. В основном, индекс на внешнем ключе нужен только если по этому полю(ям) выполняется фильтрация, да и то есть ситуации, когда даже в таком случае индекс всё равно может оказаться излишним. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2019, 22:23 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotДобрый день Уважаемые! Хочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет? что за вопрос. при ПРОЕКТИРОВАНИИ - конечно же правильно. т.е на уровне логической модели - да При реализации уже (на уровне физической модели) - возможны варианты ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 12:02 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
ChAkormotТ.е. для каждого FOREIGN KEY надо создать дополнительно KEY idx (fkID)?Совсем необязательно. Основная задача внешнего ключа гарантировать ссылочную целостность. Для этого вполне достаточно основного ключа или ограничения уникальности на основной таблице. В основном, индекс на внешнем ключе нужен только если по этому полю(ям) выполняется фильтрация, да и то есть ситуации, когда даже в таком случае индекс всё равно может оказаться излишним. Индекс больше нужен потому, что где внешний ключ - там наверняка будут по нему джойны с таблицей, на которую он ссылается. Надобность проверить по-моему очень легко - сджойнить эти таблицы с реальными данными и посмотреть план запроса - используется ли индекс или нет, потому что это очень сильно может зависеть от объема данных и от статистики. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 00:49 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
fkthatChAИндекс больше нужен потому, что где внешний ключ - там наверняка будут по нему джойны с таблицей, на которую он ссылается. Надобность проверить по-моему очень легко - сджойнить эти таблицы с реальными данными и посмотреть план запроса - используется ли индекс или нет, потому что это очень сильно может зависеть от объема данных и от статистики.Безусловно, практика - критерий истины, но по моим многолетним наблюдениям для JOIN часто более чем достаточно индекса со стороны основной таблицы, так как в запросах хотят видеть их данные, потому что чаще всего это какие-то справочники. Само слияние по индексам, к сожалению, не спасает от bookmark lookup в подчинённой таблице, если только он удачно не впишется в кластерный индекс. В результате польза от него бывает не так велика, как бы хотелось. В то же время, если внешние значения активно и независимо используются при фильтрации, то тут, конечно, без индекса никуда. Если, конечно, выборка, опять же, не идёт по всей таблице или фильтрация по другим полю(ям) уже её неплохо ограничивают. Так что речь идёт не столько о том, будет или нет использоваться индекс, а будет ли от него реальный выигрыш, а не только лишние траты ресурсов на его создание и поддержание. Обилие индексов может само собой создавать немалые проблемы, их создание должно быть объективно аргументированно, избегая бездумной комбинаторики на все мыслимые и немыслимые случаи. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2019, 10:41 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
ChAБезусловно, практика - критерий истины, …... Однако, можно предположить что истины нет критерия. Есть критерии у заблуждений. Я уже не говорю про Ницше - истины вообще не существует, а существуют неопровержимые заблуждения. Индексы на внешние ключи нужны в некоторых СУБД, так как иначе может в некоторых ситуациях возникнуть блокировка всей дочерней таблы без такого индекса, а с индексом нет. Наблюдал такое в 8 версии Оракла. Случай редкий. Но все же у заказчика начались зависания. С тех пор предпочитал ставить индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 14:36 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
полудухи да, каждый такой индекс будет грузить таблицу, поэтому нет, не нужно бездумно лепить FK на каждый чих вот конкретно такой FK - милое дело, т.к. эти индексы и так всегда присутствуют в идеале связи ставятся на колонки, в которых уже есть индекс а вот если новый индекс надо создавать только под FK, вот тут уже надо подумать и взвесить - часто можно и без него обойтись. Давайте новый флейм про FK на пару дюжин страниц ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 17:06 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
полудухно в любом случае, когда в одной таблице id, а в другой ссылка на этот id, то FK нужен, чтобы при удалении автоматом всё делалось FK нужен не для "автоматом", а чтобы в таблицу гамнища гору не навалили. "Автоматом" это уже так, просто опциональное удобство, которое не всегда и удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 17:09 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotДобрый день Уважаемые! Хочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет? Конечно стоит, всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 12:48 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
kormotХочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 13:40 |
|
Стоит ли всегда записи описывать внешними ключами?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2019, 21:01 |
|
|
start [/forum/topic.php?all=1&fid=32&tid=1539935]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 240ms |
total: | 366ms |
0 / 0 |