Belajar MySQL: Cara Mendesain Database

posted in: Tutorial Pemrograman | 0

Dasar-Dasar Desain Database yang Baik.

Mendesain database bukan hal sulit, akan tetapi harus mengikuti beberapa aturan/standar agar model data menjadi fleksibel dan membuat kita lebih mudah bekerja dengannya. Desain yang baik juga akan mempermudah kita dalam menjaga integritas data dan membuat laporan.

Desain database yang baik dimulai dari mendaftar data apa saja yang ingin dimasukan ke dalam database dan apa yang ingin anda lakukan terhadap data tersebut. Jangan terlalu menganggap ringan karena jika ada yang terlewat dimasukan, terkadang harus mulai lagi dari awal.

Mengidentifikasi Entities

Jenis informasi yang akan disimpan di dalam database disebut entities. Entities terdiri dari 4 jenis: orang, barang, event, dan lokasi. Semua entitas yang ingin dimasukan ke dalam database harus masuk dalam kategori ini. Jika ia tidak masuk dalam kategori itu, mungkin merupakan properti dari entities, atau sering juga disebut atribut.

Sebagai contoh, sebuah database toko akan mempunyai entitas berikut:

  • Toko adalah lokasi
  • Penjualan adalah event
  • Produk adalah barang
  • Pelanggan adalah orang.

Mengidentifikasi Relationship

Langkah berikutnya adalah membuat Relationship. Relationship menunjukan bagaimana hubungan antar entiti ini. Seperti hubungan: Pelanggan membeli Produk, Produk dengan Toko, Toko dengan Pelanggan, dan seterusnya.

Hubungan relationship dapat dikelompokan dalam beberapa jenis:

  • one-to-one, 1:1 (satu ke satu)
  • one-to-many: 1:N (satu ke banyak)
  • many-to-one: M:1 (banyak ke satu)
  • many-to-many: M:N (banyak ke banyak)

Untuk kasus Toko, kita bisa membuat relationship seperti berikut:

  • Pelanggan => Penjualan; => 1:N, 1 Pelanggan melakukan banyak transaksi Penjualan (1 transaksi hanya bisa dilakukan oleh 1 Pelanggan);
  • Pelanggan => Produk; => M:N, Banyak pelanggan dapat membeli 1 Produk, dan Banyak Produk dapat dibeli 1 Pelanggan
  • Pelanggan => Toko; => M:N, Banyak Pelanggan bisa membeli di 1 toko, dan Banyak Toko bisa menjual ke 1 Pelanggan
  • Penjualan => Produk; => M:N, Banyak Penjualan menjual 1 Produk, dan Banyak Produk bisa dijual dalam 1 transaksi Penjualan.
  • Toko => Penjualan; => 1:N, 1 Toko bisa melakukan banyak Penjualan. (1 transaksi Penjualan hanya bisa dilakukan di 1 toko)
  • Toko => Produk; => M:N, Banyak Toko bisa menyimpan 1 Produk, Banyak Produk bisa disimpan di satu Toko.

Relasi antar tabelnya bisa kita gambar sebagai berikut :
belajar mysql relasi antar tabel

Gambar 1. Hubungan relationship antar entity yang belum dioptimasi.

Relationship Redundant

Dari gambar diatas, kita melihat bahwa hubungan antara Pelanggan dan Produk dapat diwakili oleh Penjualan. Relationship ini disebut Redundant. Relasi seperti ini bisa dihapus.

Hubungan Produk dan Penjualan yang berupa M:N (banyak ke banyak) pada prakteknya tidak bisa dilakukan langsung. Tetapi harus dilakukan melalui tabel antara. Begitu juga antara Produk dengan Toko. Untuk hubungan antara Produk dan Penjualan dapat dibuat tabel antara Penjualan Detil. Sedangkan hubungan antara Produk dan Toko, dapat dibuat tabel antara Stok. Berikut adalah model database yang telah diperbaiki:
belajar mysql relationship redundantGambar 2. Hubungan relationship antar entity yang sudah dioptimasi dengan menghapus relationship redundant, dan tambahan 2 table: penjualan detail dan stok.

Mengidentifikasi Atribut

Elemen data yang ingin kita simpan dalam sebuah entitas disebut atribut. Contoh atribut pada entitas Produk adalah nama produk, harga, tipe, pabrik. Pada Pelanggan, misanya nama dan alamat. Pada Penjualan misalnya produk, tanggal, jumlah, dan seterusnya.

Data Turunan

