Отображение тегов в NHiberbate - PullRequest
0 голосов
/ 02 ноября 2009

Когда я задаю этот вопрос на stackoverflow, я могу добавить к нему теги. Итак, в DDD у меня был бы класс Question, который каким-то образом имеет теги. Один из способов его моделирования - использование списка тегов, поскольку тег на самом деле не является сущностью (или это так?).

public class Question
{
    // ...

    public List<string> Tags;
}

Однако в базе данных у меня, вероятно, были бы эти три таблицы:

Question: QuestionID, Title, Content
Tag: TagID, Title
QuestionTag: QuestionID, TagID

Возможно ли это с точки зрения NHibernate? Будет ли это рекомендовано? Как бы вы это сделали?

Ответы [ 2 ]

1 голос
/ 02 ноября 2009

Это зависит от:

  • как вы создаете / меняете / удаляете теги
  • как вы запрашиваете теги и вопросы по тегам
  • сколько предметов у вас есть, и если вам крайне нужны трюки с производительностью

Вы могли бы:

  • сопоставить теги как сущность с идентификатором, который используется повторно. Будет отдельный класс (Tag) и две таблицы, таблица Tag и таблица QuestionToTag (и дополнительная таблица XxxToTag для каждого владельца тега, если есть другие).
  • сопоставить теги как список строк, которые не используются повторно. Вам не нужно никакого специального класса, и у вас есть одна дополнительная таблица для каждого владельца тега (QuestionTags).
  • отображать теги как одну строку, разделенную каким-либо символом, например. запятая или пробел. Для этого нет класса и таблицы.

Вы не можете иметь теги в списке строк, которые повторно используются для нескольких вопросов. Если они должны быть использованы повторно, они должны быть сущностями.

Каждое предложенное мной решение имеет свои преимущества и недостатки. Зависит от того, что для вас наиболее важно сказать, какое решение является лучшим.

0 голосов
/ 02 ноября 2009

Хотя то, что вы описываете, возможно, вы можете рассматривать Tag как сущность. Рассмотрим ситуацию, когда вы хотите отобразить список вопросов для определенного тега. Следовательно, это приведет к взаимосвязи «многие ко многим» между сущностью Tag и сущностью Question. Структура базы данных будет в конечном итоге так, как вы себе представляете.

...