Мне нужно создать новую таблицу, связывающую клиентов, регионы, сайты и менеджеров по продажам вместе. Я относительно новичок в SQL, и у меня есть идея создать абстрактный «бессмысленный» идентификатор клиента, который будет первичным ключом для всех этих данных. Однако у компании, в которой я работаю, уже есть «номер клиента», который состоит из букв и цифр, например, номер клиента может быть: A0123.
Мой вопрос: достаточно ли этого, чтобы быть первичным ключом в таблице данных, которую я пытаюсь создать?
Большое спасибо за разъяснения! Мне нужно больше изучать теорию данных!


Мой вопрос: достаточно ли этого, чтобы быть первичным ключом в таблице данных, которую я пытаюсь создать?
Короткий ответ: да, если они уникальны. Я работал в производственных системах, в которых несколько таблиц были связаны с использованием первичного ключа, который представляет собой буквенно-цифровую строку/символ («смесь букв и цифр», как вы сказали).
Длинный ответ: это зависит. По соображениям производительности в идеале вы бы предпочли использовать Integer/Big Integer в качестве первичного ключа, ЕСЛИ У ВАС ЕСТЬ ВЫБОР (часто у вас его нет — некоторые первичные ключи просто не могут быть целыми числами, потому что они не являются числовыми по своей природе!)
Если «номер клиента» может быть ограничен определенным размером - скажем, 10/20/100 символов - тогда, конечно, не должно быть проблем с использованием типа данных String/Char. Например, в MySQL вы можете использовать тип данных CHAR(10), если знаете, что ваш первичный ключ будет содержать <= 10 символов.
Риск производительности существует только в том случае, если вы совершенно не уверены, какой длины будет каждый «номер клиента» (и ваши таблицы БОЛЬШИЕ), и вы используете «мягкий» тип данных, не ограничивая его размер (например, CHAR вместо CHAR(10))
Спасибо за ваш отзыв! Ключ не будет длиннее 100 символов и даже может быть меньше 10. Это не должно привести к проблемам с производительностью, верно?
Да, вы должны быть хороши в вопросах производительности. Я рекомендую VARCHAR, поскольку «Номер клиента» имеет переменную длину. Что-то вроде VARCHAR(255), где 255 — максимальное количество байтов (обычно максимальное количество символов), должно подойти. Взгляните на эту таблицу, если хотите провести небольшое сравнение между char и varchar: Типы CHAR и VARCHAR
К вашему сведению: en.m.wikipedia.org/wiki/Natural_key и en.m.wikipedia.org/wiki/Surrogate_key