Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Lian Abednego - 2110315 - TugasIndividu - 1

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Nama : Lian Abednego

NIM : 21102315
Sistem Basis Data – Tugas Individu

1. Buat Database
CREATE DATABASE tugas_sistembasisdata;
2. Buat 3 tabel yang terdiri atas tabel master dan tabel transaksi
CREATE TABLE products (
product_id INT PRIMARY KEY AUTO_INCREMENT,
product_name
VARCHAR(100), price
DECIMAL(10, 2),
stock INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_name VARCHAR(100),
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
total_amount DECIMAL(10, 2)
);
CREATE TABLE order_details (
order_detail_id INT PRIMARY KEY AUTO_INCREMENT,
order_id INT,
product_i
d INT,
quantity
INT,
price DECIMAL(10, 2),
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES
products(product_id)
);
3. Masing-masing tabel berisi 50 records
-Tabel products
INSERT INTO products (product_name, price, stock) VALUES
('Roti Manis', 12000.00, 100),
('Roti Kukus', 11000.00, 150),
('Roti Kasur', 14000.00, 200),
('Mexican Bun', 15000.00, 100),
('Pita Bread', 29000.00, 50),
('Sandwich', 9000.00, 120),
('Roti Sobek', 8000.00, 80),
('Roti Tawar', 17000.00, 60),
('Puding', 12000.00, 90),
('Garlic Wheat Bread', 10000.00, 100),
('Milk Bun', 5000.00, 200),
('Garlic Bread', 12000.00, 70),
('Roti Strawberry', 30000.00, 50),
('Roti My Way', 15000.00, 80),
('Roti Yoghurt', 25000.00, 60),
('Roti Goreng', 30000.00, 40),
('Potato Cheese Bread', 2500.00, 500),
('Bread Flower', 2500.00, 500),
('Roti Tape', 1500.00, 300),
('Roti Boy', 12000.00, 60),
('Choco Cinnamon Roll', 7000.00, 120),
('Roti Panggang', 6000.00, 90),
('Sourdough Garlic Butter Cheese', 30000.00, 80),
('Roti Isi', 25000.00, 90),
('Roti Jala', 40000.00, 60),
('Brudel', 35000.00, 70),
('Kreker Keju', 10000.00, 100),
('Setup Roti Tawar', 8000.00, 110),
('Mini Beef Floss Bun', 7000.00, 120),
('Roti O', 6000.00, 90),
('Roti Keju', 5000.00, 150),
('Sourdough Discard Pizza', 10000.00, 100),
('Roti Buah Naga', 8000.00, 120),
('Flourless Baguette', 25000.00, 70),
('Double Choco Bread', 20000.00, 80),
('Roti Sisir', 15000.00, 60),
('Roti Sosis', 12000.00, 90),
('Roti Cokelat', 10000.00, 100),
('Brudel Cake', 7000.00, 80),
('Roti Telur', 5000.00, 150),
('Pizza', 6000.00, 150),
('Pumpkin Hokkaido Bread', 12000.00, 100),
('Burger', 3000.00, 120),
('Turkish Flat Bread', 9000.00, 100),
('Pandan Bread', 9000.00, 100),
('Roti Mantau', 15000.00, 70),
('Assorted Flat Bread', 12000.00, 60),
('Roti Kentang', 15000.00, 50),
('Roti Pisang', 12000.00, 40),
('Roti Bakar', 10000.00, 100);
- Tabel orders
INSERT INTO orders (customer_name, order_date, total_amount) VALUES
('Wonyoung', '2023-01-05 10:15:00', 120000.00),
('Gehlee', '2023-01-06 11:20:00', 90000.00),
('Elisia', '2023-01-07 12:25:00', 145000.00),
('Shuhua', '2023-01-08 09:30:00', 75000.00),
('Yuqi', '2023-01-09 10:35:00', 180000.00),
('Rose', '2023-01-10 08:40:00', 95000.00),
('Chiquita', '2023-01-11 14:45:00', 125000.00),
('Yujin', '2023-01-12 15:50:00', 135000.00),
('Lisa', '2023-01-13 16:55:00', 110000.00),
('Tzuyu', '2023-01-14 17:00:00', 130000.00),
('Haerin', '2023-01-15 10:05:00', 105000.00),
('Kazuha', '2023-01-16 11:10:00', 95000.00),
('Jennie', '2023-01-17 12:15:00', 150000.00),
('Jessica', '2023-01-18 13:20:00', 120000.00),
('Minji', '2023-01-19 14:25:00', 80000.00),
('Jisoo', '2023-01-20 15:30:00', 110000.00),
('Danielle', '2023-01-21 16:35:00', 140000.00),
('Ruka', '2023-01-22 17:40:00', 90000.00),
('Yoona', '2023-01-23 08:45:00', 130000.00),
('Hanni', '2023-01-24 09:50:00', 120000.00),
('Ahyeon', '2023-01-25 10:55:00', 75000.00),
('Hyein', '2023-01-26 11:00:00', 145000.00),
('Ningning', '2023-01-27 12:05:00', 125000.00),
('Mina', '2023-01-28 13:10:00', 135000.00),
('Chaeryeong', '2023-01-29 14:15:00', 95000.00),
('IU', '2023-01-30 15:20:00', 85000.00),
('Yeji', '2023-01-31 16:25:00', 155000.00),
('Pharita', '2023-02-01 17:30:00', 130000.00),
('Irene', '2023-02-02 08:35:00', 120000.00),
('Taeyeon', '2023-02-03 09:40:00', 115000.00),
('Asa', '2023-02-04 10:45:00', 105000.00),
('Liz', '2023-02-05 11:50:00', 125000.00),
('Chanty', '2023-02-06 12:55:00', 95000.00),
('Seulgi', '2023-02-07 13:00:00', 110000.00),
('Dara', '2023-02-08 14:05:00', 145000.00),
('Yuri', '2023-02-09 15:10:00', 120000.00),
('Karina', '2023-02-10 16:15:00', 85000.00),
('Rei', '2023-02-11 17:20:00', 90000.00),
('Jeongyeon', '2023-02-12 08:25:00', 130000.00),
('Gaeuk', '2023-02-13 09:30:00', 110000.00),
('Ryujin', '2023-02-14 10:35:00', 125000.00),
('Yuna', '2023-02-15 11:40:00', 100000.00),
('Leeseo', '2023-02-16 12:45:00', 95000.00),
('Tiffany', '2023-02-17 13:50:00', 135000.00),
('Winter', '2023-02-18 14:55:00', 120000.00),
('Rora', '2023-02-19 15:00:00', 105000.00),
('Momo', '2023-02-20 16:05:00', 130000.00),
('Rami', '2023-02-21 17:10:00', 90000.00),
('Yunjin', '2023-02-22 08:15:00', 95000.00),
('Giselle', '2023-02-23 09:16:00', 96000.00);
- Tabel order_details
INSERT INTO order_details (order_id, product_id, quantity, price) VALUES
(1, 1, 2, 12000.00),
(1, 3, 1, 14000.00),
(2, 2, 5, 11000.00),
(2, 5, 2, 29000.00),
(3, 6, 3, 9000.00),
(3, 4, 2, 15000.00),
(4, 7, 1, 8000.00),
(4, 8, 4, 17000.00),
(5, 9, 2, 12000.00),
(5, 10, 3, 10000.00),
(6, 11, 5, 5000.00),
(6, 12, 2, 12000.00),
(7, 13, 1, 30000.00),
(7, 14, 2, 15000.00),
(8, 15, 3, 25000.00),
(8, 16, 1, 30000.00),
(9, 17, 10, 2500.00),
(9, 18, 8, 2500.00),
(10, 19, 4, 1500.00),
(10, 20, 2, 12000.00),
(11, 21, 5, 7000.00),
(11, 22, 3, 6000.00),
(12, 23, 2, 30000.00),
(12, 24, 1, 25000.00),
(13, 25, 3, 40000.00),
(13, 26, 5, 35000.00),
(14, 27, 8, 10000.00),
(14, 28, 4, 8000.00),
(15, 29, 7, 7000.00),
(15, 30, 10, 6000.00),
(16, 31, 6, 5000.00),
(16, 32, 4, 10000.00),
(17, 33, 3, 25000.00),
(17, 34, 1, 20000.00),
(18, 35, 2, 15000.00),
(18, 36, 5, 12000.00),
(19, 37, 7, 10000.00),
(19, 38, 6, 7000.00),
(20, 39, 5, 5000.00),
(20, 40, 4, 6000.00),
(21, 41, 2, 12000.00),
(21, 42, 1, 3000.00),
(22, 43, 6, 9000.00),
(22, 44, 4, 9000.00),
(23, 45, 3, 15000.00),
(23, 46, 2, 12000.00),
(24, 47, 1, 15000.00),
(24, 48, 3, 12000.00),
(25, 49, 2, 10000.00),
(25, 50, 1, 10000.00);
4. Identifikasi informasi yang paling sering dibutuhkan dari database yang dikelola.
Berikut adalah informasi yang sering dibutuhkan dari database di atas:
• Informasi produk dan stok
• Informasi pesanan
• Informasi pelanggan
• Riwayat Penjualan dan produk
• Detail produk berdasarkan kode produk
5. Buatlah 5 query berdsarkan hasil identifikasi, yang melibatkan:
a. Query pencarian dengan Non-Key(3 query)
- Daftar semua informasi produk dengan products “stock=150”
SELECT * FROM products WHERE stock =150;

