Soal text
Transkripsi dicocokkan dengan 5 halaman naskah asli.
Redaksi dirapikan untuk dibaca. Data, pilihan jawaban, dan subsoal mengikuti naskah; diagram dijelaskan dalam teks atau tabel.
Lompat ke soal
UTS Manajemen Basis Data 2024/2025
Jumat, 11 April 2025 · 08.00–09.40 WIB (100 menit) · Buku tertutup. Tuliskan NIM dan nama pada setiap lembar. Dilarang bekerja sama. Jawaban ditulis tangan, jelas, tanpa pensil. HP, tas, dan laptop dikumpulkan di depan; hanya alat tulis dan kartu ujian yang dibawa.
Data untuk soal 1–8
Isi bagian bernomor tebal pada setiap potongan SQL.
events
| ID | NAME | EVENT_DATE | DESCRIPTION | COST | VENUE_ID | PACKAGE_CODE | CLIENT_NUMBER |
|---|---|---|---|---|---|---|---|
| 100 | Peters Graduation | 14-May-2004 | Party for 200, red, white, blue motif | 8000 | 100 | 112 | 5922 |
| 105 | Vigil wedding | 28-Apr-2004 | Black tie at Four Season hotel | 10000 | 220 | 220 | 6133 |
clients
| CLIENT_NUMBER | FIRST_NAME | LAST_NAME | PHONE | |
|---|---|---|---|---|
| 5922 | Hiram | Peters | 3715832249 | hpeters@yahoo.com |
| 5857 | Serena | Jones | 7035335900 | serena.jones@jones.com |
| 6133 | Lauren | Vigil | 4072220090 | lbv@lbv.net |
venues
| ID | LOC_TYPE | ADDRESS | RENTAL_FEE | COMMENTS |
|---|---|---|---|---|
| 100 | Private Home | 52 West End Drive, Los Angeles, CA 90210 | 0 | Large kitchen, spacious lawn |
| 105 | Private Home | 123 Magnolia Road, Hudson, N.Y. 11220 | 0 | 3 level townhouse, speakers on all floors |
| 101 | Private Home | 4 Primrose Lane, Chevy Chase, MD 22127 | 0 | Gazebo, multi-level deck |
| 95 | School Hall | 4 Mahogany Drive, Boston, MA 10010 | 75/hour | School closes at 10pm |
| 99 | National Park | 87 Park Avenue, San Diego, CA 28978 | 400/flat fee | Bring generators |
| 220 | Hotel | 200 Pennsylvania Ave, Washington D.C. 09002 | 300/per person | Classy affair, tight security, private entrance for vendors |
packages
| CODE | LOW_RANGE | HIGH_RANGE |
|---|---|---|
| 79 | 500 | 2500 |
| 87 | 2501 | 5000 |
| 112 | 5001 | 10000 |
| 200 | 10001 | 15000 |
1. Stored procedure (10%)
Buat stored procedure yang menambahkan data baru ke tabel events.
DELIMITER $$
CREATE PROCEDURE tambah_event(
IN p_ID INT,
IN p_NAME VARCHAR(255),
IN p_EVENT_DATE DATE,
IN p_DESCRIPTION TEXT,
IN p_COST DECIMAL(10,2),
IN p_VENUE_ID INT,
IN p_PACKAGE_CODE INT,
IN p_CLIENT_NUMBER INT
)
BEGIN
INSERT INTO (1) __________________;
VALUES (2) ______________________;
END$$
DELIMITER ;
2. Function (10%)
Hitung total biaya penyelenggaraan event berdasarkan event ID: jumlah cost dan rental_fee dari venue yang digunakan.
DELIMITER $$
CREATE FUNCTION total_biaya_event(event_id INT) RETURNS (1) ____
(2) ____
BEGIN
DECLARE total_cost DECIMAL(10,2);
SELECT (3) ____ INTO total_cost
FROM events e
JOIN venues v
ON e.VENUE_ID = v.ID
WHERE e.ID = event_id;
RETURN (4) ____;
END$$
DELIMITER ;
SELECT total_biaya_event(100);
3. Trigger (10%)
COST pada events tidak boleh negatif. Jika update memberikan nilai negatif, trigger harus menggagalkannya.
DELIMITER $$
(1) ____
(2) ____
(3) ____
BEGIN
IF (4) ____ < 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Error: Cost cannot be negative!';
END IF;
END$$
DELIMITER ;
4. View (10%)
Tampilkan informasi lengkap event beserta nama client dan lokasi venue.
(1) ____
SELECT
e.ID AS EventID,
e.NAME AS EventName,
e.EVENT_DATE,
e.DESCRIPTION,
e.COST,
c.FIRST_NAME,
c.LAST_NAME,
c.PHONE,
v.ADDRESS AS VenueAddress,
v.LOC_TYPE AS VenueType
FROM (2) ____
JOIN (3) ____ ON ____
JOIN (4) ____ ON ____;
5. Parameter INOUT (10%)
Stored procedure menerima CLIENT_NUMBER. Tambahkan 1000 jika kurang dari 6000; kurangi 500 jika lebih dari atau sama dengan 6000.
DELIMITER $$
CREATE PROCEDURE ubah_client_number(INOUT (1) ____)
BEGIN
IF (2) ____ THEN
SET (3) ____;
ELSE
SET (4) ____;
END IF;
END$$
DELIMITER ;
SET @client_number = 5922;
CALL ubah_client_number(@client_number);
SELECT @client_number;
6. Function di klausa WHERE (10%)
Buat function yang mengembalikan daftar event dengan biaya di atas rata-rata, lalu panggil dalam query menggunakan WHERE.
DELIMITER $$
CREATE FUNCTION above_average_event(event_id INT) RETURNS BOOLEAN
(1) ____
BEGIN
DECLARE avg_cost DECIMAL(10,2);
DECLARE event_cost DECIMAL(10,2);
SELECT AVG(COST) INTO avg_cost FROM events;
SELECT COST INTO event_cost FROM events WHERE ID = event_id;
RETURN event_cost > avg_cost;
END$$
DELIMITER ;
SELECT * FROM events WHERE (2) ____;
7. Riwayat perubahan (10%)
Buat trigger AFTER UPDATE untuk menyimpan perubahan biaya event pada event_cost_history (event_id, old_cost, new_cost, update_date).
CREATE TABLE event_cost_history (
event_id INT,
old_cost DECIMAL(10,2),
new_cost DECIMAL(10,2),
update_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
DELIMITER $$
(1) ____
AFTER UPDATE ON events
(2) ____
BEGIN
IF (3) ____ THEN
INSERT INTO (4) ____
VALUES (5) ____;
END IF;
END$$
DELIMITER ;
8. Jumlah event (10%)
Buat view yang menghitung jumlah event pada setiap lokasi venue.
CREATE VIEW (1) ____
SELECT
v.ID AS VenueID,
v.ADDRESS AS VenueAddress,
COUNT(e.ID) AS TotalEvents
FROM (2) ____
JOIN (3) ____ ON ____
GROUP BY (4) ____
HAVING (5) ____;
9. Buffer management (10%)
Jelaskan bagaimana buffer management bekerja pada sebuah penyimpanan data!
10. Indexing (10%)
Jelaskan primary dan secondary indexing, serta clustered dan nonclustered indexing!