Когда вам нужно будет изменить значение первичного ключа? - PullRequest
3 голосов
/ 18 февраля 2010

Я перечитывал внешние ключи и тому подобное для postgres и заметил, что это позволяет каскадное обновление для внешних ключей.

Ну, мой вопрос, когда вам нужно обновить первичный ключ строки?

Видимо, этому парню нужно http://www.oreillynet.com/onlamp/blog/2004/10/hey_sql_fans_check_out_foreign.html но яЯ не совсем понимаю, как это может быть полезно.

Редактировать: Я вижу естественные первичные ключи, как это можно использовать.Но как насчет технических первичных ключей?Те, которые не имеют смысла и почти всегда автоматически генерируются при вставке?

Ответы [ 7 ]

2 голосов
/ 18 февраля 2010

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

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

1 голос
/ 18 февраля 2010

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

1 голос
/ 18 февраля 2010

Вы можете попасть в эту ситуацию, если используете естественный первичный ключ.

Вот один очень свежий пример: в Хорватии правительство изменило налоговые идентификационные номера для компаний и частных лиц.Новый закон был введен с 1 января 2010 года.

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

1 голос
/ 18 февраля 2010

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

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

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

1 голос
/ 18 февраля 2010

Мне пришлось несколько раз менять свой ПК, когда я выставлял свой ПК сторонней системе. Время от времени они звонили нам с просьбой изменить PK, чтобы разместить записи в своей базе данных (время от времени из-за технических проблем синхронизация между двумя этими системами - не удается).

Через несколько раз мы просто перестали выставлять PK и добавили новый столбец.

1 голос
/ 18 февраля 2010

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

Мораль истории: не используйте естественные ключи в качестве первичных ключей.

0 голосов
/ 18 февраля 2010

Это может потребоваться при использовании естественного первичного ключа (который имеет фактическое значение в проблемной области).Если значение изменилось, то вам нужно будет каскадно изменить.

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

...