- Daftar semua informasi pesanan berdasarkan order_date”2023-01-06”


SELECT * FROM orders WHERE DATE(order_date) = '2023-01-06';

- Daftar semua informasi pelanggan berdasarkan total amount”90000”


SELECT costumer_name, total_ammount FROM orders WHERE
total_ammount = 90000;

b. Query pencarian dengan key(2 query)


- Order_detail berdasarkan order_id“1”
SELECT * FROM orders WHERE order_id = 1;

- Riwayat penjualan dan produk berdasarkan order_id”1”


SELECT o.order_id, o.costumer_name, o.order_date, p.product_name,
od.quantity, od.price, (od.quantity * od.price) AS total_price FROM orders o
JOIN order_details od ON o.order_id = od.order_id JOIN products p ON
od.product_id = p.product_id WHERE o.order_id = 1;
6. Eksekusi kelima query dalam DBMS, kemudian catat waktu eksekusi untuk setiap
query.
SELECT * FROM products WHERE stock =150;

SELECT * FROM orders WHERE DATE(order_date)=’2023-01-06’;

SELECT costumer_name, total_ammount FROM orders WHERE total_ammount =


90000;

SELECT * FROM orders WHERE order_id = 1;

SELECT o.order_id, o.costumer_name, o.order_date, p.product_name, od.quantity,


