2017-01-18 6 views
-2

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

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

У меня есть два варианта, я могу добавить внешний ключ к счетам для всех мои таблицы, которые уменьшат количество необходимых объединений, но потенциально могут добавить к сохраненным данным (возможно?) привести к несоответствиям.

Итак, мой вопрос: следует ли добавлять учетные записи FK в службы, местоположения и т. Д. Или полагаться на объединения для управления этим для меня?

+2

Внешние ключи и количество соединений не имеют ничего общего друг с другом. Кроме того, существуют внешние ключи для обеспечения целостности данных. Я действительно не понимаю, как добавление большего количества из них приведет к несогласованности данных. Твой вопрос мне непонятен. – Shadow

+0

Почему вы хотите нести лишние данные, которые могут привести к несоответствиям? Число соединений действительно не является важной метрикой. Если вас беспокоит производительность, сравните нормированный дизайн и посмотрите, что вы можете добиться при индексировании. – reaanb

+0

Пожалуйста, предоставьте 'SHOW CREATE TABLE' для каждой соответствующей таблицы. –

ответ

1

Не зная структуры ваших баз данных, трудно дать правильный ответ. Но возьмем, например, одну таблицу providers. Если у провайдера может быть только одна учетная запись, я бы добавил FK в таблицу providers. Если это не так, я бы не использовал FK, потому что это не сработало.

Внешние ключи должны связывать вещи, чтобы не было несогласованности. Поэтому, если у вас есть таблица employees и таблица departments, employees будет иметь FK до departments, потому что сотрудник может находиться только в одном отделе.

0

У вас возникли проблемы с пониманием FK и тем, что они вам дарят.

Ваш FK должен присоединиться к таблице с PK (первичный ключ), что обеспечивает целостность данных между таблицами.

Однако, если вы не индексируете столбцы FK, это будет необъявленный FK, и это может привести к полному сканированию таблицы в ваших соединениях.

PK и FK являются просто ограничениями и не добавляют к хранению. Индексирование FK добавляется к хранилищу, но преимущества производительности индексов обычно перевешивают накладные расходы на хранение.

Использование PK и индексированных FK - это часть нормализованного проектирования данных, и вы не должны беспокоиться об их использовании.

Смежные вопросы