Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Стоит ли всегда записи описывать внешними ключами? / 25 сообщений из 27, страница 1 из 2
20.04.2019, 13:31
    #39804237
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
Добрый день Уважаемые!

Хочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет?
...
Рейтинг: 0 / 0
20.04.2019, 14:32
    #39804248
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
Скажем так - нет ни одной вменяемой причины этого не делать. Теоретически без обьявления внешних ключей обновления происходят чуть-чуть быстрее, но на практике это заметить, ээ, непросто - а вот затупы оптимизатора из-за недостатка информации и грязь в данных заметить куда как легче.
...
Рейтинг: 0 / 0
20.04.2019, 15:39
    #39804258
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
И про индексы на внешние ключи не забываем, во избежании...
...
Рейтинг: 0 / 0
20.04.2019, 15:41
    #39804259
Serguei
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotправильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет?

в зависимости от зависимости. Бывают разные случаи: чаще всего да надо ссылки делать FK, но бывают случаи когда так делать не нужно. Универсального рецепта нет.
На каждый конкретный пример надо смотреть и решать.
...
Рейтинг: 0 / 0
20.04.2019, 15:48
    #39804262
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
Relic HunterИ про индексы на внешние ключи не забываем, во избежании...
Это что значит? Т.е. кроме описания
FK objID->objects(id) ещё надо
KEY objIdx (objID)?

Разве наличие FK не даёт индекса? Объясните пожалуйста. На всяк случай я в MariaDB всё это делаю.

Кот МатроскинСкажем так - нет ни одной вменяемой причины этого не делать. Теоретически без обьявления внешних ключей обновления происходят чуть-чуть быстрее, но на практике это заметить, ээ, непросто - а вот затупы оптимизатора из-за недостатка информации и грязь в данных заметить куда как легче.
Хорошо, учту. А то делал всегда делал всё жёстко описывая связями а потом подумал, так а надо ли и решил уточнить тут. Спасибо!
...
Рейтинг: 0 / 0
20.04.2019, 15:54
    #39804263
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormot,

Если у вас oltp, то нужно.
Если же dwh, то не нужно.
...
Рейтинг: 0 / 0
20.04.2019, 18:32
    #39804285
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
Relic HunterИ про индексы на внешние ключи не забываем, во избежании...
Или это имеется ввиду накладывать условие уникальности FK или их комбинации в случае такого правила в предметной области?
...
Рейтинг: 0 / 0
20.04.2019, 22:26
    #39804324
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
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
...
Рейтинг: 0 / 0
20.04.2019, 22:28
    #39804326
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotRelic HunterИ про индексы на внешние ключи не забываем, во избежании...
Или это имеется ввиду накладывать условие уникальности FK или их комбинации в случае такого правила в предметной области?

No.
...
Рейтинг: 0 / 0
20.04.2019, 22:40
    #39804328
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
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.
...
Рейтинг: 0 / 0
21.04.2019, 09:08
    #39804405
kormot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
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)?
...
Рейтинг: 0 / 0
21.04.2019, 10:04
    #39804414
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotЖесть какая.
авторMySQL требует индексов для внешних ключей и ссылочных ключей, чтобы проверка внешних ключей могла быть быстрой и не требовала сканирования таблицы. В ссылочной таблице должен быть индекс, в котором столбцы внешнего ключа перечислены как первые столбцы в том же порядке. Такой индекс создается в ссылочной таблице автоматически, если он не существует. Этот индекс может быть автоматически удален позже, если вы создадите другой индекс, который можно будет использовать для применения ограничения внешнего ключа. index_name, если дано, используется, как описано ранее.

сколько же всего мы не знаем, проработав в аксесс 20 лет
...
Рейтинг: 0 / 0
21.04.2019, 13:41
    #39804458
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotОхренеть. Вот что называется век живи и столько же учись. А я всю жизнь жил в полной уверенности, что описания FK хватает и не парился.
Жесть какая.
Т.е. для каждого FOREIGN KEY надо создать дополнительно KEY idx (fkID)?
(postgres):
Код: sql
1.
ALTER TABLE users_ops ADD FOREIGN KEY (uid) REFERENCES users(id) ON DELETE CASCADE;


id в users должен иметь уникальный индекс (обычно PK)
uid в users_ops должен иметь любой индекс
...
Рейтинг: 0 / 0
21.04.2019, 13:45
    #39804459
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
и да, каждый такой индекс будет грузить таблицу, поэтому нет, не нужно бездумно лепить FK на каждый чих
вот конкретно такой FK - милое дело, т.к. эти индексы и так всегда присутствуют
в идеале связи ставятся на колонки, в которых уже есть индекс
а вот если новый индекс надо создавать только под FK, вот тут уже надо подумать и взвесить - часто можно и без него обойтись.
...
Рейтинг: 0 / 0
21.04.2019, 13:47
    #39804461
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
но в любом случае, когда в одной таблице id, а в другой ссылка на этот id, то FK нужен, чтобы при удалении автоматом всё делалось
...
Рейтинг: 0 / 0
21.04.2019, 13:49
    #39804462
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
вот с триггерами ситуация гораздо хуже
они могут попасть в цикл и так протормозить базу, что раком встанет весь сайт
вот их я вообще не использую.
...
Рейтинг: 0 / 0
21.04.2019, 22:23
    #39804552
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotТ.е. для каждого FOREIGN KEY надо создать дополнительно KEY idx (fkID)?Совсем необязательно. Основная задача внешнего ключа гарантировать ссылочную целостность. Для этого вполне достаточно основного ключа или ограничения уникальности на основной таблице. В основном, индекс на внешнем ключе нужен только если по этому полю(ям) выполняется фильтрация, да и то есть ситуации, когда даже в таком случае индекс всё равно может оказаться излишним.
...
Рейтинг: 0 / 0
26.04.2019, 12:02
    #39806682
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotДобрый день Уважаемые!

Хочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет?
что за вопрос. при ПРОЕКТИРОВАНИИ - конечно же правильно.
т.е на уровне логической модели - да
При реализации уже (на уровне физической модели) - возможны варианты
...
Рейтинг: 0 / 0
28.04.2019, 00:49
    #39807247
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
ChAkormotТ.е. для каждого FOREIGN KEY надо создать дополнительно KEY idx (fkID)?Совсем необязательно. Основная задача внешнего ключа гарантировать ссылочную целостность. Для этого вполне достаточно основного ключа или ограничения уникальности на основной таблице. В основном, индекс на внешнем ключе нужен только если по этому полю(ям) выполняется фильтрация, да и то есть ситуации, когда даже в таком случае индекс всё равно может оказаться излишним.
Индекс больше нужен потому, что где внешний ключ - там наверняка будут по нему джойны с таблицей, на которую он ссылается. Надобность проверить по-моему очень легко - сджойнить эти таблицы с реальными данными и посмотреть план запроса - используется ли индекс или нет, потому что это очень сильно может зависеть от объема данных и от статистики.
...
Рейтинг: 0 / 0
28.04.2019, 10:41
    #39807276
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
fkthatChAИндекс больше нужен потому, что где внешний ключ - там наверняка будут по нему джойны с таблицей, на которую он ссылается. Надобность проверить по-моему очень легко - сджойнить эти таблицы с реальными данными и посмотреть план запроса - используется ли индекс или нет, потому что это очень сильно может зависеть от объема данных и от статистики.Безусловно, практика - критерий истины, но по моим многолетним наблюдениям для JOIN часто более чем достаточно индекса со стороны основной таблицы, так как в запросах хотят видеть их данные, потому что чаще всего это какие-то справочники. Само слияние по индексам, к сожалению, не спасает от bookmark lookup в подчинённой таблице, если только он удачно не впишется в кластерный индекс. В результате польза от него бывает не так велика, как бы хотелось. В то же время, если внешние значения активно и независимо используются при фильтрации, то тут, конечно, без индекса никуда. Если, конечно, выборка, опять же, не идёт по всей таблице или фильтрация по другим полю(ям) уже её неплохо ограничивают. Так что речь идёт не столько о том, будет или нет использоваться индекс, а будет ли от него реальный выигрыш, а не только лишние траты ресурсов на его создание и поддержание. Обилие индексов может само собой создавать немалые проблемы, их создание должно быть объективно аргументированно, избегая бездумной комбинаторики на все мыслимые и немыслимые случаи.
...
Рейтинг: 0 / 0
30.04.2019, 14:36
    #39808326
vadiminfo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
ChAБезусловно, практика - критерий истины, …...
Однако, можно предположить что истины нет критерия. Есть критерии у заблуждений.
Я уже не говорю про Ницше - истины вообще не существует, а существуют неопровержимые заблуждения.

Индексы на внешние ключи нужны в некоторых СУБД, так как иначе может в некоторых ситуациях возникнуть блокировка всей дочерней таблы без такого индекса, а с индексом нет. Наблюдал такое в 8 версии Оракла. Случай редкий. Но все же у заказчика начались зависания. С тех пор предпочитал ставить индексы.
...
Рейтинг: 0 / 0
30.04.2019, 17:06
    #39808440
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
полудухи да, каждый такой индекс будет грузить таблицу, поэтому нет, не нужно бездумно лепить FK на каждый чих
вот конкретно такой FK - милое дело, т.к. эти индексы и так всегда присутствуют
в идеале связи ставятся на колонки, в которых уже есть индекс
а вот если новый индекс надо создавать только под FK, вот тут уже надо подумать и взвесить - часто можно и без него обойтись.

Давайте новый флейм про FK на пару дюжин страниц
...
Рейтинг: 0 / 0
30.04.2019, 17:09
    #39808442
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
полудухно в любом случае, когда в одной таблице id, а в другой ссылка на этот id, то FK нужен, чтобы при удалении автоматом всё делалось

FK нужен не для "автоматом", а чтобы в таблицу гамнища гору не навалили. "Автоматом" это уже так, просто опциональное удобство, которое не всегда и удобно.
...
Рейтинг: 0 / 0
14.05.2019, 12:48
    #39812946
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotДобрый день Уважаемые!

Хочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет?

Конечно стоит, всегда.
...
Рейтинг: 0 / 0
14.05.2019, 13:40
    #39812996
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли всегда записи описывать внешними ключами?
kormotХочу спросить, правильно ли при проектировании БД в таблицах имеющих поля однозначно являющимися ID других записей в другой таблице оформлять их внешним ключом или нет?
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Стоит ли всегда записи описывать внешними ключами? / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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