«faved» ser ie отличается от отношения «watchlisted» ser ie, поэтому вам необходимо каким-то образом различать эти два различных типа отношений при хранении данных в базе данных. .
Сейчас у вас есть только одна таблица для сопоставления обоих отношений, и вот что происходит:
Вы видите проблема? В таблице UserSerie
есть повторяющаяся строка, вероятно, потому что Diego
пометил как Fav
ser ie Bojack
, и он также добавил ее к своему Watchlist
. Однако невозможно определить, какая строка представляет отношение Fav
, а какая представляет отношение Watchlisted
.
Первый подход: добавить дополнительный атрибут к UserSerie
в качестве дискриминатора
Один из подходов - добавить новый атрибут (столбец таблицы базы данных) для хранения типа отношений между User
и Serie
.
Теперь вы можете ясно видеть, какой тип отношений представляет каждая строка: F
is любимая серия ie и W
список наблюдения * ie.
Было бы очень легко добавить другие типы отношений (серии, которые рекомендуют, серии, которые не нравятся, или что-то еще).
Это означает, что теперь у сущности User
будет только один список UserSerie
, где у каждого UserSerie
есть свойство Type
, которое можно проверить, чтобы определить тип отношений между этим пользователем и этой службой ie.
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string FullName { get; set; }
public List<UserSeries> Series { get; }
}
Второй подход: добавить дополнительную таблицу отношений`
Другой подход заключается в том, чтобы иметь разные таблицы для каждого отношения:
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string FullName { get; set; }
public List<UserFavedSeries> FavedSeries { get; }
public List<UserWatchlistedSeries> WatchlistedSeries { get; }
}
Это я и что если в будущем вы не захотите добавлять дополнительные отношения, вам нужно создать еще одну таблицу.
Существуют и другие способы решения той же проблемы, о которой я не упоминаю, и каждый из них будет другой набор компромиссов, которые вам придется проанализировать, чтобы выбрать решение, которое лучше всего подходит для вашего сценария:)