Можно ли использовать комбинацию букв и цифр в качестве первичного ключа в SQL?

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

Мой вопрос: достаточно ли этого, чтобы быть первичным ключом в таблице данных, которую я пытаюсь создать?

К вашему сведению: en.m.wikipedia.org/wiki/Natural_key и en.m.wikipedia.org/wiki/Surrogate_key

Basil Bourque 14.03.2024 18:58

Большое спасибо за разъяснения! Мне нужно больше изучать теорию данных!

user23314623 18.03.2024 07:36
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
153
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мой вопрос: достаточно ли этого, чтобы быть первичным ключом в таблице данных, которую я пытаюсь создать?

Короткий ответ: да, если они уникальны. Я работал в производственных системах, в которых несколько таблиц были связаны с использованием первичного ключа, который представляет собой буквенно-цифровую строку/символ («смесь букв и цифр», как вы сказали).

Длинный ответ: это зависит. По соображениям производительности в идеале вы бы предпочли использовать Integer/Big Integer в качестве первичного ключа, ЕСЛИ У ВАС ЕСТЬ ВЫБОР (часто у вас его нет — некоторые первичные ключи просто не могут быть целыми числами, потому что они не являются числовыми по своей природе!)

Если «номер клиента» может быть ограничен определенным размером - скажем, 10/20/100 символов - тогда, конечно, не должно быть проблем с использованием типа данных String/Char. Например, в MySQL вы можете использовать тип данных CHAR(10), если знаете, что ваш первичный ключ будет содержать <= 10 символов.

Риск производительности существует только в том случае, если вы совершенно не уверены, какой длины будет каждый «номер клиента» (и ваши таблицы БОЛЬШИЕ), и вы используете «мягкий» тип данных, не ограничивая его размер (например, CHAR вместо CHAR(10))

Спасибо за ваш отзыв! Ключ не будет длиннее 100 символов и даже может быть меньше 10. Это не должно привести к проблемам с производительностью, верно?

user23314623 18.03.2024 07:35

Да, вы должны быть хороши в вопросах производительности. Я рекомендую VARCHAR, поскольку «Номер клиента» имеет переменную длину. Что-то вроде VARCHAR(255), где 255 — максимальное количество байтов (обычно максимальное количество символов), должно подойти. Взгляните на эту таблицу, если хотите провести небольшое сравнение между char и varchar: Типы CHAR и VARCHAR

ItDepends 18.03.2024 15:11

Другие вопросы по теме