od.price, (od.quantity * od.price) AS total_price FROM orders o JOIN order_details
od ON o.order_id = od.order_id JOIN products p ON od.product_id = p.product_id
WHERE o.order_id = 1;

7. Identifikasi atribut yang dapat dijadikan index, yang berpeluang untuk meningkatkan
performa si query.
Atribut yang dapat dijadikan index:
- Stock pada products
- order_date pada orders
- total_ammount pada orders
- order_id pada orders dan order_details
- product_id pada products dan order_details
8. Buatlah index sesuai hasil identifikasi
CREATE INDEX idx_products_stock ON products (stock);
CREATE INDEX idx_orders_order_date ON orders
(order_date);
CREATE INDEX idx_orders_total_ammount ON orders (total_ammount);

-- Primary key for order_id in orders (usually indexed automatically)


ALTER TABLE orders
ADD PRIMARY KEY (order_id);
-- Foreign key index for order_id in order_details
CREATE INDEX idx_order_details_order_id ON order_details (order_id);

-- Primary key for product_id in products (usually indexed


automatically) ALTER TABLE products
ADD PRIMARY KEY (product_id);

-- Foreign key index for product_id in order_details


CREATE INDEX idx_order_details_product_id ON order_details (product_id);
9. Eksekusi Kembali kelima query setelah dilakukan penambahan index, dan catat
waktunya.

