Использование существующего ключа кандидата или нового составного ключа для первичного ключа

Я получаю некоторые уникальные номера случаев из другого источника данных, который может быть ключом-кандидатом для моей базы данных. Когда вы создаете совершенно новую таблицу, какая лучшая практика? Создание составного ключа (мой ключ кандидата и автоматически сгенерированный идентификатор для ПК) или просто определить ПК для этой новой таблицы и ПРОВЕРИТЬ КОНСТРУКЦИЮ на моем ключе кандидата?

Лучшая практика заключается в том, что ваша БД имеет владельца ПК. Рассмотрим ситуацию. Ваш источник – это таблица продуктов в Sales Force, а код продукта – «1234», и по какой-то причине через некоторое время ваша компания меняет SAP и тот же продукт меняет код на «KA2541». Если вы моделировали свою БД, используя код силы продаж как ПК, у вас есть два варианта:

  1. Создайте новый столбец для хранения нового кода и измените все программы, чтобы показать новый код
  2. Измените тип данных столбцов и обновите его.

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

Это сложный вопрос. Как правило, я привык рекомендовать суррогатные первичные ключи, но не составной ключ, а просто добавочный ключ. Вот несколько причин:

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

Тем не менее, есть ситуации, когда вы можете использовать ключевой элемент исходной системы, а не искусственный ключ. Предположим, что код действительно принадлежит исходной системе, и он не изменяется (исходная система определяет, что это такое). Затем вы можете захотеть, чтобы это был первичный ключ – если есть вероятность, что вам нужно будет повторно загрузить данные.

Зачем? Повторная загрузка данных может переупорядочить ключи. Ссылки на внешние ключи затем будут признаны недействительными. Обычно перезагрузка данных обрабатывается с использованием обновлений, но могут быть обстоятельства, в которых может потребоваться опционная замена.

Вы можете себе представить, что я недавно столкнулся с таким сценарием.

Interesting Posts

Я не могу добавить Microsoft.SqlServer.Management.Common в мое приложение ASP.NET MVC

нужен запрос sql-запроса, подобный этому

как обновить внешний ключ, который зависит от 3 полей в первичной таблице

Хранимые процедуры и разрешения SQL Server

В чем причина «контекста транзакции, используемого другим сеансом»,

Насколько плохо открытие и закрытие SQL-соединения в несколько раз? Каков точный эффект?

Как включить локальную (т.е. автономную) справку в SSMS 2016?

Условие IF в хранимой процедуре

SQL заменяет все NULL

Как изменить мой SQL, чтобы выбрать значения, соответствующие датам в разных строках?

Как запросить имя текущей строки на SQL-сервере?

Странная проблема при преобразовании VarChar (max) в DATE или DATETIME в SQL Server 2008

Объединить командную строку и T-SQL – SQL Server

SQL Server: возвращает несколько значений из функции

SSRS 2012: «Выполнение отчета истекло или не может быть найдено. (rsExecutionNotFound)»

Давайте будем гением компьютера.