# Ch 5: Desain Database Relasional ## Memberikan Kredit Dimana Kredit Diperlukan Tabel `jokes` terdiri dari tiga column: `id`, `joketext`, dan `jokedate`. Kode SQL yang kita gunakan untuk membuat dan mengisi tabel tersebut adalah sebagai berikut: ```sql # Code to create a simple joke table CREATE TABLE `joke` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `joketext` TEXT, `jokedate` DATE NOT NULL ) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB; # Adding jokes to the table INSERT INTO `joke` SET `joketext` = "Why was the empty array stuck outside? It didn\'t have any keys", `jokedate` = '2017-04-01'; INSERT INTO `joke` (`joketext`, `jokedate`) VALUES ( "!false - It\'s funny because it\'s true", "2017-04-01" ); ``` Misalkan sekarang kita ingin menyimpan potongan informasi lain dari joke: nama dari orang yang mensubmit joke tersebut. Adalah hal yang natural untuk menambahkan sebuah column baru ke tabel `jokes`. Kita dapat menambahkan column dengan command SQL `ALTER TABLE`. Query SQL dibagi menjadi dua kategori: - Query **Data Definition Language (DDL)**. Query-query ini menjelaskan *bagaimana* data disimpan. Query `CREATE TABLE` dan `CREATE DATABASE` adalah dua query yang termasuk DDL. Query `ALTER TABLE` juga termasuk. - Query **Data Manipulation Language (DML)**. Query-qery ini yang digunakan untuk memanipulasi data dalam database. Kita telah melihat beberapa: `INSERT`, `UPDATE`, `DELETE`, dan `SELECT`. ### Menambahkan Column ke Tabel Existing Untuk menambahkan sebuah column baru bernama `authorname` yang akan kita gunakan untuk menyimpan nama pengarang joke: Klik Kanan pada nama tabel, lalu pilih "Alter Table". ![](https://i.imgur.com/OFKqjzH.png) ![](https://i.imgur.com/8XQU0TH.png) ## Pisahkan Entitas-entitas Cara kita untuk menambahkan informasi pengarang dengan membuat dua column baru `authorname` dan `authoremail` memberikan permaslahan: - Bagaimana jika contributor joke bernama Joan Smith yang sering berkontribusi mengganti alamat emailnya? Ia mungkin menggunakan email barunya saat mensubmit joke baru, tapi email address lamanya akan tetap terkait dengan joke-joke yang disubmit olehnya sebelumnya. Melihat database, kita mungkin berpikir terdapat dua pengarang bernama Joan Smith. Lalu, Joan Smith mungkin menginformasikan perubahan email, dan Anda akan mencoba mengupdate semua joke lamanya, tapi jika kita tertinggal satu joke saja, ddatabse kita akan berisi informasi yang salah. Ahli desain database merujuk ini sebagai **update anomaly**. Problem-problem ini dapat diatas dengan mudah menggunakah prinsip desain database. Daripada menyimpan informasi author dalam tabel yang sama dengan joke, kita membuat sebuah tabel baru untuk daftar author kita. Sama seperti kita mempunyai column `id` dalam tabel `joke` untuk mengidentifikasi setiap joke dengan nomor unik, kita juga menggunakan column `id` untuk mengidentikasi author yang unik pada tabel author kita. Kita dapat menggunakan id author dalam tabel `joke` untuk mengasosiasikan author dengan joke. Layout database akan terlihat seperti berikut: ![](https://i.imgur.com/Oc44LnG.png) Relasi antara tabel joke dan author. Kedua tabel di atas menunjukkan terdapat tiga joke dan dua author. Column h ![](https://i.imgur.com/Lrgm3yH.png)