Data turunan adalah data yang diturunkan dari data atribut lain yang sudah disimpan. Contoh klasik dari data turunan misalnya ‘total penjualan’. Nilainya adalah total penjumlahan dari harga barang dikali jumlah pembelian, dalam kurun waktu tertentu. Karena nilainya bisa terus berubah seiring waktu, maka data turunan ini tidak perlu disimpan.

Memasang Primary Key

Primary Keys
Primary key (PK), atau kunci-utama, adalah satu atau lebih atribut yang mengidentifikasi entity secara unik. Jika PK terdiri dari dua atau lebih atribut, maka ia  disebut composite-key. Semua atribut yang menjadi bagian dari PK harus memiliki nilai pada setiap record dan sifatnya harus unik (tidak boleh ada yang sama). Contoh PK misalnya nomor pelanggan, kode barang, dan seterusnya.

Dalam membangun relationship antar entitas, PK dipakai sebagai referensi. Contohnya, relasi antara entitas Penjualan dan Penjualan-detil akan menggunakan PK Penjualan. Data atribut PK Penjualan akan disimpan sebagai kolom pada pada entitas Penjualan-detil.
belajar mysql primary key

Keberadaan PK Penjualan dalam PK Penjualan-detil disebut Foreign Key.

Menentukan Tipe Data untuk Atribut

Setelah semua entitas dan relationship dibuat, proses berikutnya adalah menentukan tipe data. Setiap database biasanya mempunyai tipe data sendiri-sendiri. Akan tetapi ada beberapa yang sesuai standar. Misanya: CHAR, VARCHAR, TEXT, INT, FLOAT, dab DOUBLE.

The standard data types that every database knows, and are most-used, are: CHAR, VARCHAR, TEXT, FLOAT, DOUBLE, and INT. Untuk database MySQL, akan dibahas pada bagian berikutnya.

Cara Normalisasi Database

Normalilsasi adalah proses untuk akan menjaga agar data tetap mempunyai integritas yang baik dengan menghilangkan kelompok data yang duplikat dan redundant. Normalisasi akan membuat model data menjadi fleksible dan reliable.

Umumnya proses normalisasi dilakukan 3 tahap.

1.       Normalisasi Pertama (1NF)

Aturan normalisasi pertama, kolom dari table harus bersifat atomik-value, artinya satu cell tidak boleh menyimpan banyak nilai. Pada contoh dibawah, kolom Color menyimpan 2 nilai: red, green dan yellow, blue. Untuk memenuhi normalisasi pertama, kolom Color harus dikembangkan seperti Contoh 2.

belajar mysql normalisasi pertamaContoh 1. Tabel yang belum di normalisasi.

belajar mysql tabel yang memenuhi normalisasi pertama

Contoh 2. Table yang memenuhi kriteria Normalisasi Pertama.

2.       Normalisasi Kedua (2NF)

Aturan Normalisasi kedua adalah adalah:

a.      Memenuhi semua syarat dari Normalisasi pertama.

b.      Menghilangkan subset data yang terdapat pada banyak baris kemudian meletakkanya pada table terpisah.

c.      Membuat relasi antara tabel yang dipisah ini, dengan menggunakan Foreign Key.

Pada Contoh 3, kolom Purchase Location memiliki kolom dengan subset data yang berulang yaitu Long Angeles (diulang 2x) dan San Fransisko (diulang 2x). Karena itu tabel harus dipecah di buat relasi antara keduanya.

belajar mysql normalisasi kedua

Contoh 3. Tabel belum memenuhi normalisasi kedua.

belajar mysql tabel yang memenuhi normalisasi kedua

Contoh 4. Table yang telah memenuhi rule normalisasi kedua.

3.       Normalisasi Ketiga (3NF)

Kriteria normalisasi ketiga:

a.       Memenuhi kriteria normalisasi kedua.

b.      Menghilangkan kolom yang tidak bergantung pada primary-key tabel tersebut.

Pada contoh di bawah ini, kolom GenreType tidak bergantung pada primary-key buku. Hanya price yang bergantung pada buku. Karena itu GenreType harus dihilangkan dan dalam contoh ini, dibuat menjadi table sendiri.

belajar mysql normalisasi ketiga

Contoh 5. Tabel yang belum sesuai normalisasi ketiga.

belajar mysql tabel yang memenuhi normalisasi ketiga

Contoh 6. Kolom GenreType dihilangkan karena tidak bergantung pada primary-key buku. Pada contoh ini, dibuat tabel baru Table_Genre.

Leave a Reply