Member 14726118 Ответов: 2

Как я могу создавать пользовательские ID через год и число в VB.NET


I am a beginner to programming in vb.net and sql server. I want to save a column made up of a year plus a number with symbol "/" that is renewed every year like 19/0001, 19/0002, 20/0001, 20/0002 


Что я уже пробовал:

I am a beginner to programming in vb.net and sql server. I want to save a column made up of a year plus a number with symbol "/" that is renewed every year like 19/0001, 19/0002, 20/0001, 20/0002 

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Как я могу создавать пользовательские ID через год и число в VB.NET

Прежде всего, никогда не создавайте идентификатор на стороне клиента для SQL server, потому что в течение 1 дня у вас будет 2 клиента, генерирующих идентификатор одновременно и заканчивающихся 2 записями с одним и тем же идентификатором. Всегда имейте идентификатор, сгенерированный на стороне сервера.
Самый простой идентификатор - это простая последовательность, генерируемая сервером:
SQL автоматическое увеличение поля[^]
SQL AUTO_INCREMENT - SQL[^]
MySQL :: MySQL 8.0 справочное руководство :: 3.6.9 использование AUTO_INCREMENT[^]
вы можете сделать его на заказ, но это становится все сложнее:
Пользовательские автоматически генерируемые последовательности с SQL Server - SQLTeam.com[^]
возможно, это не совсем соответствует вашим потребностям, но вы поняли идею.


Рейтинг:
1

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