Если ваш столбец имени будет меняться, это не очень хороший кандидат на первичный ключ. Первичный ключ должен определять уникальную строку таблицы. Если это можно изменить, на самом деле это не так. Не зная больше о вашей системе, я не могу сказать, но это может быть подходящее время для суррогатного ключа.
Я также добавлю это в надежде разогнать мифы об использовании автоматически увеличивающихся целых чисел для всех ваших первичных ключей. Это не всегда выигрыш в производительности для их использования. На самом деле, довольно часто это полная противоположность. Если у вас есть автоинкрементный столбец, это означает, что каждый INSERT в системе теперь имеет дополнительные накладные расходы на создание нового значения.
Кроме того, как указывает Марк, с суррогатными идентификаторами на всех ваших таблицах, если у вас есть цепочка связанных между собой таблиц, чтобы перейти от одного к другому, вам, возможно, придется объединить все эти таблицы вместе, чтобы пройти их. С естественными первичными ключами, которые обычно не имеют места. Соединение шести таблиц с целыми числами обычно будет медленнее, чем объединение двух таблиц со строкой.
Вы также часто теряете способность выполнять операции на основе набора, когда у вас есть автоинкрементные идентификаторы на всех ваших таблицах.Вместо того, чтобы вставлять 1000 строк в родительскую таблицу, а затем вставлять 5000 строк в дочернюю таблицу, теперь вам нужно вставить родительские строки по одному в курсор или какой-либо другой цикл, чтобы получить сгенерированные идентификаторы, чтобы вы могли их назначить к родственным детям. Я видел, как 30-секундный процесс превратился в 20-минутный процесс, потому что кто-то настаивал на использовании автоинкрементных идентификаторов во всех таблицах в базе данных.
Наконец-то (по крайней мере по причинам, которые я перечисляю здесь - есть, конечно, другие), использование автоинкрементных идентификаторов на всех ваших столах способствует плохому дизайну. Когда дизайнеру больше не нужно думать о том, что может быть естественным ключом для таблицы, это обычно приводит к появлению ошибочных дубликатов данных. Вы можете попытаться избежать проблемы с уникальными индексами, но по моему опыту разработчики и дизайнеры не испытывают таких дополнительных усилий, и через год использования их новой системы они обнаруживают, что данные беспорядок, потому что в базе данных не было правильные ограничения на данные через естественные ключи.
Есть, конечно, время для использования суррогатных ключей, но использование их вслепую на всех столах почти всегда является ошибкой.
Общепринятое исключение для данных «системы». т.е. материал, который вы определяете сами поля статуса и т. д. – ShoeLace 2008-10-03 13:21:09