Conversation
russuAV
left a comment
There was a problem hiding this comment.
Film
-
Жанры
• Сейчас в таблице Film присутствует поле genre, но по ТЗ у фильма может быть несколько жанров.
• Если хранить genre как одно поле (например, genre_id), то получится связь один к одному — каждый фильм сможет иметь только один жанр.
Рекомендация:
Создать отдельную таблицу genres с полями id и name,
а для связи «многие ко многим» — промежуточную таблицу film_genres (film_id, genre_id).
Так один фильм сможет иметь несколько жанров, и один жанр — относиться к нескольким фильмам. -
AgeRating
• В таблице Film поле ageRating указано как enum, а в таблице AgeRating ключом является id (int).
Хотел уточнить: в таблице Film будет храниться числовое значение ID, соответствующее рейтингу,
или строковое значение?
Если хранить строку (например "PG_13"), тогда при SQL-запросах типа:
SELECT *
FROM films WHERE rating_id = 3;фильмы с текстовым значением рейтинга не попадут в выборку.
User
- Дружба
• Сейчас реализовано через таблицы FriendsList и Friendship.
Чтобы получить статус дружбы, потребуется объединение двух таблиц,
хотя это может быть оправдано, если предполагается расширение логики (например, больше 3 статусов).
Альтернатива:
Можно объединить всё в одну таблицу friendships с полями:
(user_id, friend_id, status)
Так получится упростить структуру и получить статус в одном запросе.
| @@ -0,0 +1,10 @@ | |||
| package ru.yandex.practicum.filmorate.model; | |||
|
|
|||
| public enum Genre { | |||
There was a problem hiding this comment.
Использование enum для жанров ограничивает гибкость приложения. Например, если в будущем потребуется добавить новый жанр, это придётся делать через изменение кода enum, что приведёт к необходимости перекомпиляции.
Еще как вариант можно создать отдельный класс Genre с полями id и name, которые будут соответствовать полям в таблице genres в БД. Это позволит управлять жанрами динамически без изменения исходного кода.
Также в классе Film необходимо добавить коллекцию, которая будет хранить уникальные значения жанров, т.к их может быть несколько
There was a problem hiding this comment.
решила пока не переделывать enum, тоже почитала про него и его совместимость с sql и думаю попробовать, хотя очень вероятно, что при создании таблиц и переделаю в объект с полями (как ты говоришь)
вообще хочу сделать таблицы с помощью herbinate, подключила зависимости, попробовала на Friends - вроде работает
|
Переделала таблицу, как ты сказал, все связи сделала на id. Думаю, когда начнем создавать таблицы в проекте, то всё равно придется половину кода переделывать(( |
russuAV
left a comment
There was a problem hiding this comment.
поле Genre_id в таблице Film лишнее. Строка будет также хранить идентификатор одного жанра.
еще пару комментов оставил на усмотрение твое
| fr.friend_id | ||
| FROM user AS u | ||
| INNER JOIN friends AS fr ON u.user_id = fr.user_id | ||
| GROUP BY u.user_id; |
There was a problem hiding this comment.
GROUP BY вернет одну строку, соответсвенно и одного друга
| User friend = getUserById(friendId); | ||
| userStorage.addFriend(user, friend); | ||
| Friends userFriend = new Friends(userId, friendId, friendStatus); | ||
| Friends friendFriend = new Friends(friendId, userId, Friendship.CONFIRMED); |
There was a problem hiding this comment.
при добавлении в друзья сразу создаются две связи, одна из которых со статусом CONFIRMED, даже если вторая сторона ещё не принимала заявку
| userStorage.addFriend(user, friend, userFriend, friendFriend); | ||
| } | ||
|
|
||
| public Collection<String> getFriendsList(int id) { |
There was a problem hiding this comment.
метод возвращает список имен друзей, а не самих пользователей(или их идентификаторы), что затрудняет идентификацию. Может возникнуть путаница, т.к имена могут повторяться. Но если ранее замечаний не было, то ок)
- возможно стоит добавить признак дружбы (confirmed)
| .collect(Collectors.toList()); | ||
| } | ||
|
|
||
| public Collection<String> getCommonFriends(int userId, int friendId) { |
There was a problem hiding this comment.
метод также возвращает список имен. если ранее не было замечаний, то ок
No description provided.