У меня есть три сущности:Моделирование 1: 1 опциональных-на-как-сайд отношений
User
- может иметь многоReviews
и могу иметь многоTransactions
Transaction
- должны иметьFromUser
иToUser
, может иметьFromUserReview
илиToUserReview
Review
- может иметьTransaction
, должны иметьFromUser
иToUser
Идея состоит в том, что пользователи могут писать отзывы друг на друга, могут отправлять платежи друг другу. Пользователь может писать только один транзакционный обзор для другого пользователя - в противном случае к транзакциям должны прилагаться обзоры.
По существу, это становится взаимозависимым между транзакциями и отзывами на 1: 1. Я думал о моделировании это с присоединиться к таблице, которая содержит:
ReviewId
TransactionId
И назвав его TransactionReview. Это, похоже, устраняет дублирование модели/кода, но усложняет мою бизнес-логику.
Другая альтернатива, которую я вижу, заключается в создании двух объектов: UserReview
и TransactionReview
- что упростит логику, но заставит меня повторить код и иметь две таблицы для того, что должно быть одним объектом.
Каков правильный путь? Сначала я использую код Entity Framework, если это имеет значение.
Спасибо за это. Я знаю, что в этих случаях часто используется «Дискриминатор» - это хороший вариант для этого? – RobVious
Глядя на это ... http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-entity-framework-in -an-asp-net-mvc-application – RobVious
Я предпочитаю эту модель, потому что ваш случай довольно прост и строг. Кроме того, продление вашего дела будет быстрее для этого типа. Если вы хотите иметь огромные таблицы, и приложение будет отделять отзывы для пользователей от транзакций для транзакций, может быть полезно использовать TPT. Мне лично нравится TPH до предела в несколько столбцов. Это зависит от вас. –