10. Evaluasi pengaruh penggunaan index untuk setiap query yang dieksekusi.
- Query pada tabel products
Evaluasi:
Sebelum menggunakan indeks, waktu eksekusi sangat cepat kemungkinan karena
jumlah data yang masih sedikit. Namun, setelah indeks diterapkan, waktu eksekusi
justru meningkat secara signifikan. Hal ini mungkin disebabkan oleh overhead
dalam proses pembuatan dan pemanfaatan indeks, atau karena data yang diakses
menjadi lebih kompleks. Ini menunjukkan bahwa, meskipun indeks dapat
mempercepat pencarian di tabel besar, indeks tidak selalu meningkatkan performa
untuk query sederhana atau ketika dataset masih relatif kecil.
- Query pada tabel orders
Evaluasi:
Sebelum adanya indeks, query dieksekusi dengan sangat cepat. Namun, setelah
indeks ditambahkan, waktu eksekusi meningkat, kemungkinan karena adanya
overhead dari pencarian menggunakan indeks. Hal ini menunjukkan bahwa
menambahkan indeks pada kolom dengan jumlah entri yang relatif sedikit tidak
selalu efisien.
- Query total pada tabel orders
Evaluasi:
Sebelum menerapkan indeks, waktu eksekusi sangat rendah. Namun, setelah indeks
diterapkan, waktu eksekusi meningkat. Hal ini menunjukkan bahwa meskipun
pencarian menggunakan indeks seharusnya lebih cepat, overhead dalam
pengelolaan indeks dapat memengaruhi kinerja.
- Query detail pada tabel orders
Evaluasi:
Sebelum menggunakan indeks, waktu eksekusi relatif cepat. Namun, setelah indeks
diterapkan, waktu eksekusi justru meningkat. Meskipun indeks pada kunci utama
seharusnya mempercepat akses, peningkatan waktu ini menunjukkan adanya
kemungkinan biaya pemeliharaan indeks atau masalah lain dalam proses eksekusi
query.
- Query detail produk
Evaluasi:
Sebelum menerapkan indeks, waktu eksekusi sangat cepat. Setelah indeks
digunakan, meskipun waktu eksekusi meningkat, seharusnya indeks membantu
mempercepat pencarian dalam operasi join tabel. Namun, peningkatan waktu ini
menunjukkan adanya biaya tak terduga saat melakukan join menggunakan indeks.
11. Kesimpulan
Evaluasi penggunaan indeks pada query database ini menunjukkan bahwa, meskipun
indeks dirancang untuk meningkatkan performa pencarian, penerapannya dalam
beberapa kasus justru memperlambat waktu eksekusi query, terutama pada tabel yang
kecil atau query sederhana. Hasil analisis memperlihatkan bahwa indeks memang dapat
mempercepat akses data di tabel besar dan kompleks, tetapi juga membawa overhead
pengelolaan yang dapat berdampak negatif pada kinerja. Oleh karena itu, penting
mempertimbangkan ukuran tabel, pola akses data, dan jenis query yang sering
digunakan sebelum menambahkan indeks. Pemeliharaan indeks yang baik, termasuk
penghapusan indeks yang tidak lagi digunakan dan evaluasi berkala, diperlukan untuk
memastikan efektivitasnya dalam meningkatkan performa query. Dengan demikian,
penerapan indeks harus disesuaikan dengan konteks spesifik dan karakteristik data
untuk hasil yang optimal.

You might also like