Альтернатива использованию одного и того же внешнего ключа почти в каждой таблице - PullRequest
0 голосов
/ 10 февраля 2011

Я работаю с базой данных, где «почти» каждая таблица в базе данных имеет одинаковое поле и одинаковое значение. Например, почти во всех таблицах есть поле с именем GroupId, и в базе данных теперь только один идентификатор группы.

Преимущества

  • Все данные относятся к этому полю и могут быть идентифицированы указанным полем
  • Когда создается новая группа, для группы будут правильно определены данные

Недостатки

  • Все таблицы имеют это поле
  • Все хранимые процедуры должны иметь это поле в качестве параметра
  • Все запросы должны быть отфильтрованы по этому полю

Это большое дело? Есть ли альтернатива этому подходу?

Спасибо

1 Ответ

0 голосов
/ 10 февраля 2011

Если в будущем вам потребуется идентифицировать данные по нескольким группам, рекомендуется использовать внешние ключи. Однако это не означает, что во всех таблицах должно быть это поле, только в тех, которые имеют прямое отношение к группе. Например, для таблицы поиска со значениями состояния она может и не понадобиться, но может потребоваться таблица клиентов. Добавление его ко всем таблицам может привести к плохим результатам, когда вы пытаетесь удалить запись и должны проверить 579 таблиц (только 25 из которых имеют отношение к делу). Все это во многом зависит от значения групп. Большинство наших таблиц имеют отношение к таблице клиентов, потому что они содержат данные, относящиеся к конкретным клиентам, и потому что мы не хотим, чтобы разные клиенты могли видеть данные для других клиентов. Таблицы, которые не содержат такого рода данных, не имеют.

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

Если, однако, существует только одна группа и никогда не будет более одной группы, это пустая трата времени, усилий и пространства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...