DatabaseCreation: console_9.sql

File console_9.sql, 5.6 KB (added by 231166, 2 days ago)
Line 
1--za seasons:
2INSERT INTO Season (SeasonNumber, ReleaseYear, SeriesSeriesID)
3SELECT
4 gs AS SeasonNumber,
5 (EXTRACT(YEAR FROM s_media.releaseDate)::int + gs - 1) AS ReleaseYear,
6 ser.SeriesID
7FROM Series ser
8JOIN Media s_media ON ser.SeriesID = s_media.ContentID
9CROSS JOIN generate_series(1, ser.TotalSeasons) AS gs;
10
11-- Watchable за секој филм
12INSERT INTO Watchable (duration, MovieID, EpisodeID)
13SELECT m.Duration, m.MovieID, NULL
14FROM Movie m
15WHERE m.MovieID NOT IN (SELECT MovieID FROM Watchable WHERE MovieID IS NOT NULL);
16
17INSERT INTO Watchable (duration, MovieID, EpisodeID)
18SELECT e.Duration, NULL, e.EpisodeID
19FROM Episode e
20WHERE e.EpisodeID NOT IN (SELECT EpisodeID FROM Watchable WHERE EpisodeID IS NOT NULL);
21
22--polnenje na devices
23INSERT INTO Devices (DeviceType, LastLogIn, UserSubscriptionID)
24SELECT
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
31FROM User_Subscription us
32WHERE (random() < 0.3);
33
34-- CONTENT_ARTIST: секоја содржина добива 1-3 рандом уметници
35INSERT INTO Content_Artist (ContentContentID, ArtistArtistID)
36SELECT DISTINCT m.ContentID, a.ArtistID
37FROM Media m
38CROSS JOIN LATERAL (
39 SELECT ArtistID FROM Artist ORDER BY random() LIMIT (1 + (random() * 2)::int)
40) a
41ON CONFLICT DO NOTHING;
42
43-- CONTENT_GENRE: секоја содржина добива 1-3 рандом жанрови
44INSERT INTO Content_Genre (ContentContentID, GenreGenreID)
45SELECT DISTINCT m.ContentID, g.GenreID
46FROM Media m
47CROSS JOIN LATERAL (
48 SELECT GenreID FROM Genre ORDER BY random() LIMIT (1 + (random() * 2)::int)
49) g
50ON CONFLICT DO NOTHING;
51
52-- CONTENT_LANGUAGE: секоја содржина добива 1-2 рандом јазици
53INSERT INTO Content_Language (ContentContentID, LanguageLanguageID)
54SELECT DISTINCT m.ContentID, l.LanguageID
55FROM Media m
56CROSS JOIN LATERAL (
57 SELECT LanguageID FROM Language ORDER BY random() LIMIT (1 + (random())::int)
58) l
59ON CONFLICT DO NOTHING;
60
61
62--prvo, reviews (10,000,000 zapisi)
63INSERT INTO Review (Comment, ReviewDate, UserUserID, ContentContentID)
64SELECT
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
93FROM
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
105INSERT INTO WatchHistory (WatchedAt, Progress_percentage, UserUserID, ContentContentID, WatchableWatchableID, DevicesDeviceID)
106SELECT
107 CURRENT_DATE - (random() * 365)::int,
108 (random() * 100)::int,
109 u.UserID,
110 w.ContentID,
111 w.WatchableID,
112 d.DeviceID
113FROM
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
138WHERE w.ContentID IS NOT NULL;
139
140
141
142--polnenje na ratings (ova ispadna so 24,450,003 zapisi):
143
144INSERT INTO Rating (Rating_Date, RatingValue, UserUserID, ContentContentID)
145SELECT
146 CURRENT_DATE - (random() * 730)::int,
147 (1 + (random() * 9)::int),
148 u.UserID,
149 m.ContentID
150FROM
151 (SELECT UserID FROM "User" ORDER BY random() LIMIT 50000) u
152 CROSS JOIN
153 (SELECT ContentID FROM Media) m
154ON CONFLICT (UserUserID, ContentContentID) DO NOTHING;
155
156--polnenje na watchlist (2,445,001 zapisi) :
157INSERT INTO Watchlist (dateAdded, UserUserID, ContentContentID, WatchableWatchableID)
158SELECT
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)
168FROM
169 (SELECT UserID FROM "User" ORDER BY random() LIMIT 5000) u
170 CROSS JOIN Media m
171ON CONFLICT (UserUserID, ContentContentID) DO NOTHING;
172
173
174