34 | | = Релациона алгебра за прашалникот: Најпопуларен артист по жанр за корисник = |
35 | | |
36 | | |
37 | | == 1. !PlayCounts == |
38 | | Се пресметува бројот на плеј-стани за секој жанр и уметник за одреден клиент (со ID 123). Операциите што се користат се: |
39 | | |
40 | | - **Join**: Поврзување на сите потребни табли (customer, invoice, invoice_line, track, genre, album, artist) со операцијата `⋈`. |
41 | | - **Selection (σ)**: Применуваме услов за селектирање само на податоци за клиент со ID 123. |
42 | | - **Grouping (γ)**: Групираме по жанр и уметник и пресметуваме бројот на плеј-стани за секој пар жанр-уметник со функцијата COUNT. |
43 | | |
44 | | Релационата алгебра за `PlayCounts`: |
45 | | |
46 | | !PlayCounts = γ_{g.genre_id, g.name → genre_name, ar.name → artist_name, COUNT(*) → play_count} (σ_{c.customer_id = 123}((customer ⋈ invoice) ⋈ (invoice_line ⋈ track) ⋈ (track ⋈ genre) ⋈ (track ⋈ album) ⋈ (album ⋈ artist))) |
47 | | |
48 | | |
49 | | == 2. !MaxPlayCounts == |
50 | | Се пресметува максималниот број на плеј-стани за секој жанр. Операциите што се користат се: |
51 | | |
52 | | - **Grouping (γ)**: Групирање по `genre_id` и пресметување на максималниот број на плеј-стани за секој жанр користејќи ја функцијата `MAX`. |
53 | | |
54 | | Релационата алгебра за `MaxPlayCounts`: |
55 | | |
56 | | !MaxPlayCounts = γ_{genre_id, MAX(play_count) → max_count} (!PlayCounts) |
57 | | |
58 | | |
59 | | == 3. !FinalResult == |
60 | | Се прави **Join** помеѓу `PlayCounts` и `MaxPlayCounts`, за да се изберат само оние редови каде што бројот на плеј-стани се совпаѓа со максималниот број за даден жанр. Се избираат само атрибутите `genre_name`, `artist_name`, и `play_count`. |
61 | | |
62 | | Релационата алгебра за финалниот резултат: |
63 | | |
64 | | !FinalResult = π_{pc.genre_name, pc.artist_name, pc.play_count} |
65 | | (!PlayCounts ⋈_{pc.genre_id = mpc.genre_id ∧ pc.play_count = mpc.max_count} !MaxPlayCounts) |
66 | | |
67 | | |
68 | | == Целосен израз на релационата алгебра == |
69 | | Со комбинирање на сите чекори, добиваме целосен израз за релационата алгебра: |
70 | | |
71 | | π_{pc.genre_name, pc.artist_name, pc.play_count} ((γ_{g.genre_id, g.name → genre_name, ar.name → artist_name, COUNT(*) → play_count}(σ_{c.customer_id = 123} ((customer ⋈ invoice) ⋈ (invoice_line ⋈ track) ⋈ (track ⋈ genre) ⋈ (track ⋈ album) ⋈ (album ⋈ artist)))) ⋈{pc.genre_id = mpc.genre_id ∧ pc.play_count = mpc.max_count} (γ{genre_id, MAX(play_count) → max_count} (!PlayCounts))) |