Anda di halaman 1dari 13

SMK BUDI BAKTI CIWIDEY

REKAYASA PERANGKAT LUNAK (RPL)

BASIS DATA (DATABASE)


BELAJAR SQL TINGKAT LANJUT

Disusun Oleh :
Yudi Tayudin

Pengenalan Relasi Table Database


Relasi adalah hubungan antar tabel yang mempresentasikan hubungan
antar objek dan berfungsi untuk mengatur operasi suatu database. Relasi
yang dibentuk dapat mencangkup 3 macam hubungan yaitu :
a. One-To-One (1 - 1)
Mempunyai pengertian setiap baris data pada table pertama
dihubungkan hanya kesatu baris data pada table kedua.

b. One-To-Many (1 - )
Mempunyai Pengertian setiap baris data dari tabel pertama dapat
dihubungkan kesatu baris atau lebih data pada table kedua.

c. Many-To-Many ( - )
Mempunyai pengertian satu baris atau lebih data pada table pertama
bisa dihubungkan kesatu atau lebih baris data pada table kedua.

Perbedaan PRIMARY KEY dan FOREIGN KEY


Primary Key adalah suatu nilai dalam field tabel basis data yang
digunakan untuk mengidentifikasi suatu baris dalam tabel. Nilai dari
primary key adalah unik.
Primary key dipilih jika
mengacu pada 3 kriteria sebagai berikut :

- key tersebut lebih natural jika dijadikan acuan


- key tersebut lebih sederhana
- key tersebut cukup unik
Foreign key adalah adalah sebuah kumpulan field dalam satu relasi yang
digunakan untuk merefer (menunjuk) ke suatu baris (tuple) pada relasi
yang lain . (harus berkorespondensi dengan primary key pada relasi yang
kedua), seperti: logical pointer . Foreign key merupakan sembarang
atribut yang menunjuk kepada primary key pada tabel lain . Sedangkan
hubungan diantara keduanya (primary key dan foreign key) adalah
sebagai berikut :
Primary key adalah field kunci utama dari suatu tabel yang menunjukan
bahwa field yang menjadi kunci tersebut tidak bisa di isi data yang sama,
atau dengan kata lain Primary key menjadikan tiap record memiliki
identitas sendiri-sendiri yang membedakan satu sama lainnya
(unik).Foreign key adalah satu attribute yang melengkapi satu
relationship yang menunjukan ke induknya, dengan kata lain keduanya
saling berkaitan .

Model Relasi Referential Integrity


Ada dua model relasi terhadap Referential Integrity, dengan memilih salah
satu atau
kedua pilihan, yaitu :
Cascade Update Related Fields
Cascade Delete Related Records

a. Cascade Update Related Fields


Setiap perubahan pada Primary Key, pada tabel Utama , maka secara
otomatis
mengubah nilai pada record-record yang berkesesuaian didalam tabel
yang memiliki
relasi dengan tabel Utama .
b. Cascade Delete Related Records
Setiap penghapusan record Primary Key pada tabel Utama, maka akan
mengakibatkan penghapusan record-record yang berkesesuaian didalam
tabel yang
memiliki relasi dengan tabel Utama.
Aturan-Aturan Referential Integrity
- Field yang dihubungkan dari tabel utama haruslah berupa Primary Key.
- Kedua field yang saling behubungkan harus memiliki Tipe data dan lebar
data yang

sama.
- Tidak dibenarkan penghapusan record pada tabel utama yang telah
dihubungkan
dengan tabel yang direlasikan.
- Tidak diperbolehkan melakukan penambahan record pada tabel relasi
bila record
tersebut berisi data atau fakta yang belum ada pada tabel utama.

Membuat Relasi Dalam Tabel


Sebenarnya ada banyak cara merelasikan antar tabel dalam database,
tetapi kita akan membahasnya 3 cara saja .
Cara Pertama :
Contoh kita membuat database akademik dengan 2 tabel yaitu tabel
mahasiswa dan prodi

Membuat database akademik

mysql>createdatabaseakademik;

Menggunakan database

mysql>useakademik;

Membuat tabel mahasiswa

mysql>createtablemahasiswa(nimchar(5),namavarchar(25),alamat
varchar(50),kode_prodichar(3),primarykey(nim));

Membuat tabel prodi

mysql>createtableprodi(kode_prodichar(3),nama_prodivarchar(25),
jurusanvarchar(20),primarykey(kode_prodi));

Membuat relasi antara tabel mahasiswa dengan prodi

mysql>altertablemahasiswaaddforeignkey(kode_prodi)references
prodi(kode_prodi);

Menginputkan 5 data ke tabel prodi

mysql>insertintoprodivalues('P01','EksIlmuKomputer','Matematika'),
('P02','IlmuKomputer','Matematika'),('P03','D3Komsi','Matematika'),
('P04','D3Rekmed','Matematika'),('P05','D3Ellins','Fisika');

Menginputkan 3 data ke tabel mahasiswa

