Как создать связь с неосновным ключом в SQL Server?

8

У меня есть таблица Users, которая имеет два столбца: первичный ключ с именем UserID и другой столбец с именем UserName.

  • UserID (int) PK
  • Имя пользователя (varchar (256)

Они оба уникальны, но я решил по причинам использовать имя пользователя в качестве ссылки в других таблицах. Так, например, таблица заказов имеет ссылку на пользователя по имени пользователя, а не по идентификатору пользователя.

  • Номер заказа
  • UserName

Я хочу создать связь между всеми таблицами, которые ссылаются на имя пользователя и таблицу пользователей, чтобы получить возможность каскадного обновления / удаления в SQL Server.

Но SQL Server не позволяет мне создавать отношения в столбце без первичного ключа. Можно ли каким-либо образом получить функцию каскадного обновления / удаления без изменения таблицы пользователей, чтобы имя пользователя было основным ключом, а не идентификатором пользователя?

Шраг Смиловиц
источник

Ответы:

13

Создайте уникальный индекс или уникальное ограничение, UserNameпосле чего вы можете ссылаться на него в штрафном ограничении FK.

Ваше заявление о том, что

Sql Server не позволяет мне создавать отношения в столбце без первичного ключа

это неверно. SQL Server заботится только о том, чтобы для столбцов, участвующих в отношениях FK, был задан уникальный индекс.

Мартин Смит
источник
1
Вы правы, мое утверждение было основано на сообщении об ошибке, которое я получил от сервера SQL, когда я пытался создать отношения.
Шраг Смиловиц