У меня есть ситуация, когда у меня есть несколько ассоциаций «многие ко многим». От 12 до 15. Читая вокруг, я видел, что обычно считается, что ассоциации «многие ко многим» не являются «типичными», но это единственный способ, которым я смог создать ассоциации, подходящие для моего случая, поэтому я не уверен, как оптимизировать дальше.
Вот мой основной сценарий.
class Page {
IList<Tag> Tags { get; set; }
IList<Modification> Modifications { get; set; }
IList<Aspect> Aspects { get; set; }
}
Это один из моих «базовых» классов и, по совпадению, одна из моих базовых таблиц. Практически половина объектов в моем коде может иметь IList<Page>
, а некоторые из них имеют IList<T>
, где T
имеет свой собственный IList<Page>
.
Как видите, с объектно-ориентированной точки зрения это на самом деле не проблема. Но с точки зрения базы данных это начинает вводить много соединительных таблиц.
До сих пор это работало нормально для меня, но мне интересно, есть ли у кого-нибудь идеи о том, как я мог бы улучшить эту структуру. Я долго думал, и для достижения необходимого уровня ассоциации я не могу придумать, как его улучшить. Единственное, что я придумал, - это создать промежуточные классы для каждого объекта, который имеет IList<Page>
, но на самом деле он не делает ничего такого, чего HasManyToMany
уже не делает, за исключением введения другого класса. Он не расширяет функциональность и, насколько я могу судить, не улучшает производительность.
Есть мысли? Я также обеспокоен ограничениями первичного ключа в этом сценарии. Почти все должны иметь эти свойства, но Страницы не могут быть уникальными для каждого объекта, потому что они будут часто использоваться совместно и объединяться между несколькими объектами.
Все отношения односторонние. (То есть Page
не знает, кому он принадлежит). Из-за этого у меня также нет Inverse()
сопоставленных HasManyToMany
коллекций.
Кроме того, я прочитал аналогичный вопрос: Использование ORM, таких как NHibernate, когда существует много ассоциаций - проблемы производительности
Но это действительно не отвечало моим опасениям.