Уникальный (но изменяемый) столбец идентификаторов

Моя система состоит из клиентского приложения React + ASP.NET Core API + базы данных SQL Server. У меня есть таблица db под названием «Заголовки»:

Id (Primary Key, nvarchar, not null) Name (nvarchar, not null)

Когда я создаю новую сущность заголовка, я использую случайный Guid в качестве Id. Однако я хочу, чтобы пользователь-клиент мог использовать уникальное (но изменяемое) понятное имя для доступа к странице, например: http://www.mywebsite.com/titles/friendly-title-name вместо того http://www.mywebsite.com/titles/31b18dba-4070-4b13-bab5-2fc57de9e3a9

Является ли для этой цели хорошей практикой использовать столбец «имя»? Итак, помимо уникального неизменяемого первичного ключа Id, у меня будет уникальное изменяемое имя столбца для идентификации сущности.

да. (больше персонажей)

Paweł Dyl 31.10.2018 13:28

Чтобы убедиться, что имя соответствует правила, вам нужно будет нормализовать его (т.е. заменить необычные символы менее модными символами) и добавить дефисы. Невозможно преобразовать нормализованную форму обратно в исходную (потому что существует бесконечное множество способов сделать это), поэтому это нормализованное имя, которое вам нужно будет предоставить клиенту и сохранить в базе данных. Если вас это устраивает, и ваши имена по-прежнему остаются уникальными, то почему бы и нет.

GSerg 31.10.2018 13:28

Если Name должен быть уникальным, почему бы не сделать его первичным ключом и не выгрузить GUID? Если вам нужен неизменяемый составной ключ, просто используйте INT IDENTITY(1,1) в качестве суррогатного ключа. GUID плохо работают, и, если он вам не нужен, для законной глобальной уникальности, вы можете избавиться от него здесь.

scsimon 31.10.2018 13:53

@scsimon, проблема в том, что я хочу, чтобы "имя" было изменяемым.

Handsome Greg 31.10.2018 14:26

Так что же тебе мешает? Если он изменен, это не снимает ограничения уникальности.

scsimon 31.10.2018 14:55

@scsimon Я собираюсь сделать это сейчас, основываясь на вашем и других ответах, я не был уверен, что это лучший подход :)

Handsome Greg 31.10.2018 15:09

И если вы зациклились на использовании guid (редко бывает хорошей идеей), по крайней мере, используйте правильный тип данных (uniqueidentifier) ​​вместо nvarchar. Я бы сказал, что если имя изменяемое, оно не используется в качестве первичного ключа. Думаю, вам нужен суррогатный ключ. Почему бы не использовать идентичность и не избавить себя от множества страданий?

Sean Lange 31.10.2018 15:35

Я расширил базу данных Asp.Net Identity, и Microsoft использует nvarchar (450) для столбца Id (PK), поэтому я подумал, что следует придерживаться этого подхода (я не являюсь разработчиком серверной части). Таблицы идентификаторов MS - это AspNetUsers, AspNetRoles и т. д. Все они используют nvarchar (450) и String в качестве типа поддержки в Entity Framework.

Handsome Greg 31.10.2018 15:44
0
8
146
0

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