Database (basis data) adalah kumpulan data yang terorganisir dan dapat diakses secara elektronik. Database digunakan untuk menyimpan, mengelola, dan mengambil informasi dengan efisien.
Sejarah Database
1960-an - Database berbasis file
1970 - Model relational database (E.F. Codd)
1980 - Oracle, IBM DB2
1995 - MySQL released
2000-an - NoSQL emergence
Jenis-Jenis Database
πRelational (SQL)
MySQL, PostgreSQL, Oracle
πNoSQL
MongoDB, Cassandra, Redis
π²Hierarchical
IBM IMS
πΈοΈNetwork
IDMS, CODASYL
SQL vs NoSQL
Aspek
SQL (Relational)
NoSQL
Struktur
Table dengan baris & kolom
Dokumen, Key-Value, Graph
Schema
Fixed/Strict
Flexible/Dynamic
Skalabilitas
Vertical
Horizontal
Contoh
MySQL, PostgreSQL
MongoDB, Redis
DBMS (Database Management System)
DBMS adalah software untuk membuat dan mengelola database:
π§ MySQL - Open source, paling populer
π PostgreSQL - Open source, fitur lengkap
π SQLite - Embedded, ringan
π MongoDB - Document database
π΄ Oracle - Enterprise, berbayar
πΉ Video Tutorial Bagian 1:
π¬ Bagian 2: MySQL Dasar
Apa itu MySQL?
MySQL adalah sistem manajemen database relasional (RDBMS) open-source yang paling populer di dunia. MySQL digunakan oleh jutaan website termasuk WordPress, Facebook, dan YouTube.
Cara Install MySQL
# Cara 1: XAMPP (Direkomendasikan untuk pemula)# 1. Download XAMPP dari https://www.apachefriends.org# 2. Install dan jalankan Apache & MySQL# 3. Buka http://localhost/phpmyadmin# Cara 2: MySQL Installer# 1. Download dari https://dev.mysql.com/downloads/installer/# 2. Install MySQL Server# 3. Buka MySQL Workbench# Cara 3: Command Line
mysql -u root -p
Membuat Database
-- Melihat semua database
SHOW DATABASES;
-- Membuat database baru
CREATE DATABASE sekolah;
-- Menggunakan database
USE sekolah;
-- Menghapus database
DROP DATABASE sekolah;
Membuat Tabel
-- Membuat tabel siswa
CREATE TABLE siswa (
id INT PRIMARY KEY AUTO_INCREMENT,
nama VARCHAR(100) NOT NULL,
nis VARCHAR(20) UNIQUE,
tanggal_lahir DATE,
alamat TEXT,
nilai_rata DECIMAL(4,2),
status_aktif BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Melihat struktur tabel
DESCRIBE siswa;
-- Melihat semua tabel
SHOW TABLES;
CRUD - Insert Data
-- Insert satu data
INSERT INTO siswa (nama, nis, tanggal_lahir, alamat, nilai_rata)
VALUES ('Budi Santoso', '12345', '2008-05-15', 'Jakarta', 85.50);
-- Insert multiple data
INSERT INTO siswa (nama, nis, tanggal_lahir, alamat, nilai_rata) VALUES
('Ani Wijaya', '12346', '2008-08-20', 'Bandung', 90.00),
('Citra Dewi', '12347', '2008-03-10', 'Surabaya', 88.75),
('Dodi Firmanto', '12348', '2008-12-05', 'Medan', 92.25);
-- Insert dengan DEFAULT
INSERT INTO siswa (nama, nis, nilai_rata)
VALUES ('Eko Prasetyo', '12349', 80.00);
CRUD - Select Data
-- Select semua data
SELECT * FROM siswa;
-- Select kolom tertentu
SELECT nama, nilai_rata FROM siswa;
-- Select dengan WHERE (kondisi)
SELECT * FROM siswa WHERE nilai_rata > 85;
-- Select dengan operator
SELECT * FROM siswa WHERE status_aktif = TRUE;
SELECT * FROM siswa WHERE nama LIKE 'B%';
SELECT * FROM siswa WHERE nilai_rata BETWEEN 80 AND 90;
-- Select dengan ORDER BY
SELECT * FROM siswa ORDER BY nilai_rata DESC;
SELECT * FROM siswa ORDER BY nama ASC;
-- Select dengan LIMIT
SELECT * FROM siswa ORDER BY nilai_rata DESC LIMIT 3;
CRUD - Update Data
-- Update satu field
UPDATE siswa
SET nilai_rata = 88.00
WHERE id = 1;
-- Update multiple field
UPDATE siswa
SET nama = 'Budi Santoso', alamat = 'Jakarta Selatan'
WHERE id = 1;
-- Update semua data (hati-hati!)
UPDATE siswa
SET nilai_rata = nilai_rata + 5;
CRUD - Delete Data
-- Delete dengan kondisi
DELETE FROM siswa WHERE id = 5;
-- Delete semua data (hati-hati!)
DELETE FROM siswa;
-- Mengosongkan tabel
TRUNCATE TABLE siswa;
πΉ Video Tutorial Bagian 2:
π Bagian 3: Query SQL Lanjutan
Fungsi Agregat
-- COUNT - Menghitung jumlah data
SELECT COUNT(*) FROM siswa;
SELECT COUNT(*) FROM siswa WHERE nilai_rata > 85;
-- SUM - Menjumlahkan nilai
SELECT SUM(nilai_rata) FROM siswa;
-- AVG - Menghitung rata-rata
SELECT AVG(nilai_rata) FROM siswa;
-- MAX - Nilai terbesar
SELECT MAX(nilai_rata) FROM siswa;
-- MIN - Nilai terkecil
SELECT MIN(nilai_rata) FROM siswa;
-- GROUP BY - Mengelompokkan data
SELECT status_aktif, COUNT(*) as total
FROM siswa
GROUP BY status_aktif;
JOIN - Menggabungkan Tabel
-- Membuat tabel tambahan
CREATE TABLE kelas (
id INT PRIMARY KEY AUTO_INCREMENT,
nama_kelas VARCHAR(20) NOT NULL,
walikelas VARCHAR(100)
);
INSERT INTO kelas (nama_kelas, walikelas) VALUES
('X IPA 1', 'Pak Ahmad'),
('X IPA 2', 'Bu Siti'),
('X IPS 1', 'Pak Budi');
ALTER TABLE siswa ADD COLUMN kelas_id INT;
UPDATE siswa SET kelas_id = 1 WHERE id IN (1,2);
UPDATE siswa SET kelas_id = 2 WHERE id = 3;
-- INNER JOIN
SELECT siswa.nama, kelas.nama_kelas
FROM siswa
INNER JOIN kelas ON siswa.kelas_id = kelas.id;
-- LEFT JOIN
SELECT siswa.nama, kelas.nama_kelas
FROM siswa
LEFT JOIN kelas ON siswa.kelas_id = kelas.id;
-- RIGHT JOIN
SELECT siswa.nama, kelas.nama_kelas
FROM siswa
RIGHT JOIN kelas ON siswa.kelas_id = kelas.id;
Subquery
-- Subquery di WHERE
SELECT * FROM siswa
WHERE nilai_rata > (SELECT AVG(nilai_rata) FROM siswa);
-- Subquery dengan IN
SELECT * FROM siswa
WHERE kelas_id IN (SELECT id FROM kelas WHERE nama_kelas LIKE 'X IPA%');
-- Subquery di FROM
SELECT nama, nilai_rata,
(SELECT AVG(nilai_rata) FROM siswa) as rata_kelas
FROM siswa;
UNION
-- UNION - Menggabungkan hasil
SELECT nama FROM siswa WHERE nilai_rata > 85
UNION
SELECT nama FROM siswa WHERE status_aktif = FALSE;
-- UNION ALL (termasuk duplikat)
SELECT nama FROM siswa WHERE nilai_rata > 85
UNION ALL
SELECT nama FROM siswa WHERE nilai_rata > 85;
Alias dan Column Calculation
-- Alias untuk kolom
SELECT nama AS 'Nama Siswa', nilai_rata AS 'Nilai' FROM siswa;
-- Alias untuk tabel
SELECT s.nama, k.nama_kelas
FROM siswa AS s
JOIN kelas AS k ON s.kelas_id = k.id;
-- Perhitungan kolom
SELECT nama, nilai_rata,
nilai_rata * 10 AS 'Nilai Akhir'
FROM siswa;
-- Kondisi dengan CASE
SELECT nama, nilai_rata,
CASE
WHEN nilai_rata >= 90 THEN 'A - Sempurna'
WHEN nilai_rata >= 80 THEN 'B - Baik'
WHEN nilai_rata >= 70 THEN 'C - Cukup'
ELSE 'D - Perlu Perbaikan'
END AS predikat
FROM siswa;
πΉ Video Tutorial Bagian 3:
π Bagian 4: Database Design & ERD
Apa itu ERD?
ERD (Entity Relationship Diagram) adalah diagram yang menunjukkan hubungan antar entitas dalam database.
Komponen ERD
π¦ Entity - Objek yang akan disimpan (Tabel)
π Attribute - Sifat/entity (Kolom)
π Relationship - Hubungan antar entity
Jenis Relasi
-- One-to-One (1:1)-- Contoh: Satu siswa punya satu KK-- siswa.id = kartu_keluarga.siswa_id-- One-to-Many (1:N) atau Many-to-One (N:1)-- Contoh: Satu kelas punya banyak siswa-- kelas.id = siswa.kelas_id-- Many-to-Many (N:N)-- Contoh: Siswa mengambil banyak mata pelajaran-- Butuh tabel penghubung: siswa_mata_pelajaran
Normalisasi Database
Normalisasi adalah proses mengorganisasi data untuk mengurangi redundansi:
Normal Form 1 (1NF)
Setiap kolom hanya satu nilai
Setiap kolom harus atomic (tidak bisa dibagi)
Setiap baris unik
Normal Form 2 (2NF)
Sudah memenuhi 1NF
Semua kolom non-key bergantung penuh pada primary key
Normal Form 3 (3NF)
Sudah memenuhi 2NF
Tidak ada transitive dependency
Kolom non-key tidak bergantung pada kolom non-key lain
Contoh Desain Database Sekolah
-- Tabel: siswa
CREATE TABLE siswa (
id INT PRIMARY KEY AUTO_INCREMENT,
nis VARCHAR(20) UNIQUE,
nama VARCHAR(100),
kelas_id INT,
FOREIGN KEY (kelas_id) REFERENCES kelas(id)
);
-- Tabel: kelas
CREATE TABLE kelas (
id INT PRIMARY KEY AUTO_INCREMENT,
nama_kelas VARCHAR(20),
walikelas_id INT,
FOREIGN KEY (walikelas_id) REFERENCES guru(id)
);
-- Tabel: mata_pelajaran
CREATE TABLE mata_pelajaran (
id INT PRIMARY KEY AUTO_INCREMENT,
nama_mapel VARCHAR(50),
guru_id INT,
FOREIGN KEY (guru_id) REFERENCES guru(id)
);
-- Tabel: nilai (tabel penghubung N:N)
CREATE TABLE nilai (
id INT PRIMARY KEY AUTO_INCREMENT,
siswa_id INT,
mapel_id INT,
nilai DECIMAL(4,2),
FOREIGN KEY (siswa_id) REFERENCES siswa(id),
FOREIGN KEY (mapel_id) REFERENCES mata_pelajaran(id)
);
πΉ Video Tutorial Bagian 4:
π Bagian 5: PostgreSQL
Apa itu PostgreSQL?
PostgreSQL adalah sistem database relasional object (ORDBMS) open-source yang sangat powerful. PostgreSQL dikenal dengan fitur-fiturnya yang lengkap dan compliant dengan standar SQL.
Keunggulan PostgreSQL
π ACID Compliant - Transaksi yang aman
π PostGIS - Support data geografis
π Full-Text Search - Pencarian teks lengkap
β‘ JSON Support - Bisa menyimpan JSON
π Foreign Data Wrappers - Integrasi dengan database lain
Install PostgreSQL
# Cara 1: Download dari website resmi# https://www.postgresql.org/download/# Cara 2: Menggunakan pgAdmin (GUI)# Cara 3: Command Line (Linux)
sudo apt update
sudo apt install postgresql postgresql-contrib
# Masuk ke PostgreSQL
sudo -u postgres psql
Perbedaan MySQL vs PostgreSQL
Fitur
MySQL
PostgreSQL
JSON
JSON & JSONB
JSON, JSONB, Array
Inheritance
Tidak ada
Ya
CTE
Dari v8.4
Ya
Full-Text Search
Plugin
Bawaan
PostgreSQL Specific Features
-- Array Type
CREATE TABLE test (
id SERIAL PRIMARY KEY,
nama VARCHAR(50),
nilai INTEGER[]
);
INSERT INTO test (nama, nilai)
VALUES ('Budi', ARRAY[80, 85, 90]);
-- JSON Type
CREATE TABLE produk (
id SERIAL PRIMARY KEY,
nama VARCHAR(100),
spesifikasi JSON
);
INSERT INTO produk (nama, spesifikasi)
VALUES ('Laptop', '{"prosesor": "Intel i7", "RAM": "16GB"}'::json);
-- Common Table Expression (CTE)
WITH high_scorers AS (
SELECT nama, nilai_rata
FROM siswa
WHERE nilai_rata > 85
)
SELECT * FROM high_scorers
ORDER BY nilai_rata DESC;
-- Window Functions
SELECT nama, nilai_rata,
AVG(nilai_rata) OVER() as rata_kelas,
RANK() OVER(ORDER BY nilai_rata DESC) as ranking
FROM siswa;
πΉ Video Tutorial Bagian 5:
π Bagian 6: SQLite
Apa itu SQLite?
SQLite adalah database engine yang tertanam (embedded). SQLite tidak memerlukan server terpisah - seluruh database disimpan dalam satu file. Sangat ringan dan cocok untuk aplikasi mobile dan desktop.
Keunggulan SQLite
πΎ Zero Configuration - Tidak perlu setup
π Single File - Database dalam satu file
π Fast - Sangat cepat untuk operasi sederhana
π± Embedded - Cocok untuk mobile apps
π Open Source - Gratis digunakan
Penggunaan SQLite
# Install SQLite (jika belum ada)# Linux
sudo apt install sqlite3
# Membuat database
sqlite3 sekolah.db
# Di dalam SQLite shell
sqlite> .tables
sqlite> .schema siswa
sqlite> SELECT * FROM siswa;
sqlite> .exit
Python + SQLite
# Mengakses SQLite dengan Pythonimport sqlite3
# Membuat koneksi (file otomatis dibuat)
conn = sqlite3.connect('sekolah.db')
cursor = conn.cursor()
# Membuat tabel
cursor.execute('''
CREATE TABLE IF NOT EXISTS siswa (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL,
nilai REAL
)
''')
# Insert data
cursor.execute('INSERT INTO siswa (nama, nilai) VALUES (?, ?)',
('Budi', 85.5))
conn.commit()
# Select data
cursor.execute('SELECT * FROM siswa')
for row in cursor.fetchall():
print(row)
# Tutup koneksi
conn.close()
PHP + SQLite
// PHP dengan SQLite3// Membuat koneksi
$db = new SQLite3('sekolah.db');
// Membuat tabel
$db->exec('CREATE TABLE IF NOT EXISTS siswa (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT,
nilai REAL
)');
// Insert data
$stmt = $db->prepare('INSERT INTO siswa (nama, nilai) VALUES (:nama, :nilai)');
$stmt->bindValue(':nama', 'Ani', SQLITE3_TEXT);
$stmt->bindValue(':nilai', 90.5, SQLITE3_FLOAT);
$stmt->execute();
// Select data
$result = $db->query('SELECT * FROM siswa');
while ($row = $result->fetchArray()) {
echo $row['nama'] . " ";
}
// Tutup koneksi
$db->close();
?>
Kapan Menggunakan SQLite?
β Gunakan SQLite untuk:
Aplikasi Android/iOS
Aplikasi Desktop
Prototyping/Development
Website dengan traffic rendah-sedang
Cache/penyimpanan lokal
β οΈ Hindari SQLite untuk:
Website dengan traffic tinggi
Aplikasi yang butuh banyak user bersamaan
Data yang sangat besar (>1TB)
πΉ Video Tutorial Bagian 6:
π Bagian 7: MongoDB (NoSQL)
Apa itu MongoDB?
MongoDB adalah database dokumen NoSQL yang paling populer. Data disimpan dalam format JSON-like (BSON), sangat fleksibel dan mudah di-scale.
Konsep MongoDB
π Document - Data dalam format JSON/BSON
π Collection - Kumpulan dokumen (seperti tabel)
ποΈ Database - Kumpulan collection
Install MongoDB
# Cara 1: MongoDB Atlas (Cloud - Free Tier)# 1. Daftar di https://www.mongodb.com/cloud/atlas# 2. Buat cluster gratis# 3. Ambil connection string# Cara 2: Local Installation (Linux)
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt update
sudo apt install mongodb-org
sudo systemctl start mongod
# Cara 3: MongoDB Compass (GUI)# Download dari https://www.mongodb.com/products/compass
# Install pymongo
pip install pymongo
# Python dengan MongoDBfrom pymongo import MongoClient
# Koneksi ke MongoDB Atlas
client = MongoClient(
"mongodb+srv://username:password@cluster.mongodb.net/?retryWrites=true&w=majority"
)
# Pilih database dan collection
db = client['sekolah_db']
collection = db['siswa']
# Insert data
siswa_baru = {
"nama": "Budi Santoso",
"nilai": [85, 90, 88]
}
result = collection.insert_one(siswa_baru)
print(f"ID: {result.inserted_id}")
# Find datafor siswa in collection.find():
print(siswa)
# Find dengan filterfor siswa in collection.find({"nama": "Budi"}):
print(siswa)
πΉ Video Tutorial Bagian 7:
π Bagian 8: Proyek Database
π‘ Ide Proyek Database
Sistem Informasi Sekolah - Data siswa, guru, nilai
Toko Online - Data produk, pesanan, customer
Sistem Perpustakaan - Data buku, peminjaman
Inventory System - Data barang, stok
Blog dengan MongoDB - Post, komentar, user
Contoh: Sistem Informasi Siswa Sederhana
-- Create Database
CREATE DATABASE sistem_sekolah;
USE sistem_sekolah;
-- Tabel Siswa
CREATE TABLE siswa (
id INT PRIMARY KEY AUTO_INCREMENT,
nis VARCHAR(20) UNIQUE NOT NULL,
nama VARCHAR(100) NOT NULL,
gender ENUM('L', 'P'),
tanggal_lahir DATE,
alamat TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Guru
CREATE TABLE guru (
id INT PRIMARY KEY AUTO_INCREMENT,
nip VARCHAR(20) UNIQUE NOT NULL,
nama VARCHAR(100) NOT NULL,
mapel VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tabel Mata Pelajaran
CREATE TABLE mata_pelajaran (
id INT PRIMARY KEY AUTO_INCREMENT,
kode_mapel VARCHAR(10) UNIQUE,
nama_mapel VARCHAR(50),
guru_id INT,
FOREIGN KEY (guru_id) REFERENCES guru(id)
);
-- Tabel Kelas
CREATE TABLE kelas (
id INT PRIMARY KEY AUTO_INCREMENT,
nama_kelas VARCHAR(20) UNIQUE,
walikelas_id INT,
FOREIGN KEY (walikelas_id) REFERENCES guru(id)
);
-- Tabel Nilai
CREATE TABLE nilai (
id INT PRIMARY KEY AUTO_INCREMENT,
siswa_id INT,
mapel_id INT,
nilai DECIMAL(4,2),
semester VARCHAR(10),
tahun_ajaran VARCHAR(20),
FOREIGN KEY (siswa_id) REFERENCES siswa(id),
FOREIGN KEY (mapel_id) REFERENCES mata_pelajaran(id)
);
-- View: Rapor Siswa
CREATE VIEW rapor_siswa AS
SELECT
s.nama as nama_siswa,
k.nama_kelas,
mp.nama_mapel,
n.nilai,
n.semester
FROM nilai n
JOIN siswa s ON n.siswa_id = s.id
JOIN kelas k ON s.kelas_id = k.id
JOIN mata_pelajaran mp ON n.mapel_id = mp.id;
-- Query: Rata-rata nilai per siswa
SELECT
s.nama,
AVG(n.nilai) as rata_rata,
MIN(n.nilai) as nilai_terendah,
MAX(n.nilai) as nilai_tertinggi
FROM siswa s
JOIN nilai n ON s.id = n.siswa_id
GROUP BY s.id, s.nama
ORDER BY rata_rata DESC;