IKG2I4 / Software Project I
Mahmud Imrona, M.T. Izzatul Ummah, M.T.
Kelompok Keahlian Algoritma dan Komputasi
LECTURE NOTE
WEEK 9
Entity Relationship Diagram (ERD)
Primary key
Foreign key
Query SQL sederhana: SELECT-FROM-WHERE
Query ke 2 tabel: JOIN
ERD atau Entity Relationship Diagram adalah diagram
yang menggambarkan entitas data (entity) dan
hubungannya.
Entity sangat mirip dengan class pada OOP, akan
tetapi entity lebih terkait dengan data yang disimpan
secara fisik pada database.
Perancangan ERD dilakukan pada tahap awal fase
pengembangan software dan harus dilakukan dengan
cermat dan detail, karena sedikit saja perubahan pada
ERD dapat berdampak besar pada proses
implementasi coding.
Ketika pengembangan software sudah mulai
masuk tahap implementasi (coding), sedikit
perubahan pada ERD dapat berakibat cukup besar
pada arsitektur software, dan programmer
mungkin harus mengubah sebagian besar source
codenya.
Oleh karena itu, tanggung jawab seorang System
Analyst sangat besar dalam merancang ERD yang
tepat untuk software yang sedang dikembangkan.
Pada kuliah ini kita akan menggunakan skema
HRM (Human Resource Management) pada Oracle
untuk studi kasus.
Sebagai bahan perbandingan, lihat juga
“BANKING SYSTEM”, pada textbook
–Silberschatz−Korth−Sudarshan. Database System Concepts, 4th ed, McGrawHill. Chapter 2.
Pada studi kasus BANKING SYSTEM, ada beberapa
entitas yang teridentifikasi (mirip seperti class
pada materi object oriented):
–Employee: pegawai bank
–Customer: semua nasabah yang tercatat di bank
–Depositor: nasabah yang menyimpan uang di bank
–Borrower: nasabah yang meminjam uang dari bank
–Account: rekening penyimpanan
–Loan: rekening peminjaman
Catatan: sistem di atas hanya asumsi saja, dan mungkin tidak sesuai dengan sistem banking sebenarnya.
Tiap entity memiliki atribut (mirip seperti
attribute class):
–Employee: employee-id, name, telephone number, dsb
–Customer: customer-id, name, address (street & city)
–Depositor: daftar nasabah yang menyimpan uang di bank
–Borrower: daftar nasabah yang meminjam uang dari bank
–Account: rekening penyimpanan
–Loan: rekening peminjaman
Atribut pada entity bersifat atomic yaitu hanya mengandung sebuah nilai. Bila yang dibutuhkan adalah beberapa nilai,
ENTITY DAN ATRIBUT
Tiap entity utama memiliki primary key. Primary
key yaitu atribut yang bersifat unique. Contoh:
–Untuk tabel mahasiswa, primary key-nya adalah NIM
–Untuk tabel employee: employee-id, name, telephone number, dsb
–Customer: customer-id, name, address (street & city)
–Depositor: daftar nasabah yang menyimpan uang di bank
–Borrower: daftar nasabah yang meminjam uang dari bank
–Account: rekening penyimpanan
–Loan: rekening peminjaman
PRIMARY KEY
ENTITY
RELATIONSHIP
DIAGRAM
Hubungan antar entity dapat berupa:
–One-to-one: relasi 11
Contoh: tiap mahasiswa hanya boleh punya satu NIM
–One-to-many atau many-to-one: relasi 1N
–Many-to-many: relasi MN
Coba ingat kembali tentang multilist pada
matakuliah Pemrograman Terstruktur 2:
–Relasi 1N: hubungan list pegawai dan list anak
Tiap pegawai boleh punya banyak anak, tiap anak hanya boleh punya 1 bapak
–Relasi NM: hubungan list dosen dan list matakuliah
HUBUNGAN ANTAR ENTITY
Setelah ERD selesai dirancang, ERD tersebut
harus dimapping atau dipetakan ke dalam table
diagram, untuk kemudian disetting di software
DBMS (Database Management System) misalnya
Microsoft SQL SERVER atau ORACLE.
Saat ini para system analyst yang sudah
berpengalaman dan punya skill biasanya langsung
merancang table diagram tanpa terlebih dahulu
merepresentasikan diagram ERD secara formal.
Contoh table diagram ada di halaman berikut.
HRM
(Oracle)
Thumb rule (aturan tak resmi) untuk melakukan
mapping ERD ke table diagram:
–Untuk 2 entitas yang memiliki relasi 1-1 maka kedua entitas itu digabungkan dalam 1 tabel
–Untuk 2 entitas yang memiliki relasi 1-N maka masing-masing entitas dibuat menjadi 1 tabel, sehingga ada 2 tabel untuk 2 entitas.
Contoh: relasi pegawai-anak adalah relasi 1N, maka dibuat
tabel pegawai dan ada tabel anak, di mana tabel anak memiliki foreign key (asosiasikan sebagai pointer pada relasi 1N) yang mengacu pada orangtuanya di tabel pegawai
Thumb rule (aturan tak resmi) untuk melakukan
mapping ERD ke table diagram:
–Untuk 2 entitas yang memiliki relasi N-M maka masing-masing entitas dibuat menjadi 1 tabel, ditambah tabel baru yaitu tabel relasi, sehingga ada 3 tabel untuk 2 entitas.
Contoh: relasi dosen-matakuliah adalah relasi N-M, maka
dibuat tabel dosen dan tabel matakuliah, serta tabel MKDOS di mana tabel MKDOS ini memiliki dua foreign key yang masing-masing mengacu ke tabel dosen dan ke tabel matakuliah.
Mekanisme pointer (pada kuliah PT2) sekarang
digantikan dengan mekanisme foreign key.
Foreign key adalah atribut suatu entity yang mengacu pada atribut (primary key) dari entity lain.
Contoh, tabel dosen primary key-nya NIP, tabel matakuliah primary key-nya KodeMK, maka tabel MKDOS punya dua atribut foreign key yang masing-masing mengacu ke NIP (dosen) dan ke KodeMK (matakuliah).
Semua nilai pada foreign key di tabel MKDOS harus sudah ada datanya di tabel dosen dan tabel matakuliah.
Tabel dosen dan tabel matakuliah adalah tabel master atau reference, karena tabel ini menyimpan data yang dirujuk oleh tabel lain.
Dalam proses pengembangan software, database yang
dirancang haruslah memenuhi kriteria :
– Integrity: keutuhan sistem, bila ada data berubah maka perubahan itu harus diketahui oleh keseluruhan sistem
– No redundancy: tidak ada data yang sama tersimpan di 2 tabel (repetition of information atau duplikasi data)
Ada beberapa tingkat ‘kenormalan’ database:
– 1st Normal Form: masih banyak redundancy (very loose)
– 2nd Normal Form
– 3rd Normal Form
– Boyce Codd Normal Form
– 4th Normal Form: paling sedikit redundancy (very strict)
Proses untuk menormalkan atau mengurangi
redundancy pada sebuah rancangan database
disebut normalisasi.
4
thNormal Form menetapkan kriteria yang sangat
ketat (strict) dalam menerapkan prinsip integrity
dan no-redundancy, namun akibatnya
membutuhkan waktu yang lebiih lama untuk
query ke banyak tabel. Oleh karena itu untuk
menangani database yang sangat kompleks
terkadang 3NF atau BCNF saja sudah cukup.
Query SELECT * FROM <table>
–Digunakan untuk meretrieve atau mengambil data dari sebuah tabel database.
–Untuk memilih kolom tertentu, tuliskan nama kolomnya.
QUERY SELECT KE SATU TABLE
SELECT customer_id, customer_name FROM
customer;
SELECT * FROM customer;
Query SELECT * FROM <table> WHERE
–WHERE digunakan untuk menyeleksi atau menyaring (filter) data yang ingin ditampilkan sesuai kebutuhan.
–Kondisi yang dituliskan di dalam WHERE adalah
pernyataan/kalimat logika. Setiap baris data pada DBMS akan diseleksi berdasarkan kondisi tersebut. Jika
memenuhi syarat kondisi (TRUE), maka baris tersebut ditampilkan. Jika sebaliknya (FALSE), maka tidak
ditampilkan.
Query SELECT * FROM <table1> JOIN <table2>
–JOIN digunakan untuk mendapatkan data dari dua tabel. Setiap tabel dianggap sebagai himpunan, dan proses JOIN pada dasarnya adalah perkalian (cross product) antara
dua buah himpunan, dengan syarat tertentu misalnya adanya kesamaan pada salah satu atribut (foreign key).
–Contoh:
Menginstal ORACLE
Mengimport skema HUMAN RESOURCE
MANAGEMENT (file hr_master.sql) ke ORACLE
–Pada tampilan utama Web Oracle di atas
(http://127.0.0.1:8080/apex/), klik SQL Workshop -> klik SQL Scripts -> klik Upload -> Klik Choose File, arahkan ke file hr_master.sql. Isi nama script name = HR.
–Klik Upload.
–Selanjutnya akan muncul tampilan berikut:
–Klik di gambar icon di bawah Run.
TUGAS PEKAN INI
–Selanjutnya,
muncul tampilan di samping ini:
–Klik Run Now dan tunggu beberapa detik sampai
seluruh query dieksekusi.
–Bila berhasil maka akan muncul status COMPLETE (lihat
gambar di halaman berikutnya):
–Selanjutnya akan muncul tampilan berikut:
–Untuk menguji skema yang sudah Anda import, klik menu Home -> SQL Workshop -> Object Browser. Bila di situ
ada table COUNTRIES, DEPARTMENTS, EMPLOYEES, JOBS, JOB_HISTORY, LOCATIONS, dan REGIONS, maka Anda
telah berhasil meng-import skema HR.
TUGAS PEKAN INI
–Eksekusi query-query berikut, amati hasil yang muncul, dan pahami mengenai arti query tersebut:
SELECT * FROM departments;
SELECT department_id, location_id FROM departments;
SELECT last_name, hire_date, salary FROM employees;
SELECT last_name, salary, (salary + 300) FROM employees;
SELECT last_name, salary, (12*salary+100) FROM employees;
SELECT last_name, job_id, salary, commission_pct FROM employees;
SELECT last_name AS name, commission_pct comm FROM employees;
–Eksekusi query-query berikut, amati hasil yang muncul, dan pahami mengenai arti query tersebut:
SELECT first_name || last_name || ' adalah ' || job_id AS "Detail Pegawai" FROM employees;
SELECT * FROM locations;
SELECT * FROM countries;
SELECT * FROM jobs;
SELECT * FROM job_history;
–Apa perbedaan hasil antara dua query berikut?
SELECT department_id FROM employees;
SELECT DISTINCT department_id FROM employees;
–Apa perbedaan hasil antara dua query berikut?
SELECT job_id FROM employees;
SELECT DISTINCT job_id FROM employees;
–Apa perbedaan hasil antara dua query berikut?
SELECT department_id, job_id FROM employees;
SELECT DISTINCT department_id, job_id FROM employees;
–Apa arti perintah DESCRIBE berikut ini?
DESCRIBE employees;
DESCRIBE departments;
–Apa perbedaan hasil antara dua query berikut?
SELECT department_id FROM employees;
SELECT DISTINCT department_id FROM employees;
–Apa perbedaan hasil antara dua query berikut?
SELECT job_id FROM employees;
SELECT DISTINCT job_id FROM employees;
–Apa perbedaan hasil antara dua query berikut?
SELECT department_id, job_id FROM employees;
SELECT DISTINCT department_id, job_id FROM employees;
–Apa arti perintah DESCRIBE berikut ini?
DESCRIBE employees;
–Eksekusi query-query berikut, amati hasil yang muncul, dan pahami mengenai arti query tersebut:
SELECT employee_id, last_name, job_id, department_id FROM employees
WHERE department_id = 90 ;
SELECT last_name, job_id, department_id FROM employees
WHERE last_name = 'Whalen';
SELECT first_name, last_name, hire_date FROM employees
WHERE hire_date = '02/17/1996';
–Eksekusi query-query berikut, amati hasil yang muncul, dan pahami mengenai arti query tersebut:
SELECT first_name, last_name, salary FROM employees
WHERE salary > 6000;
SELECT last_name, salary FROM employees
WHERE salary BETWEEN 2500 AND 3500;
SELECT first_name, last_name FROM employees
WHERE last_name LIKE 'Mar%';
–Eksekusi query-query berikut, amati hasil yang muncul, dan pahami mengenai arti query tersebut:
SELECT employee_id, last_name, job_id, salary FROM employees
WHERE salary >= 10000 AND job_id LIKE '%MAN%';
SELECT employee_id, last_name, job_id, salary FROM employees
WHERE salary >= 10000 OR job_id LIKE '%MAN%';
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date;
–Eksekusi query-query berikut, amati hasil yang muncul, dan pahami mengenai arti query tersebut:
SELECT last_name, job_id, department_id, hire_date FROM employees
ORDER BY hire_date DESC;
SELECT last_name, department_id, salary FROM employees
ORDER BY department_id, salary DESC;
–Buatlah query SQL untuk menampilkan data berikut ini:
Create a query that displays the last name and salary of employees who earn more than 12000.
Create a query that displays the last name and department number for employee number 176.
Buatlah query untuk menampilkan data employees yang
memiliki salary antara 5000-12000 (>= 5000 dan <= 12000). Buat juga query untuk menampilkan data di luar range itu.
Create a query to display the last name, job ID, and start date for the employees with the last names of Matos and Taylor. Order the query in ascending order by the start date.
Create a query to display the last name and department
number of all employees in departments 20 or 50 in ascending alphabetical order by name.
–Buatlah query SQL untuk menampilkan data berikut ini:
Create a query that displays the last name and hire date for all employees who were hired in 1994.
Create a query to display the last name and job title of all employees who do not have a manager.
Create a query to display the last name, salary, and
commission of all employees who earn commissions. Sort data in descending order of salary and commissions.
Create a query to display the last name, job, and salary for all employees whose jobs are either those of a sales
representative or of a stock clerk, and whose salaries are not equal to 2500, 3500, or 7000.
Create a query to display the last name, salary, and