ну, я думаю, что ключ surrgote полезен, когда у вас нет уникально идентифицированного ключа, значение которого связано и имеет смысл, как, например, его первичный ключ ... более того, ключ surrgote проще в реализации и требует меньших затрат на обслуживание.
но с другой стороны, суррогатный ключ иногда делает дополнительные затраты, соединяя столы.думать о «Пользователь» ... У меня есть
UserId varchar(20), ID int, Name varchar(200)
в качестве структуры таблицы.
теперь учтите, что я хочу отслеживать во многих таблицах то, кто вставляет записи ... если я использую Id
в качестве первичного ключа, тогда [1,2,3,4,5..]
и т. Д. Будут находиться во внешних таблицах и всякий раз, когда яМне нужно знать, кто вставляет данные, я должен присоединиться к ней, потому что 1,2,3,4,5,6
не имеет смысла.но если я использую UserId
в качестве первичного ключа, который уникально идентифицирован, то в других внешних таблицах [john, annie, nadia, linda123]
и т. д. будут сохранены, что иногда легко различимо и имеет смысл.поэтому мне не нужно присоединяться к пользовательской таблице каждый раз, когда я делаю запрос.
но учтите, что требуется некоторое дополнительное физическое пространство, поскольку varchar сохраняется во внешних таблицах, который занимает дополнительные байты ... и индексация, конечно же, имеет существенную проблему с производительностью, когда int работает лучше, чем varchar