Baza danych¶
Aster używa SQLite w środowisku developerskim oraz PostgreSQL.
Diagram ERD¶
erDiagram
USER ||--o{ RATING : wystawia
USER ||--o{ COMMENT : pisze
USER ||--o{ USER_MOVIE_STATUS : oznacza
USER }o--o{ GENRE : "ulubione (m2m)"
MOVIE ||--o{ RATING : ocena
MOVIE ||--o{ COMMENT : komentowany
MOVIE ||--o{ USER_MOVIE_STATUS : status
MOVIE }o--o{ GENRE : klasyfikacja
MOVIE ||--o{ MOVIE_CREDIT : "obsada/reżyseria"
PERSON ||--o{ MOVIE_CREDIT : występuje
USER {
bigint id PK
string email UK
string display_name
boolean is_active
boolean is_email_verified
boolean is_staff
boolean is_superuser
string password
datetime created_at
datetime updated_at
datetime last_login
}
GENRE {
bigint id PK
string name UK
int tmdb_id UK "nullable"
}
MOVIE {
bigint id PK
int tmdb_id UK
string title
string original_title
text overview
date release_date
int runtime_minutes
string poster_url
string backdrop_url
string original_language
decimal average_rating
int ratings_count
decimal popularity
datetime tmdb_synced_at
datetime created_at
datetime updated_at
}
RATING {
bigint id PK
bigint user_id FK
bigint movie_id FK
decimal score "0.5–5.0 step 0.5"
datetime created_at
datetime updated_at
}
USER_MOVIE_STATUS {
bigint id PK
bigint user_id FK
bigint movie_id FK
string status "watchlist | watched"
datetime created_at
datetime updated_at
}
COMMENT {
bigint id PK
bigint user_id FK
bigint movie_id FK
text content
string status "visible | flagged | hidden | deleted"
decimal toxicity_score
datetime created_at
datetime updated_at
datetime moderated_at
}
PERSON {
bigint id PK
int tmdb_id UK
string name
string profile_url
}
MOVIE_CREDIT {
bigint id PK
bigint movie_id FK
bigint person_id FK
string credit_type "cast | director"
string character
int order
}
Tabele¶
accounts_user¶
| Kolumna | Typ | Uwagi |
|---|---|---|
id |
bigint PK | |
email |
varchar UNIQUE | login + identyfikator |
display_name |
varchar(120) | opcjonalna nazwa wyświetlana |
is_active |
bool | False do momentu aktywacji e-maila |
is_email_verified |
bool | redundantna z is_active, użyteczna w przyszłej moderacji |
is_staff, is_superuser |
bool | dostęp do /admin/ |
password |
varchar | hash PBKDF2 |
created_at, updated_at |
datetime | audyt |
accounts_genre¶
Uwaga historyczna: model
Genrezostał przeniesiony zaccountsdomoviesw migracjiaccounts/0003_relocate_genre_to_movies.py, ale tabela zachowała nazwęaccounts_genre(db_tablew meta) by uniknąć zbędnego RENAME.
| Kolumna | Typ | Uwagi |
|---|---|---|
id |
bigint PK | |
name |
varchar(50) UNIQUE | polska nazwa gatunku |
tmdb_id |
int UNIQUE NULL | identyfikator z TMDB; NULL = lokalny gatunek |
movies_movie¶
Główna tabela katalogowa. Zsynchronizowana z TMDB przez tmdb_id.
| Kolumna | Typ | Uwagi |
|---|---|---|
id |
bigint PK | |
tmdb_id |
int UNIQUE | identyfikator z TMDB |
title, original_title |
varchar(255) | |
overview |
text | |
release_date |
date | nullable |
runtime_minutes |
int | nullable |
poster_url, backdrop_url |
varchar(500) | URL-e CDN TMDB |
original_language |
varchar(10) | ISO-639-1 |
average_rating |
decimal(3,2) | cache średniej z ratings |
ratings_count |
int | cache liczby ratingów |
popularity |
decimal(10,2) | z TMDB |
tmdb_synced_at |
datetime | ostatnia synchronizacja |
created_at, updated_at |
datetime |
movies_rating¶
Ocena użytkownika. Półgwiazdkowa precyzja.
| Kolumna | Typ | Uwagi |
|---|---|---|
id |
bigint PK | |
user_id |
bigint FK → user | ON DELETE CASCADE |
movie_id |
bigint FK → movie | ON DELETE CASCADE |
score |
decimal(2,1) | 0,5 ≤ score ≤ 5,0; krok 0,5 |
created_at, updated_at |
datetime |
UniqueConstraint(user, movie)— jedna ocena na film na użytkownika.CheckConstraint— score między 0,5 a 5,0 (krok pilnowany przez walidator formularza, nie przez DB).
movies_usermoviestatus¶
Lista „do obejrzenia" / „obejrzane" w jednej tabeli. Pole status
przełącza stan.
| Kolumna | Typ | Uwagi |
|---|---|---|
id |
bigint PK | |
user_id |
bigint FK → user | |
movie_id |
bigint FK → movie | |
status |
varchar(20) | 'watchlist' lub 'watched' |
UniqueConstraint(user, movie)— jeden status na film na użytkownika; przejściewatchlist→watchedto UPDATE.
movies_comment¶
Komentarze pod filmem. Pola toxicity_score i statusy
flagged/hidden są przygotowane na przyszłą wersję.
| Kolumna | Typ | Uwagi |
|---|---|---|
id |
bigint PK | |
user_id |
bigint FK → user | |
movie_id |
bigint FK → movie | |
content |
text(2000) | |
status |
varchar(20) | visible / flagged / hidden / deleted |
toxicity_score |
decimal(5,4) | nullable (rezerwacja na ver_2) |
created_at, updated_at |
datetime | |
moderated_at |
datetime | nullable |
movies_person i movies_moviecredit¶
Obsada i reżyseria z TMDB.
movies_person — jedna osoba (aktor lub reżyser).
| Kolumna | Typ | Uwagi |
|---|---|---|
tmdb_id |
int UNIQUE | |
name |
varchar(255) | |
profile_url |
varchar(500) | URL zdjęcia z TMDB |
movies_moviecredit — łącznik m2m z dodatkowymi atrybutami.
| Kolumna | Typ | Uwagi |
|---|---|---|
movie_id |
bigint FK | |
person_id |
bigint FK | |
credit_type |
varchar(20) | cast lub director |
character |
varchar(255) | tylko dla cast |
order |
int | kolejność na liście |
UniqueConstraint(movie, person, credit_type)— bez duplikatów.