Wendelius
На мой взгляд, у вас есть два частично разделенных вопроса: Как идентифицировать запись и как сделать ее уникальной. Кроме того, вы явно хотите использовать идентификацию, которая имеет смысл для пользователя.
Для того чтобы ваша программа могла идентифицировать запись, общее предложение состоит в том, чтобы использовать Суррогатный ключ - Википедия[^Поскольку этот вид ключа не является производным от данных, нет никакого риска, что значение будет необходимо изменить, если данные или требования изменятся.
Чтобы сгенерировать суррогатный ключ, вы можете использовать, например, ИДЕНТИЧНОСТЬ[^] или А ПОСЛЕДОВАТЕЛЬНОСТЬ[^]. Если система, которую вы строите, будет иметь несколько баз данных, то uniqueidentifier[^] может быть подходящим выбором. Определив этот столбец как a первичный ключ [^] вы гарантируете, что может существовать только одно значение. в таблице
То, что приходит к ключу, видимому пользователю, вы можете использовать Естественный ключ - Википедия[^]. Чтобы убедиться, что в таблице есть только одна запись, вы также можете определить ее как уникальную с помощью ограничение уникальности[^].
В вашем примере у вас действительно было два элемента, которые вместе были бы естественным ключом, годом и текущим числом. Они не должны храниться в одном столбце, как вы описали. Вместо этого вы должны использовать два столбца, один для года, а другой для порядкового номера. Сделав их вместе уникальными, вы получите правильный ключ.
В своем вопросе вы хотели показать эти два элемента в одном столбце, разделенном косой чертой. Поскольку эти два элемента хранятся в отдельных столбцах, это должно быть сделано либо в SQL, извлекающем данные, либо, возможно, предпочтительно на стороне клиентов. Чтобы сделать это в SQL, рассмотрим следующий пример
select cast(a.year as varchar) + ' / ' + format( a.ordinal, '00000')
from ( select 2020 as year, 1 as ordinal union all
select 2020 as year, 2 as ordinal union all
select 2020 as year, 3 as ordinal ) a
Это дало бы
2020 / 00001
2020 / 00002
2020 / 00003