Отслеживание и избранное модели отношений в Rails --- одна основная модель или определенные модели для каждого отношения

Я работаю над приложением, в котором пользователь может иметь один из двух видов отношений с другими пользователями --- либо favoriting с ними, либо following с ними --- и я полагаю, что обратные действия, is favorited by и is being follow by, также появятся как методы. Я хочу позвонить.

Какие соображения я должен учитывать при создании пользовательской модели? В частности, у меня должна быть одна модель отношений, которая определяет:

Relationships
user_1 | relationship_type | user_2

где тип_отношения равен favoriting или following?

Или у меня должно быть 2 отдельные модели:

Favorites
user_1 | user_2

Follows
user_1 | user_2

Я не так уж много знаю о базах данных, поэтому могу ли я спросить, каковы соображения при выборе между этими двумя потенциальными настройками? 2 более нормализовано, чем 3, или меньше? Это имеет значение? При каких обстоятельствах?

ОБНОВЛЕНИЕ

Извините, это меня просто поразило: скажем, есть третье отношение, например «отзывы» / «обзоры_от» — и вопрос касается 3, а не 2 разных типов двунаправленных отношений. Влияет ли на это увеличение количества типов отношений?

Favorites
user_1 | user_2

Follows
user_1 | user_2

Reviews
user_1 | user_2

person Mittenchops    schedule 20.07.2012    source источник
comment
Используйте лучшее название, чтобы упростить чтение. Используйте что-то вроде Favoring_user и Faveored_by_user. Используйте метод №1   -  person Hitham S. AlQadheeb    schedule 20.07.2012


Ответы (1)


Я бы выбрал 2 разные модели в одной таблице, то есть использовал шаблон наследования одной таблицы. Таким образом, вы получаете таблицу БД, которая выглядит близко к вашему варианту № 1, и имеете чистую модель с двумя разными классами для «Избранного» и «Подписки» на стороне объектной модели, что приводит к более четкому коду и именованию.

Что касается именования, Майкл Хартл использует в своем примере «followers» и «followed_users», что очень похоже на то, к чему вы стремитесь: http://ruby.railstutorial.org/chapters/following-users#топ

person bento    schedule 20.07.2012
comment
и я собирался сказать: это также облегчает расширение, если вы хотите добавить просто еще одно отношение с пользователями, а потом я увидел ваше обновление ;-) - person bento; 20.07.2012