Rabu, 28 Januari 2009

Pengenalan ADO.NET (1) – Basisdata

Penggunaan basis data pada sebuah perangkat lunak sebagai tempat untuk menyimpan data merupakan sesuatu hal yang penting. Kemampuan untuk menyimpan, memperoleh, mengubah atau menghapus data dari tempat penyimpanan tersebut merupakan salah satu kemampuan yang seharusnya dimiliki oleh perangkat lunak tersebut.

Contoh yang paling dekat dari sebuah perangkat lunak yang memerlukan basis data untuk menyimpan data lalu mengolah data tersebut (menambah data baru atau Create, memperoleh data tersebut untuk selanjutnya ditampilkan atau diolah atau disebut juga Retrieve, mengubah data atau Update, dan menghapus data atau Delete – proses-proses ini bisa kita singkat menjadi CRUD) adalah situs yang sedang Anda baca ini, yaitu situs warnaislam.com. Menurut Anda, apakah situs ini membutuhkan basis data untuk menyimpan data-data artikel, penulis, rubrik, atau data lainnya? Jawabnya tentu saya "Iya".

Tulisan ini tidak ditujukan untuk membedah isi perut dari situs ini, tetapi akan lebih spesifik bercerita tentang bagaimana menggunakan basis data pada sebuah perangkat lunak yang dibangun dengan teknologi .NET.

Seperti telah kita ketahui bersama dari artikel perkenalan ini bahwa aplikasi atau perangkat lunak yang berhubungan dengan basis data merupakan salah satu aplikasi yang didukung oleh .NET Framework. Lalu pada artikel berikutnya kita juga telah diperkenalkan pada komponen yang mendukung pembuatan sebuah perangkat lunak untuk dapat berhubungan dengan basis data, yaitu yang disebut ADO.NET.

Pada bagian pertama dari artikel tentang ADO.NET, saya akan memberikan pengantar untuk memahami basisdata relasional.
Pengantar Basis Data Relasional

Sejak pertama kali kita berkenalan dengan contoh-contoh aplikasi yang didukung oleh .NET Framework, sejak itu pula kita telah berkenalan dengan sekumpulan data yang digunakan untuk mendukung aplikasi yang dibuat.

Pada tulisan pertama tentang aplikasi konsol, telah diperkenalkan bagaimana mengakses data berupa daftar penulis dari sebuah file text. Lalu pada tulisan tentang web service, kita sekali lagi menggunakan data daftar penulis yang disimpan di dalam basisdata obyek (tidak akan dibahas disini), dan pada artikel yang lalu mulai diperkenalkan relasi antara data penulis dengan data artikel yang ditulisnya – disimpan di dalam basisdata obyek.

Mari kita perhatikan bagaimana kita bekerja dengan data, bagaimana kita mengelompokan data pada sebuah himpunan tertentu (himpunan data penulis dan himpunan data artikel). Ketika kita mengelompokkan data penulis dalam sebuah file text kita belum bisa menyebutnya sebagai pengelompokkan data dengan atribut tertentu, karena memang hanya satu atribut yang ada di dalamnya (secara implicit) yaitu nama lengkap penulis – walaupun tidak secara eksplisit kita menuliskan atribut “nama lengkap”. Perhatikan kembali dua contoh terakhir, pada tulisan tentang web service kita mulai menggunakan atribut “Nama” dan disimpan di dalam basisdata obyek (akan dibahas pada artikel lain), dan pada tulisan terakhir, pengelompokkan mulai dikembangkan menjadi dua kelompok yang masing-masing memiliki hubungan berbeda

Masih bingung dengan penjelasan diatas? Mari kita kerucutkan istilah-istilah yang ada menjadi: data, pengelompokan dengan hubungan tertentu, dan atribut. Dari istilah-istilah ini, kita dapat menyusun kelompok-kelompok data tersebut menjadi sebuah basisdata relasional.

Basisdata relasional merupakan basisdata yang menggambarkan keterhubungan antara data berdasarkan atribut yang sama-sama dimiliki oleh data tersebut. Pengelompokkan ini menggunakan hubungan (relasi) yang sama yang ada diantara data tersebut – hubungan penulis yang memiliki atribut “Nama Awal” dan “Nama Akhir”, hubungan artikel yang memiliki atribut “Penulis” dan “Judul”. Oleh karena itu istilahnya disebut sebagai basidata relasional.[1]

Pada artikel sebelumnya juga kita lihat bahwa secara fisik, sumber data yang digunakan (file text atau basisdata obyek) ditulis pada sebuah file yang disimpan pada computer. Lalu aplikasi secara langsung melakukan pengoperasian terhadap file tersebut. Tetapi pada basisdata relasional, semua operasi untuk manipulasi data tidak dilakukan secara langsung, melainkan oleh system yang terpisah dari aplikasi dan merupakan kesatuan pada basisdata tersebut – disebut sebagai Database Management System (DBMS). Contoh dari DBMS yang banyak dikenal adalah: Microsoft SQL Server, Microsoft Access, Oracle, DB2, MySQL, PostgreSQL dan masih banyak lagi DBMS lainnya.
Table sebagai Unit Basisdata Relasional

