Как создать связь с неосновным ключом в 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, когда я пытался создать отношения.
Шраг Смиловиц
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.