| 1 | --za seasons:
|
|---|
| 2 | INSERT INTO Season (SeasonNumber, ReleaseYear, SeriesSeriesID)
|
|---|
| 3 | SELECT
|
|---|
| 4 | gs AS SeasonNumber,
|
|---|
| 5 | (EXTRACT(YEAR FROM s_media.releaseDate)::int + gs - 1) AS ReleaseYear,
|
|---|
| 6 | ser.SeriesID
|
|---|
| 7 | FROM Series ser
|
|---|
| 8 | JOIN Media s_media ON ser.SeriesID = s_media.ContentID
|
|---|
| 9 | CROSS JOIN generate_series(1, ser.TotalSeasons) AS gs;
|
|---|
| 10 |
|
|---|
| 11 | -- Watchable за секој филм
|
|---|
| 12 | INSERT INTO Watchable (duration, MovieID, EpisodeID)
|
|---|
| 13 | SELECT m.Duration, m.MovieID, NULL
|
|---|
| 14 | FROM Movie m
|
|---|
| 15 | WHERE m.MovieID NOT IN (SELECT MovieID FROM Watchable WHERE MovieID IS NOT NULL);
|
|---|
| 16 |
|
|---|
| 17 | INSERT INTO Watchable (duration, MovieID, EpisodeID)
|
|---|
| 18 | SELECT e.Duration, NULL, e.EpisodeID
|
|---|
| 19 | FROM Episode e
|
|---|
| 20 | WHERE e.EpisodeID NOT IN (SELECT EpisodeID FROM Watchable WHERE EpisodeID IS NOT NULL);
|
|---|
| 21 |
|
|---|
| 22 | --polnenje na devices
|
|---|
| 23 | INSERT INTO Devices (DeviceType, LastLogIn, UserSubscriptionID)
|
|---|
| 24 | SELECT
|
|---|
| 25 | (ARRAY[
|
|---|
| 26 | 'Smart TV', 'Mobile Phone', 'Tablet', 'Laptop',
|
|---|
| 27 | 'Desktop PC', 'Game Console', 'Streaming Stick'
|
|---|
| 28 | ])[ceil(random() * 7)::int] AS DeviceType,
|
|---|
| 29 | CURRENT_DATE - (random() * 365)::int AS LastLogIn,
|
|---|
| 30 | us.UserSubscriptionID
|
|---|
| 31 | FROM User_Subscription us
|
|---|
| 32 | WHERE (random() < 0.3);
|
|---|
| 33 |
|
|---|
| 34 | -- CONTENT_ARTIST: секоја содржина добива 1-3 рандом уметници
|
|---|
| 35 | INSERT INTO Content_Artist (ContentContentID, ArtistArtistID)
|
|---|
| 36 | SELECT DISTINCT m.ContentID, a.ArtistID
|
|---|
| 37 | FROM Media m
|
|---|
| 38 | CROSS JOIN LATERAL (
|
|---|
| 39 | SELECT ArtistID FROM Artist ORDER BY random() LIMIT (1 + (random() * 2)::int)
|
|---|
| 40 | ) a
|
|---|
| 41 | ON CONFLICT DO NOTHING;
|
|---|
| 42 |
|
|---|
| 43 | -- CONTENT_GENRE: секоја содржина добива 1-3 рандом жанрови
|
|---|
| 44 | INSERT INTO Content_Genre (ContentContentID, GenreGenreID)
|
|---|
| 45 | SELECT DISTINCT m.ContentID, g.GenreID
|
|---|
| 46 | FROM Media m
|
|---|
| 47 | CROSS JOIN LATERAL (
|
|---|
| 48 | SELECT GenreID FROM Genre ORDER BY random() LIMIT (1 + (random() * 2)::int)
|
|---|
| 49 | ) g
|
|---|
| 50 | ON CONFLICT DO NOTHING;
|
|---|
| 51 |
|
|---|
| 52 | -- CONTENT_LANGUAGE: секоја содржина добива 1-2 рандом јазици
|
|---|
| 53 | INSERT INTO Content_Language (ContentContentID, LanguageLanguageID)
|
|---|
| 54 | SELECT DISTINCT m.ContentID, l.LanguageID
|
|---|
| 55 | FROM Media m
|
|---|
| 56 | CROSS JOIN LATERAL (
|
|---|
| 57 | SELECT LanguageID FROM Language ORDER BY random() LIMIT (1 + (random())::int)
|
|---|
| 58 | ) l
|
|---|
| 59 | ON CONFLICT DO NOTHING;
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 | --prvo, reviews (10,000,000 zapisi)
|
|---|
| 63 | INSERT INTO Review (Comment, ReviewDate, UserUserID, ContentContentID)
|
|---|
| 64 | SELECT
|
|---|
| 65 | (ARRAY[
|
|---|
| 66 | 'Absolutely amazing, one of the best!',
|
|---|
| 67 | 'Great story, highly recommend.',
|
|---|
| 68 | 'A bit slow at the start but gets better.',
|
|---|
| 69 | 'Masterpiece of cinema.',
|
|---|
| 70 | 'Not what I expected but still enjoyable.',
|
|---|
| 71 | 'Incredible performances all around.',
|
|---|
| 72 | 'The ending blew my mind.',
|
|---|
| 73 | 'Would watch again without hesitation.',
|
|---|
| 74 | 'Overrated in my opinion.',
|
|---|
| 75 | 'A classic that stands the test of time.',
|
|---|
| 76 | 'Great cinematography and direction.',
|
|---|
| 77 | 'The plot had some holes but overall good.',
|
|---|
| 78 | 'One of the best series ever made.',
|
|---|
| 79 | 'Keeps you on the edge of your seat.',
|
|---|
| 80 | 'The writing is absolutely top-notch.',
|
|---|
| 81 | 'Brilliant acting from start to finish.',
|
|---|
| 82 | 'A must watch for everyone.',
|
|---|
| 83 | 'Did not live up to the hype.',
|
|---|
| 84 | 'Absolutely loved every minute of it.',
|
|---|
| 85 | 'A cinematic masterpiece.'
|
|---|
| 86 | 'This man is my worst nightmare. 10/10',
|
|---|
| 87 | 'No.',
|
|---|
| 88 | 'The portrayal of toxic relationships is very good.'
|
|---|
| 89 | ])[ceil(random() * 20)::int],
|
|---|
| 90 | CURRENT_DATE - (random() * 730)::int,
|
|---|
| 91 | u.UserID,
|
|---|
| 92 | m.ContentID
|
|---|
| 93 | FROM
|
|---|
| 94 | generate_series(1, 10000000) AS gs
|
|---|
| 95 | CROSS JOIN LATERAL (
|
|---|
| 96 | SELECT UserID FROM "User" ORDER BY random() LIMIT 1
|
|---|
| 97 | ) u
|
|---|
| 98 | CROSS JOIN LATERAL (
|
|---|
| 99 | SELECT ContentID FROM Media ORDER BY random() LIMIT 1
|
|---|
| 100 | ) m;
|
|---|
| 101 |
|
|---|
| 102 |
|
|---|
| 103 | --polnenje na watch history (10,000,000 zapisi):
|
|---|
| 104 |
|
|---|
| 105 | INSERT INTO WatchHistory (WatchedAt, Progress_percentage, UserUserID, ContentContentID, WatchableWatchableID, DevicesDeviceID)
|
|---|
| 106 | SELECT
|
|---|
| 107 | CURRENT_DATE - (random() * 365)::int,
|
|---|
| 108 | (random() * 100)::int,
|
|---|
| 109 | u.UserID,
|
|---|
| 110 | w.ContentID,
|
|---|
| 111 | w.WatchableID,
|
|---|
| 112 | d.DeviceID
|
|---|
| 113 | FROM
|
|---|
| 114 | generate_series(1, 10000000) AS gs
|
|---|
| 115 | CROSS JOIN LATERAL (
|
|---|
| 116 | SELECT UserID FROM "User" ORDER BY random() LIMIT 1
|
|---|
| 117 | ) u
|
|---|
| 118 | CROSS JOIN LATERAL (
|
|---|
| 119 | SELECT
|
|---|
| 120 | wa.WatchableID,
|
|---|
| 121 | CASE
|
|---|
| 122 | WHEN wa.MovieID IS NOT NULL THEN wa.MovieID
|
|---|
| 123 | ELSE (
|
|---|
| 124 | SELECT me.ContentID FROM Episode ep
|
|---|
| 125 | JOIN Season se ON ep.SeasonSeasonID = se.SeasonID
|
|---|
| 126 | JOIN Media me ON se.SeriesSeriesID = me.ContentID
|
|---|
| 127 | WHERE ep.EpisodeID = wa.EpisodeID
|
|---|
| 128 | LIMIT 1
|
|---|
| 129 | )
|
|---|
| 130 | END AS ContentID
|
|---|
| 131 | FROM Watchable wa
|
|---|
| 132 | ORDER BY random()
|
|---|
| 133 | LIMIT 1
|
|---|
| 134 | ) w
|
|---|
| 135 | CROSS JOIN LATERAL (
|
|---|
| 136 | SELECT DeviceID FROM Devices ORDER BY random() LIMIT 1
|
|---|
| 137 | ) d
|
|---|
| 138 | WHERE w.ContentID IS NOT NULL;
|
|---|
| 139 |
|
|---|
| 140 |
|
|---|
| 141 |
|
|---|
| 142 | --polnenje na ratings (ova ispadna so 24,450,003 zapisi):
|
|---|
| 143 |
|
|---|
| 144 | INSERT INTO Rating (Rating_Date, RatingValue, UserUserID, ContentContentID)
|
|---|
| 145 | SELECT
|
|---|
| 146 | CURRENT_DATE - (random() * 730)::int,
|
|---|
| 147 | (1 + (random() * 9)::int),
|
|---|
| 148 | u.UserID,
|
|---|
| 149 | m.ContentID
|
|---|
| 150 | FROM
|
|---|
| 151 | (SELECT UserID FROM "User" ORDER BY random() LIMIT 50000) u
|
|---|
| 152 | CROSS JOIN
|
|---|
| 153 | (SELECT ContentID FROM Media) m
|
|---|
| 154 | ON CONFLICT (UserUserID, ContentContentID) DO NOTHING;
|
|---|
| 155 |
|
|---|
| 156 | --polnenje na watchlist (2,445,001 zapisi) :
|
|---|
| 157 | INSERT INTO Watchlist (dateAdded, UserUserID, ContentContentID, WatchableWatchableID)
|
|---|
| 158 | SELECT
|
|---|
| 159 | CURRENT_DATE - (random() * 180)::int,
|
|---|
| 160 | u.UserID,
|
|---|
| 161 | m.ContentID,
|
|---|
| 162 | (SELECT wa.WatchableID FROM Watchable wa
|
|---|
| 163 | WHERE wa.MovieID = m.ContentID OR wa.EpisodeID IN (
|
|---|
| 164 | SELECT e.EpisodeID FROM Episode e
|
|---|
| 165 | JOIN Season se ON e.SeasonSeasonID = se.SeasonID
|
|---|
| 166 | WHERE se.SeriesSeriesID = m.ContentID
|
|---|
| 167 | ) ORDER BY random() LIMIT 1)
|
|---|
| 168 | FROM
|
|---|
| 169 | (SELECT UserID FROM "User" ORDER BY random() LIMIT 5000) u
|
|---|
| 170 | CROSS JOIN Media m
|
|---|
| 171 | ON CONFLICT (UserUserID, ContentContentID) DO NOTHING;
|
|---|
| 172 |
|
|---|
| 173 |
|
|---|
| 174 |
|
|---|