Sebuah data penulis yang memiliki atribut “Nama Awal” dan “Nama Akhir” disebut sebagai tuple, dalam sebuah table sebagai unit dari basisdata relasional biasanya terdapat lebih dari satu tuple yang antara tuple yang satu dan lainnya memiliki hubungan yang sama, yaitu memiliki sekelompok atribut yang sama. Dalam table, tuple biasanya disebut sebagai sebuah row dan atribut disebut sebagai column.


Berikut ini kita dapat lihat relasi dari artikel yang ditulis – kita sebut saja sebagai table Artikel – terdiri dari atribut “Nawa Awal”, "Nama Akhir" dan “Judul”:



Primary Key

Nilai dari satu atau lebih atribut dalam sebuah row dapat digunakan sebagai identitas untuk row tersebut. Hal ini berguna ketika kita akan melakukan operasi untuk mendapatkan data tertentu dari sebuah table. Misalkan kita ingin mendapatkan informasi tentang penulis yang memiliki “Nama Awal” dan “Nama Akhir” Basirudin dan Rachman, maka bisa saja kita jadikan “Nama Awal” dan “Nama Akhir” sebagai identitas yang unik untuk table tersebut. Atribut yang dijadikan identitas yang unik ini yang disebut sebagai Primary Key (PK).

Jika kita perhatikan kembali table Penulis tersebut, apa yang kita jadikan sebuah identitas yang unik masih dapat menimbulkan masalah. Pertanyaannya adalah, apakah nama Basirudin Rachman merupakan nilai yang unik? Bagaimana bila ada lebih dari satu orang penulis dengan nama yang sama? Dari sini dapat kita lihat, kombinasi “Nama Awal” dan “Nama Akhir” tidak dapat kita jadikan sebagai identitas untuk setiap data di dalam row pada table Penulis.

Dalam sebuah DBMS ada beberapa solusi yang ditawarkan untuk masalah seperti ini dengan menambahkan satu atribut lain yang dipastikan unik untuk menjadi PK. Analoginya adalah seperti Kartu Tanda Penduduk (KTP) yang kita miliki, dimana disitu nomor KTP menjadi identitas yang unik bagi setiap pemiliknya. Di dalam DBMS biasanya sebuah nilai numerik bisa dijadikan sebagai identitas, juga terdapat apa yang disebut GUID[2] yang dapat dijadikan identitas.
Normalisasi

Mari kita perhatikan table Artikel dimana terlihat nama dari setiap penulis yang memiliki lebih dari satu artikel dituliskan kembali sebanyak artikel yang ditulisnya. Hal ini disebut sebagai duplikasi data yang dapat menimbulkan ketidakefisienan dalam hal sumber daya yang dibutuhkan untuk menyimpannya di dalam sebuah media penyimpanan yang digunakan oleh DBMS (misalnya Hard Drive). Permasalahan lain yang dapat timbul karena duplikasi adalah kemungkinan terjadinya ketidakkonsistenan data yang dapat menimbulkan hilangnya keutuhan dari data tersebut.



Beberapa anomaly yang dapat terjadi ketika sebuah table tidak dinormalisasi[3]:

1. Anomali update, beberapa informasi yang sama dapat disimpan dalam beberapa row. Beberapa informasi yang sama ini bisa menjadi identitas bagi row tersebut. Tetapi apabila terjadi perubahan pada sebuah atribut yang merupakan bagian dari identitas row maka semua row yang memiliki identitas yang sama juga harus dirubah. Apabila proses perubahan hanya dilakukan pada sebagian dari semua row yang memiliki identitas yang sama maka akan terjadi ketidakkonsistenan pada table terserbut. Contoh apabila pada table Artikel, ada perubahan pada atribut “Nama Akhir” dari Basirudin Rachman, maka semua row yang dimiliki oleh Basirudin Rachman juga harus diubah jika satu row saja tidak dirubah maka akan terjadi kondisi yang disebut dengan anomali update.

2.Anomali insertion, apabila warnaislam.com menambahkan penulis baru pada table Artikel maka diharapkan penulis tersebut telah memiliki artikel yang telah ditulisnya sehingga judul artikel tersebut dapat dimasukkan pada atribut “Judul”. Tetapi bisa saja ada penulis baru yang memang belum menuliskan artikel apapun pada situs ini tetapi akan dimasukkan ke dalam daftar penulis

3.Anomali deletion, apabila sebagian informasi dari sebuah data (row) ingin dihapus, tetapi pada kenyataannya akan menghapus seluruh informasi dari data tersebut

Tidak ada komentar:

Posting Komentar