Skip to content

Latest commit

 

History

History
121 lines (77 loc) · 5.44 KB

README.md

File metadata and controls

121 lines (77 loc) · 5.44 KB

Entity relations table for filmorate database

er table


База данных состоит из следующих таблиц:

  1. filmorate_user:

    • id (первичный ключ)
    • email (электронная почта пользователя)
    • login (логин пользователя)
    • user_name (имя пользователя)
    • birthday (дата рождения пользователя)
  2. friendship_status:

    • id (первичный ключ)
    • status_name (статус, например, 'Ожидает подтверждения', 'В друзьях')
  3. friendship:

    • user_id (составной первичный ключ, внешний ключ, содержит id пользователя из таблицы user)
    • friend_id (составной первичный ключ, внешний ключ, содержит id пользователя из таблицы user, который является другом пользователя c идентификатором user_id)
    • friendship_id (внешний ключ, содержит id статуса дружбы из таблицы friendship)
  4. mpa_rating:

    • id (первичный ключ)
    • rating_name (навзвание возрастного рейтинга)
  5. film:

    • id (первичный ключ)
    • title (название фильма)
    • description (опсисание фильма)
    • release_date (дата релиза фильма)
    • duration (длительность фильма в минутах)
    • mpa_rating_id (внешний кллюч, содержит id возрастного рейтинга из таблицы mpa_rating)
  6. genre:

    • id (первичный ключ)
    • genre_name (название жанра фильма)
  7. film_genre (соединительная таблица между film и genre):

    • film_id (составной первичный ключ, внешний ключ, содержит id фильма из таблицы film)
    • genre_id (составной первичный ключ, внешний ключ, содержит id жанра из таблицы genre)
  8. film_like (содержит список лайков фильмов от пользователей):

    • film_id (составной первичный ключ, внешний ключ, содержит id фильма из таблицы film)
    • *user_id (составной первичный ключ, внешний ключ, содержит id пользователя из таблицы user)

Примеры запросов для основных операций:

  • добавление пользователя   INSERT INTO user (email, login, user_name, birthday)

  VALUES ('test@email.ru', 'test_login', 'test_user_name', DATE '2000-01-01');

  • обновление пользователя

  UPDATE user SET user_name = 'new_user_name' WHERE email = 'test@email.ru';

  • получение списка всех пользователей

  SELECT * FROM user;

  • получение пользователя по id

  SELECT * FROM usere WHERE id = 1;

  • добавление пользователя с id '1' в друзья пользователю с id '2' с id статуса дружбы '1'

  INSERT INTO friends (user_id, friend_1, friendship_id)

  VALUES (2, 1, 1);

  • получение списка друзей пользователя с id '1'

SELECT * FROM user WHERE id IN (SELECT friend_id FROM friends WHERE user_id = 1);

  • получение списка общих друзей между пользователей с id '1' и '2'

  SELECT * FROM user WHERE id IN (

    SELECT u1.friend_id

    FROM friends AS u1, friends AS u2

    WHERE u1.user_id = 1 AND u2.user_id = 2 AND u1.friend_id = u2.friend_id);

  • удаление пользователя из списка друзей

  DELETE friends WHERE user_id = 1 AND friend_id = 2;

  • добавление фильма

  INSERT INTO film (title, description, release_date, duration, genre_id)

  VALUES ('film_title', 'film_description', DATE '2010-10-10', 123, 1);

  • обновление фильма

  UPDATE film SET description = 'new_description' WHERE title = 'film_title';

  • получение списка всех фильмов

  SELECT * FROM film;

  • получение списка по id

  SELECT * FROM film WHERE id = 1;

  • добавить лайк фильму

  INSERT INTO film_likes (filmd_id, user_id)

  VALUES (1, 1);

  • удалить лайк

  DELETE film_likes WHERE filmd_id = 1 AND user_id = 1;

  • получить 10 самых популярных фильмов

  SELECT title FROM film WHERE id IN (

    SELECT film_id FROM film_likes GROUP BY film_id ORDER BY COUNT(*) DESC

  ) LIMIT 10;