mysql>insertintomahasiswavalues('00543','Muhammad','KarangmalangA50',
'P01'),('10043','AhmadSholihun','KarangmalangD17',P02'),
('10041','Sugiharti','KarangmalangA23','P02');

Menampilkan data dari tabel prodi

mysql>select*fromprodi;

Menampilkan data dari tabel mahasiswa

mysql>select*frommahasiswa;

Cara Kedua :
Contoh kita membuat database mahasiswa dengan 3 tabel yaitu tabel
ambilmk, mhs dan mk.

Membuat database akademik

mysql>createdatabasemahasiswa;

Menggunakan database

mysql>usemahasiswa;

Membuat tabel ambilmk


mysql> CREATE TABLE `ambilmk` (`nim` varchar(5),`kodemk` varchar(4),`nilai`
float,`smt` varchar(10),`thajar` varchar(10),PRIMARY KEY (`nim`,`kodemk`));
mysql> INSERT INTO ambilmk VALUES ('M001', 'MK01', '3', 'GANJIL',

'2001-2002'),('M001', 'MK02', '2', 'GANJIL', '2001-2002'),('M002',


'MK01', '4', 'GANJIL', '2001-2002'),('M003', 'MK03', '4', 'GENAP',
'2001-2002');

Membuat tabel mhs


mysql> CREATE TABLE `mhs` (`nim` varchar(5),`namamhs`
varchar(20),`alamat` text,`tgllhr` date,PRIMARY KEY (`nim`));
mysql> INSERT INTO mhs VALUES ('M001', 'XXX', 'SOLO', '1990-10-01'),
('M002', 'YYY', 'SEMARANG', '1992-08-11'),('M003', 'ZZZ', 'SOLO',
'1991-04-15');

Membuat tabel ambilmk


mysql> CREATE TABLE `mk` (`kodemk` varchar(4),`namamk`
varchar(20),`sks` int(11),`smt` varchar(10),PRIMARY KEY (`kodemk`));
mysql> INSERT INTO `mk` VALUES ('MK01', 'KALKULUS I', '3', 'GANJIL'),
('MK02', 'GEOMETRI', '2', 'GANJIL'),('MK03', 'KALKULUS II', '3',
'GENAP');

Berdasarkan ketiga tabel diatas kita dapat gambaran relasi yang akan
dibuat seperti dibawah ini :

Membuat relasi antara tabel mhs dengan ambilmk


Mysql> SELECT mhs.nim, mhs.namamhs FROM mhs ambilmk WHERE mhs.nim =
ambilmk.nim AND ambilmk.kodemk = 'MK01';

Perhatikan perintah mhs.nim = ambilmk.nim pada query di atas.


Perintah tersebut digunakan untuk merelasikan tabel mhs dengan
ambilmk dimana kedua tabel terhubung oleh field nim yang ada di
masing-masing tabel.
Cara Ketiga :
Cara kali kita menggunakan phpmyadmin di localhost, sebagai contoh kita
membuat database penjualan dengan 7 tabel, yaitu tabel barang, beli,
detailbeli, detailjual, jenis barang, jual, dan pelanggan.
Tabel relasi :

Pertama kita buat dulu databasenya :

setelah database telah dibuat,selanjutnya membuat table yang sesuai


dengan desain di atas. Contohnya membuat table barang:

Berikutnya kita membuat field pada tabel barang Pada contoh ini,
dimisalkan untuk field kodebarang kita buat sebagai primary key.

Satu hal yang terpenting, pastikan bahwa tabel yang di buat ini harus
bertipe INNODB. Karena hanya dengan tipe INNODB lah, kita bisa
membuat foreign key, relasi dan referential integrity. Untuk membuat
tabel bertipe INNODB, pilih pada bagian Storage Engines yang terdapat
di bagian bawah panel membuat tabel.

Setelah diset field dan storage engine nya sebagai INNODB, barulah kita
bisa simpan tabel barang nya.
Setelah sukses membuat table barang, kita lanjutkan membuat table yang
berikutnya. Langkahnya sama seperti saat membuat table barang. Untuk
field yang akan dijadikan sebagai foreign key ,maka harus diindex.
Contohnya saat membuat table beli , field kodesupply merupakan foreign
key,

Setelah semua table dibuat,selanjutnya adalah membuat relasi antar


table. Langkah berikutnya adalah, kita mengeset relasi antara kedua tabel
yang dihubungkan dengan field kodejenis. Adapun caranya adalah, klik
pada tabel barang seperti gambar di bawah ini :

Lalu, klik pada bagian Relation View seperti tampak pada gambar berikut

ini
Karena field kodejenis dalam tabel barang ini akan direlasikan terhadap
field kodejenis pada tabel jenisbarang (sebagai tabel master) maka
selanjutnya kita set relasinya seperti gambar di bawah ini.

Untuk membuat relasi yang lain bsa menggunakan cara sperti diatas.
Apabila kolom ON DELETE d isi dengan CASCADE, jika data pada tabel
master dihapus maka data yang berada pada tabel lain namun berelasi
dengan tabel master tersebut akan ikut hilang.
Dan apabila ON UPDATE di isi dengan CASCADE,jika data pada tabel
master diubah maka data yang berada pada tabel lain namun berelasi
dengan tabel master tersebut akan ikut berubah.
TRIGGER

Trigger berisi program yang dihubungkan dengan suatu tabel atau view
yang secara otomatis melakukan suatu aksi. ketika suatu baris di dalam
tabel atau view dikenai operasi INSERT, UPDATE atau DELETE.
Sintak :
CREATE
[DEFINER={user |CURRENT_USER}]
TRIGGERtrigger_name trigger_time trigger_event
ONtbl_name FOREACHROWtrigger_stmt
Keterangan :

_ [DEFINER = { user | CURRENT_USER }]: Definisi user yang sedang


aktif,
sifatnya opsional.
_ trigger_name: Nama trigger.
_ trigger_time: waktu menjalankan trigger. Ini dapat berupa BEFORE
atau AFTER.
_ BEFORE: Membuat trigger diaktifkan sebelum dihubungkan dengan
suatu

operasi.
_ AFTER: Membuat trigger diaktifkan setelah dihubungkan dengan suatu
operasi.
_ trigger_event: berupa kejadian yang akan dijalankan trigger.
_ trigger_event dapat berupa salah satu dari berikut:
_ INSERT : trigger diaktifkan ketika sebuah record baru disisipkan ke dalam
tabel. Contoh: statemen INSERT, LOAD DATA, dan REPLACE.
_ UPDATE : trigger diaktifkan ketika sebuah record dimodifikasi. Contoh:
statemen UPDATE.
_ DELETE : trigger diaktifkan ketika sebuah record dihapus. Contoh:
statemen
DELETE dan REPLACE.
Catatan : trigger_event tidak merepresentasikan statemen SQL yang
diaktifkan trigger sebagai suatu operasi tabel. Sebagai contoh, trigger
BEFORE
untuk INSERT akan diaktifkan tidak hanya oleh statemen INSERT tetapi
juga
statemen LOAD DATA.
_ tbl_name: Nama tabel yang berasosiasi dengan trigger.
_ trigger_stmt: Statemen (tunggal atau jamak) yang akan dijalankan
ketika trigger
aktif.
Contoh yang akan dibahas adalah mencatat kejadian-kejadian yang terjadi
beserta waktunya pada tabel mahasiswa, dan catatan-catatan tadi
disimpan dalam tabel
yang lain, misal log_mhs. Misalkan struktur tabel log_mhs adalah
sebagai berikut.
mysql>describelog_mhs;

Contoh 1 :
mysql>createtriggerins_mhsafterinsertonmahasiswa
>foreachrowinsertintolog_mhsvalues('Tambahdata',now());
mysql>insertintomahasiswavalues('00631','Hanif','Kalasan','P01');
mysql>select*fromlog_mhs;

Dari contoh diatas dapat dilihat bahwa ketika satu record pada tabel
mahasiswa
disisipkan (insert), maka secara otomatis tabel log_mhs akan disisipkan
satu record,
yaitu kejadian Tambah data dan waktu saat record pada tabel
mahasiswa
disisipkan.
Contoh 2 :
mysql>createtriggerupdt_mhsafterupdateonmahasiswa
>foreachrowinsertintolog_mhsvalues('Ubahdata',now());
mysql>updatemahasiswasetnama='Moh.Riyan'wherenim='00543';
mysql>select*frommahasiswa;

mysql>select*fromlog_mhs;

Contoh 3 :
mysql>createtriggerdel_mhsafterdeleteonmahasiswa
>foreachrowinsertintolog_mhsvalues('Hapusdata',now());
mysql>deletefrommahasiswawherenim='00631';
mysql>select*fromlog_mhs;

Dari contoh diatas dapat dilihat bahwa ketika satu record pada tabel
mahasiswa
dihapus (delete), maka secara otomatis tabel log_mhs akan disisipkan
satu record, yaitu
kejadian Hapus data dan waktu saat record pada tabel mahasiswa
dihapus.
Dalam implementasinya untuk pekerjaan sehari-hari, pembuatan trigger
dan

tabel log, digunakan untuk mencatat kejadian suatu tabel yang dianggap
rawan serangan cracker. Dengan struktur trigger yang baik sesuai
kebutuhan, administrator dapat
melakukan pelacakan dan recovery data dengan cepat karena
mengetahui record mana
saja yang diserang. Atau, dihubungkan dengan program aplikasi (user
interface) agar
mengaktifkan alarm, jika terdapat operasi database pada waktu yang
tidak seharusnya
(misalkan malam hari).

Menampilkan daftar trigger yang telah dibuat:


mysql>showtriggers;

Keterangan (record pada kolom statement dan sql_mode):


S1:insertintolog_mhsvalues('Tambahdata',now())
S2:insertintolog_mhsvalues('Ubahdata',now())
S3:insertintolog_mhsvalues('Hapusdata',now())
SQL1:STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
SQL2:STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
SQL3:STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Karena hasil eksekusi perintah show triggers sangat panjang, tampilan


di atas
sengaja diedit dengan tujuan agar mudah dipahami.

Penulis : Yudi Tayudin


Email : verenddayz@iht.or.id

Anda mungkin juga menyukai