Учитывая следующую модель фиксированного домена:
public class Sentence {
public int Id { get; private set; }
public string Author { get; set; }
public string[] Words { get; set; }
}
И следующая предложенная нормализованная схема базы данных:
create table Sentence (
Id int identity(1,1) not null primary key,
Author varchar(450)
)
create table Word (
Id int identity(1,1) not null primary key,
Value varchar(450) not null unique
)
create table Sentence_Word (
SentenceId int foreign key references Sentence (Id),
WordId int foreign key references Word (Id),
SortIndex int not null,
primary key (SentenceId, WordId),
unique (SentenceId, SortIndex)
)
Как бы вы создали файл сопоставления NHibernate?
Это было бы легко, если бы мы могли добавить другую сущность домена Word
и затем изменить свойство Words
для Sentence
на Word[]
вместо string[]
(это было бы стандартом многие-ко-многим отношения сущности), но тип string[]
для свойства является обязательным и не может быть изменен.
Эта проблема аналогична другому вопросу StackOverflow , за исключением того, что для правильной нормализации данных необходимо использовать отношение «многие ко многим» (набор слов относительно мал, в то время как их сочетание в предложениях огромное), поэтому не сразу понятно, как можно применять стандартные коллекции на основе значений.