У меня есть 2 таблицы следующим образом:
create table Users
(
UserId int primary key identity not null
)
create table UserExternalKeys
(
UserIdRef int primary key not null,
ExternalKey varchar(50) unique not null
)
alter table UserExternalKeys
add constraint fk_UsersExternalKeys_Users
foreign key (UserIdRef)
references Users (UserId)
Каждый пользователь может иметь 0 или 1 внешнюю клавишу.Все настроено таким образом, потому что добавление уникального столбца с нулем в SQL Server не допускает более 1 пустого значения.
Основано на пост Айенде , кажется, что это можно обработать, используя<one-to-one>
картирование.Однако для этого у таблицы UserExternalKeys
должен быть собственный первичный ключ.
Новая схема будет выглядеть примерно так:
create table Users
(
UserId int primary key identity not null,
ExternalKeyRef int null
)
create table UserExternalKeys
(
UserExternalKeyId int primary key identity not null,
ExternalKey varchar(50) unique not null
)
alter table Users
add constraint fk_Users_UsersExternalKeys
foreign key (ExternalKeyRef)
references UserExternalKeys (UserExternalKeyId)
Я думаю, что это сработает, но кажется,как я бы только добавил столбец UserExternalKeyId
, чтобы успокоить NHibernate.
Есть предложения?