7
BAB II
LANDASAN TEORI
Pada BAB II ini akan diuraikan tentang teori-teori yang didapat dari buku-
buku literatur dan jurnal-jurnal ilmiah yang sebelumnya telah diteliti yang
kemudian akan dijadikan dasar dalam menganalisis dan pembangunan sistem.
2.1 Sistem Berbasis Aturan (Rule Based System)
Rule Based System adalah suatu program komputer yang memproses
informasi yang terdapat didalam working memory dengan sekumpulan aturan yang
terdapat di dalam basis pengetahuan menggunakan mesin inferensi untuk
menghasilkan informasi baru.[6]
Rule Based merupakan sistem yang digunakan sebagai cara untuk
menyimpan dan memanipulasi pengetahuan untuk diwujudkan dalam suatu
informasi yang dapat membantu dalam menyelesaikan berbagi permasalahan.
Teori sistem berbasis aturan ini menggunakan tekhnik yang sederhana, yang
dimulai dengan dasar aturan yang berisi semua pengetahuan dari permasalahan
yang dihadapi yang kemudian dikodekan ke dalam aturan IF-THEN dan sebuah
tempat penyimpanan (basis data) yang mengandung data, pernyataan dan informasi
awal. Sistem akan memeriksa semua aturan kondisi (IF) yang menentukan subset,
set konflik yang ada. Jika ditemukan, maka sistem akan melakukan kondisi THEN.
Perulangan atau looping ini akan terus berlanjut hingga salah satu atau dua kondisi
bertemu, jika aturan tidak diketemukan maka sistem tersebut harus keluar dari
perulangan (terminate).
Pendekatan
Untuk mengelola rules , terdapat 2 pendekatan yaitu :
1. Forward Chaining : dimana rules diproses berdasarkan sejumlah fakta yang
ada, dan didapatkan konklusi sesuai dengan fakta-fakta tersebut.
Pendekatan forward chaining disebut juga data driven. Proses forward
chaining dapat dilihat pada Gambar 2.1
8
Gambar 2.1 Penyelesaian menggunakan forward chaining
Gambar 2.1 diatas menunjukkan alur dalam proses forward chaining, dimana
untuk mencapai kondisi yang ingin dicapai berawal dari fakta, kemudian
ditarik keputusan dari berdasarkan rule-rule yang saling terkait.[9]
2. Backward Chaining : dimana diberikan target (goal), kemudian rules yang
aksinya mengandung goal di-trigger. Backward chaining ini cocok untuk
menelusuri fakta yang masih belum lengkap, disebut juga goal driven.
Strategi Rule Based System :
1. First Applicable : Ini adalah strategi yang paling sederhana tetapi berpotensi
menimbulkan masalah besar, yaitu akan terjadinya looping yang tak terbatas
pada kondisi yang sama.
2. Random : Meskipun tidak menggunakan prediksi atau first applicable control,
metode ini cukup memberikan keuntungan, yaitu dapat diprediksi (seperti
game yang membutuhkan strategi). Sebuah strategi acak akan memilih aturan
acak tunggal dari sebuah set konflik. Kemungkinan lain untuk strategi acak
adalah dengan sistem berbasis aturan fuzzy (fuzzy rule based system) dimana
masing-masing aturan memiliki probabilitas sebuah kondisi akan lebih
mungkin terjadi daripada yang lainnya.
3. Most Spesific : Strategi ini berdasarkan pada jumlah kondisi aturan. Hal ini
didasari pada asumsi jika ia memiliki sebagian besar kondisi maka memiliki
relevansi ke data yang ada.
4. Least Recently Used : Menyimpan data yang terakhir dipakai untuk selanjutnya
dipakai kembali ke dalam permasalahan jika memang problem yang dihadapi
sama.
9
Kelebihan dan Kekurangan
Kelebihan Sistem Berbasis Aturan
Availability-bertambah
Intelligent tutor
Intelligent dB
Danger-reduced
Performance
Multiple expertise
Reability-bertambah
Explanation
Steady, unemotional and complete response
Kekurangan Sistem Berbasis Aturan
1. Jika terlalu banyak aturan, sistem menjadi sulit dalam me-maintain
performance.
2. Keterbatasan dalam memutuskan teknik yang digunakan untuk suatu masalah.
Manfaat
Kedokteran : Sistem pakar dalam dunia kedokteran dapat
mencatat history atau riwayat penyakit pasien sehingga mudah
dalam penentuan obat dan dosis obat yang akan diberikan oleh
dokter. Selain itu dapat juga sebagai penyimpanan data dalam
mendiagnosa penyakit-penyakit tertentu.
Pertanian : Dapat digunakan untuk mengidentifikasi hama dan
penyakit yang mampu menyerang tanaman beserta cara
pengendaliannya serta mampu mengetahui waktu perairan atau
penyemaian.
Keuangan : Dapat digunakan untuk memeriksa persoalan-persoalan
dengan menggunakan beberapa metode yang berbeda.
10
2.2 Metode V-Model
Metode ini serupa dengan model metode waterfall, akan tetapi lebih
menekankan pada adanya asosiasi antar tahapan sebelum pemrograman dan
sesudahnya. Penekanan dalam V-Model terutama pada fase verifikasi dan
validasi.[5]
Gambar 2.2 V-Model
Tahapan yang dilakukan dalam V-Model ialah sebagai berikut
1. Analisa Kebutuhan, tahap pendefinisian dan dokumentasi kebutuhan dari
konsumen.
2. Desain Sistem, perekayasaan sistem, berdasarkan analisis kebutuhan.
3. Desain Program, perekayasaan struktur program, algoritma dan struktur
data.
4. Coding, penulisan / interpretasi dari hasil desain program.
5. Pengujian Unit & Integrasi, pengetesan pada program setingkat low-level
testing. Bila terjadi kekurangan dan ketidaksesuaian maka tahap ini akan
berkoneksi dengan tahap tiga yaitu desain program.
6. Pengujian Sistem, pengetesan pada sistem. Bila terjadi kekurangan dan
ketidaksesuaian maka tahap ini akan berkoneksi dengan tahap yaitu desain
sistem.
11
7. Pengujian Menyeluruh, test ini bersifat integral/menyeluruh,dengan
simulasi data sebenarnya. Bila terjadi ketidaksesuaian, maka tahap ini akan
berinteraksi langsung dengan tahap satu yaitu analisa kebutuhan.
8. Operasi & Pemeliharaan, tahap akhir pengembangan sistem dimana sistem
diimplementasi dan diterima serta dijalankan sesuai kebutuhan. Tahap ini
dilakukan hanya jika sistem telah dianggap selesai tanpa syarat.
2.3 PhoneGap
PhoneGap merupakan sebuah framework yang digunakan untuk membuat
aplikasi mobile berbasis HTML5 dan CSS3. Dalam pengembangan aplikasi mobile
yang berbeda sistem operasi seperti Android, Ios, dan Windows Phone
membutuhkan banyak bahasa pemrograman yang masing-masing tidak dapat
diimplementasikan satu sama lain. Dengan kelebihan Phonegap yang multi
platform, pengembangan dapat membuat aplikasi untuk beberapa device secara
langsung dengan menggunakan teknologi web standar (Adobe System Inc, n.d).
Sampai saat ini framework yang didukung oleh PhoneGap antara lain Amazon Fire
OS, Android, BlackBerry 10, OS, Ubuntu, Windowa Phone 7 & 8, dan Windows
8.[11]
PhoneGap dapat mengakses fitur-fitur yang tidak dapat dilakukan oleh web
application yaitu berhubungan dengan perangkat keras seperti kamera, GPS dan
accelerometer dengan menggunakan cordova sebagai penghubungnya.[12].
2.4 Push Notification
Layanan push notification pertama kali diperkenalkan oleh Apple pada bulan
Juni 2009. Apple menamakan layanan tersebut APNs, singkatan dari Apple Push
Notification Service. Sebagai pesaing terkuat Apple di pasar smarphone, Google
melalui Android-nya tidak tinggal diam. Hampir setahun kemudian Google
memperkenalkan layanan sejenis yang dinamakannya C2DM, Google Could to
Device Messaging.[7]
Penelitian terus dikembangkan oleh kedua perusahaan raksasa teknologi
tersebut. Bulan Mei 2013 Google memperkenalkan apa yang disebutnya dengan
istilah rich notifications. Bukan hanya pesan dalam bentuk teks, rich notifications
12
juga dapat diisi dengan gambar. Selain itu ada action buttons, tombol yang jika di-
click akan membawa pengguna langsung melakukan hal-hal tertentu seperti
memutar musik, membuka app, dll.
Pada bulan September 2014, Apple menyempurnakan sistem push
notification versinya dengan memperkenalkan interactive button yang
memungkinkan pemilik smartphone memberikan respon langsung atas push
notification yang dikirimkan app publisher.
Push notification adalah pesan pendek yang muncul secara otomatis di layar
smartphone. Pemilik app dapat mengirimkan pesan-pesan tersebut setiap saat
meskipun pemilik smartphone tidak sedang membuka app yang bersangkutan. Ada
banyak informasi yang dikirimkan melalui push notification, misalnya informasi
hasil pertandingan olah raga, meminta pengguna untuk melakukan sesuatu seperti
mendonwload kupon diskon, informasi mengenai event menarik seperti sale di
sebuah mall, dll. Bentuk push notification ini mirip dengan pesan singkat SMS,
hanya saja push notification hanya bisa muncul pada smartphone yang sudah
menginstall app yang kita buat.
2.5 PushBots
PushBots berguna utnuk memberikan fitur push notification pada aplikasi
Android. Fitur ini menggunakan pelayanan google cloud messaging (GCM),
sebagai perantara untuk mengirim notifikasi pada perangkat Android. GCM
memberikan pelayanan untuk meneruskan data yang dikirim dari server aplikasi ke
perangkat Android yang terhubung Internet. Secara sederhana, arsitektur PushBots
dapat digambarkan pada gambar 2.3.
Gambar 2.3 Arsitektur PushBots
(Google Developers, 2015)
13
Pada Gambar 2.3 App Server adalah posisi PushBots untuk mengirim pesan
GCM, kemudian GCM connecting Server akan meneruskan pesan ke perangkat
(client app) dan untuk menghasilkan notofikasi.
Kemudian dari sistem yang dibangun digunakan modul Python PushBots
berguna untuk mengakses API yang disediakan PushBots seperti mengirimkan
pesan ke GCM server atau memperoleh informasi aplikasi klien terdaftar yang
sedang aktif.
2.6 Android
Android merupakan salah satu sistem operasi smartphone yang mengadopsi
sistem operasi Linux. Selayaknya sistem operasi Linux, android merupakan sistem
operasi dengan platform terbuka atau open source dengan lisensi apache. Apache
sendiri merupakan standar lisensi perangkat terbuka atau open source perangkat
seluler. Android yang bersifat open source memungkinkan semua orang dapat
melakukan pengembangan secara bebas terhadap android secara penuh.[3]
Keuntungan utama dari android adalah dalam pengembangan adanya
pendekatan aplikasi terpadu. Pendekatan ini menjadikan pengembang hanya
berkonsentrasi pada aplikasi saja. Aplikasi yang dikembangkan akan dapat berjalan
pada perangkat yang berbeda selama masih menggunakan sistem operasi android,
dengan kata lain pengembang tidak perlu mempertimbangkan kebutuhan jenis
perangkatnya.
Perkembangan Sistem Operasi Android
Sejak diluncurkan pertama kali pada 5 November 2007, hingga saat ini android
telah banyak berkembang dan memiliki beberapa versi. Krajci & Darren (2014:6-
8) dalam bukunya menyebutkan versi android mulai dari awal hingga terbaru
seperti tertera pada tabel 1.
Tabel 1. Versi dan Code name Android (Krajci & Darren, 2014:6-8)
Versi Code name
Beta -
Android (1.0) Astro
Android (1.5) Cupcake
Android (1.6) Donuts
14
Banyaknya versi sistem operasi android menunjukan bahwa perkembangan
sistem operasi ini terus berkembang dan mengalami penyempurnaan. Data statistik
pengguna perangkat android dari situs resmi pengembang android
developer.android.com) yang dihimpun hingga tanggal 1 Mei 2014 dapat
ditunjukan pada gambar 2.
Gambar 2.4 Statistik Perangkat Android (Android,2014)
Data yang tertera dari statistik pada Gambar 2 menunjukan bahwa sistem
operasi yang paling banyak digunakan pada smartphone android adalah versi
4.1.X/4.2.X/4.3 (Jelly Bean), versi 2.3.X (Gingerbread), versi 4.0.3/4.0.4 (Ice
Cream Sandwich), versi 4.4 (KitKat), versi 2.2 (Froyo) dan versi 3.X (Honeycomb).
2.7 Andriod Studio
Andoid Studio adaalah lingkungan pengembangan Android berdasarkan
IntelliJ IDEA. Mirip dengan Eclipse dengan ADT Plugin, Android Studio
menyediakan alat pengembang Android terintegrasi untuk pengembang dan
debugging. Diatas kemampuan yang Anda harapkan dari IntelliJ, Android Studio
menawarkan:[10]
Android (2.0/2.1) Éclair
Android (2.2) Froyo
Android (2.3.X) Ginger Bread
Android (3.0/3.2) Honeycomb
Android (4.0.3/4.0.4) Ice Cream Sandwich
Android (4.1.X/4.2.X/4.3) Jelly Bean
Android (4.4) KitKat
15
A. Berbasis Grandle membangun dukungan.
B. Refactoring android, spesifik dan perbaikan yang cepat.
C. Alat Lint untuk meangkap kinerja, kegunaan, Kompabilitas versi dan masalah
lainnya.
D. ProGuard dan aplikasi-penanda tanganan kemapuan.
E. Penyihir berbasis template untuk membuat desain Android umum dan
komponen.
F. Sebuah layout editor yang memungkinkan Anda untuk dragp-and-drop UI
komponen, layout pratinjau pada beberapa konfigurasi layar, dan banyak lagi.
2.8 PHP
PHP merupakan salah satu dari berbagai macam pemrograman web.
Menurut Loka (2010:3), PHP awalnya ditemukan pada 1995 oleh Rasmus Lerdrof
ketika ingin mengetahui jumlah pengunjung yang membaca resume onlinenya.
Script yang dibuat Rasmus Lerdrof tersebut menarik developer sehingga Rasmus
mengembangkan PHP menjadi suatu bahasa tersendiri yang mungkin dapat
mengkonversikan data yang diinputkan melalui form HTML menjadi suatu
variabel, yang dapat dimanfaatkan oleh sistem lainnya. Loka (2010:3) menerangkan
bahwa pengguna PHP yang semakin banyak membuat Zeev Suraski dan Andi
Gutsman selaku core developer (programmer inti) mencoba untuk menulis ulang
PHP Parser, dan diintegrasikan dengan menggunakan Zend scripting engine, dan
mengubah jalan alur operasi PHP.[8]
Banyaknya pengguna PHP dalam pemrograman web bukan tanpa alasan.
Butzon (2002) menjelaskan bahwa PHP adalah pilihan tepat dalam pemrograman
web dibandingkan dengan bahasa pemrogram lainnya. Menurut Butzon (2002:8),
PHP merupakan pemrograman dengan biaya rendah dibandingkan ASP dan
memiliki waktu eksekusi yang lebih cepat dibandingkan Java. PHP sebagai bahasa
pemrograman web memiliki berbagai keunggulan. Loka (2010:4) menjelaskan
berbagai macam keunggulan PHP yaitu:
1. Open Source
PHP merupakan pemrograman yang bebas digunakan dan dikembangkan
tanpa harus membayar lisensi.
16
2. Cross Platform
PHP dapat dijalankan hampir di semua sistem operasi.
3. Mendukung banyak database
PHP mendukung banyak database seperti MySQL, PostgreSQL, Oracle dan
masih banyak lagi.
4. On The Fly
PHP memiliki kemampuan untuk membuat dokumen word, excel, PDF dan
masih banyak lagi. Salah satu fitur yang dapat diandalkan oleh PHP adalah
dukungannya terhadap banyak database, salah satunya adalah MySQL.[4]
a. Sintaks PHP
Sintak Sintaks program/script PHP ditulis dalam apitan tanda khusus PHP. Ada
empat macam pasangan tag PHP yang dapat digunakan untuk menandai blok script
PHP:
1) <?php ... ?>
2) <script language = “PHP”> ... </script>
3) <? ... ?>
4) <% ... %>
Cara 1 dan 2 merupakan cara yang paling umum digunakan sekalipun cara 3
tampak lebih praktis karena cara 3 tidak selalu diaktifkan pada konfigurasi file
php.ini. Sedangkan cara 4 dimungkinkan sebagai kemudahan bagi yang sudah
terbiasa dengan ASP (Active Server Pages). Namun, bila ini tidak dikenal, maka
harus dilakukan pengaktifan pada file konfigurasi php.ini.
b. Menampilkan String
Untuk menampilkan string dalam PHP disediakan fungsi seperti ditunjukkan
pada tabel berikut:
Tabel 2. Fungsi Menampilkan String dalam PHP
Fungsi Sintaks
echo echo (string arg1 [,string argn])
print print (string arg)
printf printf (string format [, mixed args])
17
c. Struktur Kontrol
1. Statement if
Statement if digunakan untuk mengeksekusi sebuah blok pernyataan jika
memenuhi kondisi tertentu. Sintaksnya:
Jika kondisi bernilai true (benar), blok pernyataan akan dikerjakan.
Apabila pernyataan yang dikerjakan lebih dari satu, maka harus diletakkan
dalam tanda {}.
2. Statement if ... else ...
Perintah if ... else ... pada prinsipnya mirip dengan perintah if, tetapi ada
kalanya anda menginginkan dua percabangan, yakni jika suatu kondisi
terpenuhi, maka lakukan blok pernyataan1. Jika tidak terpenuhi, lakukan blok
pernyataan2. Untuk kebutuhan tersebut, gunakan statement if ... else.
Sintaksnya:
Jika kondisi bernilai true (benar), maka blok pernyataan1 akan
dikerjakan. Jika bernilai false (salah), maka blok pernyataan2-lah yang akan
dikerjakan.
3. Statement if ... elseif ... else
Statement if ... elseif ... else ... digunakan untuk masalah yang
membutuhkan lebih dari dua percabangan. Statement if ...elseif ... else ...
sering disebut nested if (if bersarang).
if (kondisi)
blok pernyataan
if (kondisi)
{
blok pernyataan1;
}
else
{
blok pernyataan2;
}
18
Sintaksnya:
Jika kondisi1 bernilai true, maka blok pernyataan1 akan dikerjakan. Jika
false, maka diuji kondisi2. Jika kondisi2 bernilai false, maka diuji kondisi
berikutnya. Namun, jika tidak ada kondisi yang terpenuhi, maka akan
dikerjakan blok pernyataan ke-N.
4. Statement while
Statement while adalah statement yang digunakan untuk melakukan
perulangan mengevaluasi blok pernyataan selama kondisi true (benar), dan
akan berhenti apabila kondisi bernilai false (salah).
Sintaksnya:
kondisi adalah pernyataan boolean.
blok pernyataan adalah daftar statement yang akan diulang selama
kondisi terpenuhi.
5. Statement do ... while
Pada prinsipnya statement do ... while sama dengan cara kerja while,
hanya saja pada do ... while blok pernyataan pasti dikerjakan sekali dan
kemudian dilakukan pengujian kondisi. Jika kondisi masih terpenuhi (true),
maka blok pernyataan dikerjakan lagi. Namun, jika kondisi tidak terpenuhi
(false) lagi, maka perulangan berhenti.
if (kondisi1)
{
blok pernyataan1;
}
elseif (kondisi2)
{
blok pernyataan2;
}
...
else
{
blok pernyataanN;
}
while (kondisi)
{
blok pernyataan;
}
19
Sintaksnya:
kondisi adalah bernilai boolean.
blok pernyataan adalah daftar statement yang diulang selama kondisi
dipenuhi (benar). Jika kondisi tidak terpenuhi (salah), maka anda bisa
keluar dari perulangan dan mengerjakan statement setelah while.
6. Statement for
Statement for adalah statement yang digunakan untuk mengulang blok
pernyataan dalam jumlah yang ditentukan berdasarkan inisialisasi awal,
akhir/kondisi, dan nilai penambahan atau pengurangan yang ditentukan.
Sintaksnya:
Statement for bekerja sebagai berikut:
inisialisasi sebagai nilai awal.
kondisi diuji; jika bernilai true (benar), maka perulangan dilanjutkan
dengan mengerjakan blok pernyataan, sedangkan jika bernilai false
(salah), maka perulangan berhenti dan blok pernyataan dilompati.
Jika blok pernyataan hanya terdiri dari satu baris, maka tanda {} dapat
ditiadakan.
increment merupakan nilai penambahan atau pengurangan untuk
mengulangi pengerjaan blok pernyataan setelah penambahan atau
pengurangan yang nilai kebenarannya diuji apakah kondisi masih
terpenuhi.
do {
blok pernyataan;
} while (kondisi);
for (inisialisasi; kondisi; increment)
{
blok pernyataan;
}
20
7. Statement require
Statement require() merupakan konstruksi bagi parser PHP yang
digunakan untuk membuka file yang diberi dan membaca nilai variabel serta
fungsi yang terdapat didalamnya untuk kemudian mengeksekusinya. File
akan diperlakukan sebagai suatu script PHP normal. Apabila file tersebut
berisi tag-tag PHP, maka akan dievaluasi terlebih dahulu sebelum
mengirimnya ke browser, tetapi apabila hanya berisi teks biasa, maka akan
dikirim langsung ke browser. Statement require() tidak dapat dimasukkan ke
dalam struktur perulangan karena hanya boleh dipanggil satu kali.
Sintaksnya:
string filename menyatakan nama file yang akan digabungkan.
8. Statement include
Statement include() merupakan konstruksi bagi parser PHP yang
digunakan untuk membuka dan membaca nilai variabel dari file yang
dinyatakan serta fungsi yang tedapat didalamnya untuk kemudian
mengeksekusinya.
File akan diperlakukan sebagai suatu script PHP normal. Apabila file
tersebut berisi tag-tag PHP, maka akan dievaluasi terlebih dahulu sebelum
mengirimnya ke browser, tetapi apabila hanya berisi teks biasa, maka akan
dikirim langsung ke browser. Statement include() dapat dimasukkan dala
struktur perulangan.
Sintaksnya:
string filename menyatakan nama file yang akan digabungkan.
9. Statement require _once
Statement require_once() secara prinsip sama dengan statement
require(). Perbedaannya terletak pada penggunaan require_one. Untuk itu
pemanggilan suatu fungsi dapat dihindari jika terjadi duplikasi.
Sintaksnya:
string filename menyatakan nama file yang akan digabungkan.
require (string filename)
include (string filename)
require_once (string filename)
21
10. Statement include_once
PHP juga menyediakan statement include_once() yang bertindak sama
seperti require_once() dengan suatu perbedaan utama. Statement
require_once() memungkinkan eksekusi script berhenti dengan suatu fatal
error apabila file target yang ingin digabungkan tidak ditemukan. Statement
include_once() memunculkan suatu peringatan kesalahan sementara eksekusi
script terus berlanjut apabila file target yang hendak digabungkan tidak
ditemukan.
Sintaksnya:
string filename menyatakan nama file yang akan digabungkan.
d. Session
Session dalam PHP dapat dapat dimulai dengan dua cara, yaitu secara
otomatis dan menggunakan fungsi session pada script PHP. Untuk memulai session
secara otomatis, file php.ini perlu diedit dengan melakukan perubahan pada baris
session.auto.start = 0 menjadi session.auto.start = 1, kemudian simpan perubahan
tersebut dan restart kembali web server. Untuk memulai session menggunakan
fungsi pada PHP, gunakan fungsi session_start().
Penggunaan session dengan session_start() akan menghasilkan file session
dengan nama sess_ diikuti oleh nilai session_id. Session dapat juga dibuat dengan
menggunakan fungsi session_register(). Penggunaan session_register() PHP
memungkinkan penyimpanan variabel dan nilainya dalam file.
Untuk mengakhiri session digunakan fungsi session_destroy(). Sedangkan
untuk menghapus semua variabel session, digunakan fungsi session_unset().
Sementara itu, untuk menghapus sebuah variabel dari sebuah session dan agar
session tetap ada, dapat digunakan fungsi session_unregister(nama variabel).
e. Koneksi PHP dengan MySQL
Untuk melakukan koneksi dengan MySQL, PHP telah menyediakan berbagai
fungsi untuk kebutuhan tersebut. Beberapa dari fungsi tersebut antara lain sebagai
berikut:
include_once (string filename)
22
1) mysql_connect()
Fungsi mysql_connect() digunakan untuk membuat/membuka koneksi ke
suatu server MySQL.
Sintaks :
Keterangan :
o server merupakan nama server MySQL.
o username merupakan nama pemakai yang digunakan untuk melakukan
koneksi.
o password merupakan kata sandi yang digunakan username tersebut.
Nilai balik fungsi berupa nilai integer, dan FALSE bila terjadi kesalahan.
Contoh:
<?php
$conn = mysql_connect(“localhost”, “kasiman”, “”);
echo $conn;
?>
2) mysql_connect()
Fungsi mysql_pconnect() digunakan untuk membuat/membuka koneksi ke
suatu server MySQL secara persisten.
Sintaks :
Keterangan:
• server merupakan nama server MySQL.
• username merupakan nama pemakai yang digunakan untuk melakukan
koneksi.
• password merupakan kata sandi yang digunakan username tersebut.
Nilai balik fungsi berupa nilai integer, dan FALSE bila terjadi kesalahan.
Perbedaan koneksi mysql_connect() dengan mysql_pconnect ada dua hal, yaitu:
a) Saat koneksi, fungsi mysql_pconnect akan mencoba menemukan koneksi
persisten yang lain pada server dengan username yang sama. Jika ditemukan,
koneksi akan menggunakan koneksi yang telah ada tersebut daripada membuka
koneksi yang baru.
mysql_connect(“server”, “username”, “password”)
mysql_connect(“server”, “username”, “password”)
23
b) Koneksi ke server MySQL tidak akan ditutup ketika eksekusi script berakhir,
bahkan fungsi mysql_close pun tidak dapat menutup koneksi yang dibangun
dengan mysql_pconnect.
Contoh:
<?php
$conn = mysql_pconnect(“localhost”, “kasiman”, “”);
echo $conn;
?>
3) mysql_close()
Fungsi mysql_close digunakan untuk menutup koneksi server MySQL.
Sintaks:
Keterangan:
link_identifier merupakan pengenal yang dihasilkan dari fungsi
mysql_connect.
Nilai balik TRUE apabila sukses, dan FALSE bila terjadi kesalahan.
Contoh :
<?php
$conn = mysql_connect(“localhost”, “kasiman”, “”);
echo $conn;
mysql_close($conn);
?>
4) mysql_select_db()
Fungsi mysql_select_db digunakan untuk memilih database yang akan
digunakan.
Sintaks :
Keterangan:
database_name merupakan nama database yang dipilih.
link_identifier merupakan pengenal yang dihasilkan dari perintah
mysql_connect.
Nilai balik fungsi ini TRUE apabila sukses, dan FALSE bila terjadi kegagalan.
mysql_close([link_identifier])
mysql_select_db(database_name [, link_identifier])
24
Contoh:
<?php
$conn = mysql_connect(“localhost”, “kasiman”, “”) or
die (“Koneksi Gagal”);
mysql_select_db(“kawan”, $conn);
mysql_close($conn);
?>
5) mysql_query()
Fungsi mysql_query digunakan untuk memasukkan perintah-perintah SQL ke
dalam PHP.
Sintaksnya:
Keterangan:
query merupakan perintah SQL.
link_identifier merupakan pengenal yang dihasilkan dari perintah
mysql_connect.
Nilai balik fungsi ini:
resource untuk perintah SELECT, SHOW, DESCRIBE, atau EXPLAIN,
mysql_query() dan FALSE jika terjadi kesalahan.
TRUE untuk perintah SQL yang lain, UPDATE, DELETE, DROP, dan
lainnya jika sukses dan FALSE jika terjadi kesalahan.
Hasil dilewatkan ke mysql_fetch_array(), dan fungsi-fungsi lainnya
untuk hasil lebih detail tabel dalam mengakses data.
Pergunakan mysql_num_rows() untuk mencari berapa banyak baris yang
dihasilkan untuk perintah SELECT atau mysql_affected_rows() untuk
mencari berapa banyak baris yang dipengaruhi oleh perintah DELETE,
INSERT, REPLACE, atau UPDATE.
mysql_query() juga akan gagal dan bernilai balik FALSE jika username
tidak memiliki hak akses terhadap tabel yang diacu oleh query.
6) mysql_fetch_array()
Fungsi mysql_fetch_array digunakan untuk mengambil record dari database
dan memasukannya ke dalam array assosiatif, array numerik, atau keduanya.
mysql_query(query[,link identifier])
25
Sintaks:
Keterangan:
result merupakan query.
result_type merupakan nilai konstanta yang dapat berupa
MYSQL_ASSOC, MYSQL_NUM, MYSQL_BOTH (default).
7) mysql_fetch_row()
Fungsi mysql_fetch_row ini digunakan untuk mengambil record dari
database dan memasukkannya ke dalam array numerik, kebalikan dari
mysql_fetch_array() yang hanya menghasilkan array assosiatif.
Sintaknya:
Keterangan:
result merupakan perintah query.
8) mysql_num_rows()
Fungsi mysql_num_rows ini digunakan untuk memperoleh informasi jumlah
record/baris data dari suatu query.
Sintaksnya:
Keterangan:
result merupakan nilai dari pemanggilan fungsi mysql_num_query atau
mysql_query.
9) mysql_num_fields()
Fungsi mysql_num_fields ini digunakan untuk memperoleh informasi jumlah
kolom dari suatu query.
Sintaksnya:
Keterangan:
result merupakan nilai dari pemanggilan fungsi mysql_num_query atau
mysql_query.
mysql_fetch_array(result[, int result_type])
mysql_fetch_row(resource result);
mysql_num_rows(resource result);
mysql_num_fields(resource result);
26
2.9 XAMPP
XAMPP adalah perangkat lunak bebas, yang mendukung banyak sistem
operasi, merupakan kompilasi dari beberapa program. Fungsinya adalah sebagai
server yang berdiri sendiri (localhost), yang terdiri atas program Apache HTTP
Server, MySQL database, dan penerjemah bahasa yang ditulis dengan bahasa
pemrograman PHP dan Perl. Nama XAMPP merupakan singkatan dari X (empat
sistem operasi apapun), Apache, MySQL, PHP dan Perl. Program ini tersedia dalam
GNU General Public License dan bebas, merupakan web server yang mudah
digunakan yang dapat melayani tampilan halaman web yang dinamis. Untuk
mendapatkanya dapat mendownload langsung dari web resminya.
2.10 SQL
Data adalah bagian penting dari pemrograman modern sehingga keseluruhan
bahasa program menyediakan fungsi untuk mengakses database. Standar utama
untuk bahasa database adalah Structured Query Language (SQL). SQL
distandarisasi sebagai bahasa untuk menciptakan database, menyimpan informasi
ke dalam database, dan mendapatkan kembali informasi darinya. Aplikasi khusus
dan lingkungan pemrograman mengkhususkan diri untuk menginterpretasikan data
SQL. [4]
Seorang programmer akan memulai dengan menciptakan suatu struktur data
di dalam SQL dan kemudian menulis suatu program dalam bahasa (PHP) untuk
mengakses data tersebut. Program PHP kemudian bisa memformulasikan
permintaan atau memperbaharui data tersebut, yang dilewatkan ke interpreter SQL.
a. Konsep Databse
1) Entitas dan Relationship
Entitas adalah berbagai hal dalam dunia nyata yang informasinya disimpan
dalam database. Sebagai contoh, kita dapat menyimpan informasi pegawai dan
bekerja untuk departemen tertentu. Dalam kasus ini, pegawai merupakan suatu
entitas dan departemen juga merupakan entitas.
Relationship adalah hubungan antar entitas. Sebagai contoh, seorang pegawai
bekerja untuk suatu departemen. Bekerja untuk adalah relationship antara entitas
pegawai dan entitas departemen.
27
Relationship terdiri dari tiga derajat berbeda, yakni one-to-one, one-to-many
(many-to-one), dan many-to-many. One-to-one menghubungkan secara tepat dua
entitas dengan satu kunci (key). Misalnya, dalam suatu perusahaan satu orang
pegawai memiliki satu komputer saja.
One-to-many (many-to-one) merupakan hubungan antar entitas dimana kunci
(key) pada satu tabel muncul berkali-kali dalam tabel lainnya. Misalnya, banyak
pegawai bekerja untuk satu perusahaan.
Many-to-many merupakan hubungan yang sering menyebabkan
permasalahan dalam prakteknya. Dalam hubungan many-to-many, kunci utama
(primary key) dari tabel kedua dapat muncul beberapa kali pada tabel pertama.
Misalnya, dalam suatu perusahaan, banyak pegawai bekerja untuk banyak
departemen. Untuk mengatasi permasalahan tersebut, dibutuhkan tabel antara.
2) Relasi atau Tabel
Database terdiri dari sekumpulan relasi atau tabel. Relasi dan tabel memiliki
arti yang sama.
3) Kolom atau Attribute
Dalam tabel database, setiap kolom atau attribute menjelaskan beberapa
bagian record data yang disimpan dalam tabel. Kolom adalah bagian dari tabel,
sedangkan suatu attribute berkaitan dengan entitas dunia nyata yang merupakan
pemodelan tabel. Seperti pada tabel pegawai sebelumnya, dapat dilihat bahwa
setiap pegawai memiliki satu NoPegawai, Nama, Pekerjaan, dan KodeDepartemen
yang merupakan kolom, tetepi sering juga disebut attribute dari tabel pegawai.
4) Baris, Record, dan Tuple
Pada tabel pegawai sebelumnya, setiap baris pada tabel mewakili suatu
record pegawai. Setiap baris dalam tabel sering juga disebut record atau tuple yang
terdiri dari suatu nilai untuk setiap kolom dalam tabel.
5) Kunci (Key)
Suatu superkey adalah suatu kolom yang dapat digunakan untuk
mengidentifikasi suatu baris dalam tabel. Suatu key adalah suatu minimal superkey.
Sebagai contoh, pada tabel pegawai sebelumnya, kita dapat menggunakan
NoPegawai dan Nama secara bersama-sama untuk mengidentifikasi baris-baris
dalam tabel. Kita juga dapat menggunakan seluruh klom sebagai superkey.
28
Namun, kita tidak membutukan seluruh kolom tersebut untuk
mengidentifikasi suatu baris. Kita hanya butuh NoPegawai. Ini adalah suatu
minimal superkey yang merupakan suatu minimal kolom yang dapat digunakan
untuk mengidentifikasi suatu baris tunggal, maka NoPegawai adalah suatu key.
Kita dapat mengidentifikasi seorang pegawai dengan Nama atau dengan
NoPegawai yang merupakan dua key yang disebut candidate key. Disebut candidate
key karena dengan kedua kolom tersebut kita akan memilih salah satu yang menjadi
primary key. Primary key adalah sutu kolom atau sekumpulan kolom yang akan
digunakan untuk mengidentifikasi secara tunggal setiap baris dari suatu tabel.
Dalam hal ini, kita akan membuat NoPegawai sebagai primary key karena secara
umum Nama mungkin ada yang sama.
Foreign key menyatakan hubungan antar tabel. Sebagai contoh, pada tabel
pegawai dapat dilihat bahwa KodeDepartemen menyimpan suatu nomor
departemen yang akan disimpan dalam suatu tabel terpisah dengan primary key-nya
adalah KodeDepartemen.
b. MySQL
Loka (2010:6) mendefinisikan MySQL adalah basis data (database).
Database menurut Loka (2010:6) merupakan suatu jalan untuk dapat menyimpan
berbagai informasi dengan membaginya berdasarkan kategori-kategori tertentu.
Dimana informasi-informasi tersebut saling berkaitan, satu dengan yang lainnya.
Loka (2010) menjelaskan bahwa MySQL bersifat Relational Database
Management System (RDBMS). RDBMS memungkinkan seorang admin dapat
menyimpan banyak informasi ke dalam tabel, dimana tabel tersebut saling berkaitan
satu sama lain. Keuntungan RDBMS sendiri adalah kita dapat memecah database
ke dalam tabel - tabel yang berbeda. setiap tabel memiliki informasi yang berkaitan
dengan tabel yang lainnya (Loka, 2010:6). Menurut Loka (2010:6), MySQL
memiliki berbagai keunggulan sebagai RDMS yaitu,[8]
1) Gratis
2) Cross platform
3) Lengkap dan cepat
MySQL merupakan basis data tipe RDBMS yang cocok digunakan dalam
software berbasis web karena kemampuannya untuk dapat digunakan dalam
29
platform yang berbeda, cepat dan sifatnya yang gratis. Selain itu, MySQL juga
didukung oleh banyak web server sehingga MySQL merupakan database yang
tepat digunakan untuk website.
c. Membuat Database
Pembuatan suatu database dapat dilakukan dengan perintah SQL berikut:
create database nama_database;
Contoh :
mysql>create database pegawai;
Untuk memastikan apakah perintah tersebut berhasil dilakukan, dapat
menggunakan perintah SQL berikut:
mysql>show database;
Apabila berhasil, akan tampil nama database yang baru dibuat.
d. Memilih Database
Sebelum dapat membuat tabel atau mengerjakan sesuatu berkaitan dengan
database yang dibuat, kita perlu memberitahu MySQL bahwa kita akan bekerja
dengan database baru kita. Untuk memilih database, dapat diberikan perintah
berikut:
use nama_database;
Contoh :
mysql>use pegawai;
Artinya, seluruh aksi berikutnya akan diaplikasikan terhadap database
tersebut.
e. Menghapus Database
Contoh:
mysql>drop database pegawai;
Perintah tersebut sebaiknya digunakan secara hati-hati karena MySQL
menjalankan perintah tersebut tanpa memberi peringatan.
30
f. Membuat Tabel
Contoh :
mysql>create table pegawai (
->NoPegawai int not null auto increment,
->Nama varchar (50),
->Pekerjaan varchar (30),
->KodeDepartemen int not null,
->primary key (NoPegawai));
Setelah perintah pembuatan tabel diberikan, untuk memastikan tabel telah
sukses terbentuk atau belum dapat diberikan perintah SQL berikut:
show tables;
g. Menghapus Tabel
Perintah SQL dapat digunakan untuk menghapus tabel sebagai berikut:
drop table nama_tabel;
Contoh :
drop table pegawai;
Perintah tersebut sebaiknya dilakukan secara hati-hati karena MySQL
menjalankan perintah tanpa memberi peringatan.
h. Menyisipkan Data ke dalam Tabel
Contoh :
mysql> insert into
-> instruktur(kd_instruktur, instruktur)
-> values(‘001’, ‘Andi’);
Hasil perintah diatas adalah sebagai berikut:
kd_instruktur instruktur
001 Andi
i. Menampilkan Data
Perintah untuk menampilkan data yang tersimpan dalam tabel dapat
dilakukan dengan perintah select.
1) Menampilkan data dari seluruh field/kolom
Contoh :
mysql> select * from belajar;
31
2) Menampilkan data dari field/kolom tertentu
Contoh:
mysql> select no_siswa from belajar;
3) Menampilkan data dengan mengacu nama tabel secara absolut Terkadang kita
memiliki field/kolom yang sama dari tabel yang berbeda. Oleh karena itu, untuk
menampilkan data dari satu tabel secara absolut, anda dapat mengacu pada nama
tabel yang dikehendaki.
Contoh:
mysql> select siswa.no_siswa, siswa.nama_siswa from siswa;
4) Menampilkan data tanpa data kembar dengan DISTINCT
Contoh:
mysql> select DISTINCT no_siswa from belajar;
5) Menampilkan data berdasarkan kondisi WHERE
Contoh:
Menampilkan data dari tabel rekan yang berusia 30 sampai
dengan 40:
mysql> select * from rekan where usia between 30 and 40;
atau
mysql> select * from rekan where usia>=30 and usia<=40;
Menampilkan data dari tabel rekan yang namanya diawali
dengan karakter R:
mysql> select * from rekan WHERE nama LIKE “R%”;
6) Menampilkan data berdasarkan klausa GROUP BY
Contoh:
Menampilkan data dari tabel rekan dengan menghitung jumlahnya
berdasarkan alamat:
mysql> select count(*), alamat FROM rekan GROUP BY alamat;
7) Menampilkan data dengan klausa ORDER BY
Klausa ORDER BY digunakan untuk menampilkan hasil urut asc
(ascending) dari kecil ke besar dan desc (descending) dari besar ke kecil.
32
Contoh:
Untuk menampilkan data rekan terurut dari besar ke kecil berdasarkan usia:
mysql> select * from rekan ORDER BY usia desc;
8) Menampilkan data dengan klausa LIMIT
Klausa LIMIT digunakan untuk menampilkan data berdasarkan jumlah baris
data atau range baris data.
Contoh:
Untuk menampilkan data dari tabel rekan setelah data baris ke 3 sebanyak
4:
mysql> select * from rekan LIMIT 3,4;
9) Menampilkan data dari gabungan beberapa tabel dengan JOIN
Contoh:
Untuk menampilkan data gabungan dari tabel siswa dan tabel
belajar:
mysql> select * from belajar CROSS JOIN siswa;
Untuk menampilkan data gabungan tabel belajar dan tabel siswa yang
orangnya sama, perlu ditambahkan kondisi (klausa WHERE).
mysql> select * from belajar CROSS JOIN siswa WHERE
belajar.no_siswa=siswa.no_siswa;
j. Mengubah Data (Update)
Data yang tersimpan dalam tabel ternyata telah kadaluarsa atau terdapat
kesalahan, maka data dapat diubah dengan perintah update. Untuk mengubah data
dari tabel rekan bernama Erlinda menjadi Erlinda Restu Ningsih, lakukan perintah:
mysql> update rekan set nama=’Erlinda Restu Ningsih’ WHERE
nama=’Erlinda’;
k. Menghapus Data (Delete)
Apabila data yang telah tersimpan tidak diperlukan lagi, data tersebut dapat
dihapus dengan perintah delete.
Contoh:
Untuk menghapus data rekan yang bernama Ray, lakukan dengan perintah:
mysql> delete from rekan WHERE nama=’Ray’;
33
2.11 Data Flow Diagram (DFD)
Rossa dan Shalahuddin (2011), menjelaskan bahwa DFD adalah representasi
grafik yang menggambarkan aliran informasi dan transformasi informasi yang
diaplikasikan sebagai data yang mengalir dari masukan (input) dan keluaran
(output). Menurut Kristanto (2008)DFD adalah suatu model logika data atau proses
yang dibuat untuk menggambarkan darimana asal data dan kemana tujuan data yang
keluar dari sistem. Arus data (Data Flow) di DFD diberi simbol suatu anak panah.
Arus data mengalir diantara proses (process), simpanan data (data store), dan
kesatuan luar (external entity).[12]
DFD dapat digunakan untuk merepresentasikan sebuah sistem atau perangkat
lunak pada beberapa level abtraksi. DFD dapat dibagi menjadi beberapa level yang
lebih detail untuk merepresentasikan aliran informasi atau fungsi yang lebih detail.
Edward Yourdon dan
Tom DeMarco Keterangan
Chris Gane dan Trish
Sarson
Source (Entitas Luar)
Proses
Data Flow
(Aliran / Arus Data)
Data Store
(Penyimpanan Data)
Gambar 2.6 Simbol – Simbol Pada DFD
DFD digambarkan di awal merupakan level teratas, diagram ini disebut
context diagram. Diagram tersebut kemudian digambar secara lebih rinci lagi yang
disebut overview diagram. Tahapan perancangan menggunakan DFD lebih rinci
sebagai berikut:
a. Membuat DFD Level 0 atau sering disebut juga dengan Context Diagram.
DFD level 0 menggambarkan suatu sistem yang akan dibuat sebagai suatu
entitas tunggal yang berinteraksi dengan orang maupun sistem lain. Penomoran
34
proses yang ada di dalam DFD Level 0 menggunakan angka 0 dan hanya ada satu
proses didalamnya. Pada diagram ini belum diperbolehkan adanya data store
karena diagram ini menggambarkan sistem secara keseluruhan.
Gambar 2.7 Context Diagram
b. Membuat DFD level 1
DFD level 1 digunakan untuk menggambarkan modul-modul yang ada dalam
sistem yang dikembangkan. DFD level 1 merupakan hasil breakdown DFD level 0
yang telah dibuat. DFD level 1 juga disebut sebagai Diagram Nol/Zero atau lebih
biasa disebut sebagai Overview Diagram. Pada level ini sudah dimungkinkan
digambarkannya data store yang digunakan. Penomoran proses DFD level 1
dimulai dengan angka 1.0, 2.0, 3.0, dan seterusnya.
Gambar 2.8 Contoh Diagram Level 1
35
c. Membuat DFD Level 2
Modul-modul pada DFD level 1 dapat di-breakdown menjadi DFD level 2.
Jumlah DFD level 2 sama dengan jumlah proses pada DFD level 1 yang di-
breakdown.
DFD level 2 dan seterusnya disebut diagram rinci, misal DFD level 2 dari
proses 1.0 maka diagram tersebut dapat disebut Diagram Rinci 1.0. Penomoran
proses pada level 2 dimulai dengan angka 1.1, 1.2, 1.3 dan seterusnya. Pada diagram
level 2 harus benar-benar diperhatikan keseimbangan aliran data antara diagram
nol dan diagram rinci juga keseimbangan pada data store yang ada.
Gambar 2.9 Contoh Diagram Level 2
d. Membuat DFD level 3 dan seterusnya
DFD level 3, 4, 5 dan seterusnya merupakan breakdown dari modul DFD
level diatasnya. Breakdown pada level 3, 4, 5 dan seterusnya aturannya sama persis
dengan DFD level 1 atau level 2. Penomoran prosesnya untuk DFD level 3 dimulai
dari angka 1.1.1, 1.1.2, 1.1.3 dan seterusnya.
2.12 Entity Relationship Diagram (ERD)
Menurut Rossa dan Shalahuddin (2011), ERD adalah pemodelan data utama
yang membantu mengorganisasikan data dalam suatu proyek ke dalam entitas-
entitas dan menentukan hubungan antar entitas. ERD merupakan suatu model untuk
menjelaskan hubungan antar data dalam basis data berdasarkan objek-objek dasar
data yang mempunyai hubungan antar relasi.[12]
36
Menurut pendapat Kroenke (2006)Entity-Relationship Diagram (ERD)
adalah suatu pemodelan konseptual yang didesain secara khusus untuk
mengidentifikasikan entitas yang menjelaskan data dan dan hubungan antar data,
yaitu dengan menuliskan cardinality. Sedangkan menurut Kadir (2009) Model E-R
(Diagram ER) adalah suatu model yang digunakan untuk menggambarkan data
dalam bentuk entitas, atribut dan hubungan antarentitas. Huruf E menyatakan
entitas dan R menyatakan hubungan (dari kata Relationship).
Gambar 2.10 Contoh Gambar ERD
ERD adalah suatu model penyajian data dengan menggunakan entitas dan
atribut yang saling berhubungan. ERD untuk memodelkan struktur data dan
hubungan antar data, untuk menggambarkannya digunakan beberapa notasi dan
simbol.
Pada dasarnya ada tiga simbol yang digunakan, yaitu :
a. Entitas
Entitas merupakan objek dari sesuatu yang nyata maupun abstrak. Simbol
dari entitas ini biasanya digambarkan dengan persegi panjang.
b. Atribut
Setiap Setiap entitas pasti mempunyai elemen yang disebut atribut yang
berfungsi untuk mendeskripsikan karakteristik dari entitas tersebut.. Gambar atribut
diwakili oleh simbol elips.
c. Relasi (hubungan)
Hubungan antara sejumlah entitas yang berasal dari himpunan entitas yang
berbeda. Biasanya digambarkan dengan simbol panah.
37
Jenis hubungan diantara dua tipe entitas dinyatakan dengan istilah hubungan
one-to-one, one-to-many, many-to-one, dan many-to-many (Kadir, 2003).
Diasumsikan terdapat dua buah tipe entitas yang diberi nama X dan Y dapat saling
berhubungan, penjelasan dari masing-masing jenis hubungan yang dapat terjadi
pada X dan Y tersebut adalah sebagai berikut:
1) Hubungan one-to-one (1:1)
Setiap entitas pada tipe entitas X paling banyak berpasangan dengan satu
entitas pada tipe entitas Y, begitu pula sebaliknya.
2) Hubungan one-to-many (1:M)
Setiap entitas pada tipe entitas X bisa berpasangan dengan banyak entitas
pada tipe entitas Y, sedangkan setiap entitas pada entitas Y hanya dapat
berpasangan dengan satu entitas pada entitas X.
3) Hubungan many-to-one (M:1)
Setiap entitas pada tipe entitas X paling banyak berpasangan dengan satu
entitas pada tipe entitas Y dan setiap entitas pada tipe entitas Y dapat
berpasangan dengan banyak entitas pada tipe entitas X.
4) Hubungan many-to-many (M:M)
Setiap entitas pada suatu tipe entitas X bisa berpasangan dengan banyak
entitas pada tipe entitas Y dan begitu pula sebaliknya.
Gambar 2.11 Notasi Dasar Dalam ERD
Kardinalitas hubungan menggambarkan banyaknya jumlah anggota entitas
yang terlibat di dalam relasi yang terjadi dan menjelaskan jenis hubungan apa
yang yang terjadi antar entitas satu dengan entitas lainnya.
Top Related