Database yang dirancang dengan benar memberi Anda akses ke informasi yang akurat dan terkini. Karena desain yang benar sangat penting untuk mencapai tujuan Anda dalam bekerja dengan database, menginvestasikan waktu yang diperlukan untuk mempelajari prinsip-prinsip desain yang baik masuk akal. Pada akhirnya, Anda jauh lebih mungkin berakhir dengan database yang memenuhi kebutuhan Anda dan dapat dengan mudah mengakomodasi perubahan.
Artikel ini menyediakan panduan untuk merencanakan database desktop. Anda akan mempelajari cara memutuskan informasi apa yang Anda perlukan, cara membagi informasi tersebut ke dalam tabel dan kolom yang sesuai, dan bagaimana tabel tersebut berhubungan satu sama lain. Anda harus membaca artikel ini sebelum membuat database desktop pertama.
Di artikel ini
Beberapa istilah database yang perlu diketahui
Access menata informasi Anda ke dalam tabel: daftar baris dan kolom yang mengingatkan pada bantalan akuntan atau lembar bentang. Dalam database sederhana, Anda mungkin hanya memiliki satu tabel. Untuk sebagian besar database, Anda memerlukan lebih dari satu database. Misalnya, Anda mungkin memiliki tabel yang menyimpan informasi tentang produk, tabel lain yang menyimpan informasi tentang pesanan, dan tabel lain dengan informasi tentang pelanggan.
Setiap baris lebih benar disebut catatan, dan setiap kolom, bidang. Catatan adalah cara yang bermakna dan konsisten untuk menggabungkan informasi tentang sesuatu. Bidang adalah item informasi tunggal — tipe item yang muncul di setiap catatan. Dalam tabel Produk, misalnya, setiap baris atau catatan akan menyimpan informasi tentang satu produk. Setiap kolom atau bidang berisi beberapa tipe informasi tentang produk tersebut, seperti nama atau harganya.
Apa itu desain database yang bagus?
Prinsip-prinsip tertentu memandu proses desain database. Prinsip pertama adalah bahwa informasi duplikat (juga disebut data berlebihan) buruk, karena itu membuang ruang dan meningkatkan kemungkinan kesalahan dan inkonsistensi. Prinsip kedua adalah bahwa kebenaran dan kelengkapan informasi adalah penting. Jika database Anda berisi informasi yang salah, setiap laporan yang mengambil informasi dari database juga akan berisi informasi yang salah. Hasilnya, keputusan apa pun yang Anda buat berdasarkan laporan tersebut kemudian akan salah disalahartikan.
Oleh karena itu, desain database yang bagus adalah:
-
Membagi informasi Anda menjadi tabel berbasis subjek untuk mengurangi data yang berlebihan.
-
Menyediakan Access dengan informasi yang diperlukan untuk menggabungkan informasi dalam tabel bersama-sama sesuai kebutuhan.
-
Membantu mendukung dan memastikan keakuratan dan integritas informasi Anda.
-
Mengakomodasi kebutuhan pemrosesan dan pelaporan data Anda.
Proses desain
Proses desain terdiri dari langkah-langkah berikut:
-
Menentukan tujuan database Anda
Ini membantu mempersiapkan Anda untuk langkah-langkah yang tersisa.
-
Menemukan dan menata informasi yang diperlukan
Kumpulkan semua tipe informasi yang mungkin ingin Anda rekam dalam database, seperti nama produk dan nomor pesanan.
-
Membagi informasi ke dalam tabel
Bagi item informasi Anda menjadi entitas atau subjek utama, seperti Produk atau Pesanan. Setiap subjek kemudian menjadi tabel.
-
Mengubah item informasi menjadi kolom
Tentukan informasi apa yang ingin Anda simpan di setiap tabel. Setiap item menjadi bidang, dan ditampilkan sebagai kolom dalam tabel. Misalnya, tabel Karyawan mungkin menyertakan bidang seperti Nama Belakang dan Tanggal Sewa.
-
Menentukan kunci utama
Pilih kunci utama setiap tabel. Kunci utama adalah kolom yang digunakan untuk mengidentifikasi setiap baris secara unik. Contohnya mungkin ID Produk atau ID Pesanan.
-
Menyiapkan hubungan tabel
Lihat setiap tabel dan putuskan bagaimana data dalam satu tabel terkait dengan data dalam tabel lain. Tambahkan bidang ke tabel atau buat tabel baru untuk mengklarifikasi hubungan, jika diperlukan.
-
Persempit desain Anda
Menganalisis desain Anda untuk kesalahan. Buat tabel dan tambahkan beberapa rekaman data sampel. Lihat apakah Anda bisa mendapatkan hasil yang Anda inginkan dari tabel Anda. Buat penyesuaian pada desain, sesuai kebutuhan.
-
Menerapkan aturan normalisasi
Terapkan aturan normalisasi data untuk melihat apakah tabel Anda disusun dengan benar. Buat penyesuaian pada tabel, sesuai kebutuhan.
Menentukan tujuan database Anda
Merupakan ide yang baik untuk menuliskan tujuan database di kertas — tujuannya, bagaimana Anda berharap untuk menggunakannya, dan siapa yang akan menggunakannya. Untuk database kecil untuk bisnis berbasis rumahan, misalnya, Anda mungkin menulis sesuatu yang sederhana seperti "Database pelanggan menyimpan daftar informasi pelanggan untuk tujuan memproduksi surat dan laporan." Jika database lebih kompleks atau digunakan oleh banyak orang, seperti yang sering terjadi dalam pengaturan perusahaan, tujuannya bisa dengan mudah berupa paragraf atau lebih dan harus menyertakan kapan dan bagaimana setiap orang akan menggunakan database. Idenya adalah memiliki pernyataan misi yang dikembangkan dengan baik yang dapat dirujuk sepanjang proses desain. Memiliki pernyataan seperti itu membantu Anda fokus pada tujuan Anda ketika Anda membuat keputusan.
Menemukan dan menata informasi yang diperlukan
Untuk menemukan dan menata informasi yang diperlukan, mulailah dengan informasi Anda yang sudah ada. Misalnya, Anda dapat merekam pesanan pembelian dalam buku besar atau menyimpan informasi pelanggan pada formulir kertas dalam lemari file. Kumpulkan dokumen tersebut dan cantumkan setiap tipe informasi yang diperlihatkan (misalnya, setiap kotak yang Anda isi pada formulir). Jika Anda tidak memiliki formulir yang sudah ada, bayangkan Anda harus mendesain formulir untuk merekam informasi pelanggan. Informasi apa yang akan Anda masukkan pada formulir? Kotak isian apa yang akan Anda buat? Identifikasi dan cantumkan setiap item ini. Misalnya, anggaplah Anda saat ini menyimpan daftar pelanggan di kartu indeks. Memeriksa kartu ini mungkin menunjukkan bahwa setiap kartu berisi nama, alamat, kota, negara bagian, kode pos, dan nomor telepon pelanggan. Setiap item ini mewakili kolom potensial dalam tabel.
Saat Anda mempersiapkan daftar ini, jangan khawatir tentang menyempurnakannya pada awalnya. Sebagai gantinya, cantumkan setiap item yang muncul dalam pikiran. Jika orang lain akan menggunakan database, tanyakan juga ide mereka. Anda dapat menyempurnakan daftar nanti.
Berikutnya, pertimbangkan tipe laporan atau surat yang mungkin ingin Anda hasilkan dari database. Misalnya, Anda mungkin ingin laporan penjualan produk memperlihatkan penjualan menurut kawasan, atau laporan ringkasan inventarisi yang memperlihatkan tingkat inventarsi produk. Anda mungkin juga ingin membuat surat formulir untuk dikirimkan kepada pelanggan yang membacakan acara penjualan atau menawarkan premium. Desain laporan dalam pikiran Anda, dan bayangkan seperti apa tampilannya. Informasi apa yang akan Anda tempatkan pada laporan? Mencantumkan setiap item. Lakukan hal yang sama untuk surat formulir dan untuk laporan lain yang Anda antisipasi untuk dibuat.
Memberikan pemikiran pada laporan dan surat yang mungkin ingin Anda buat membantu Anda mengidentifikasi item yang akan Anda perlukan dalam database Anda. Misalnya, anggaplah Anda memberi pelanggan kesempatan untuk ikut serta dalam (atau tidak) pembaruan email berkala, dan Anda ingin mencetak daftar orang-orang yang telah ikut serta. Untuk merekam informasi tersebut, Tambahkan kolom "Kirim email" ke tabel pelanggan. Untuk setiap pelanggan, Anda dapat mengatur bidang ke Ya atau Tidak.
Persyaratan untuk mengirim pesan email ke pelanggan menyarankan item lain untuk direkam. Setelah mengetahui bahwa pelanggan ingin menerima pesan email, Anda juga perlu mengetahui alamat email yang akan dikirimkan kepada mereka. Oleh karena itu Anda perlu merekam alamat email untuk setiap pelanggan.
Masuk akal untuk membuat prototipe dari setiap laporan atau daftar output dan mempertimbangkan item apa yang akan Anda perlukan untuk menghasilkan laporan. Misalnya, ketika Anda memeriksa surat formulir, beberapa hal mungkin muncul dalam pikiran Anda. Jika Anda ingin menyertakan salam yang tepat — misalnya, string "Mr.", "Mrs." atau "Ms." yang memulai salam, Anda harus membuat item salam. Juga, Anda mungkin biasanya memulai surat dengan "Dear Mr Smith", bukan "Dear. Tn. Sylvester Smith". Hal ini menunjukkan bahwa Anda biasanya ingin menyimpan nama belakang yang terpisah dari nama depan.
Poin penting untuk diingat adalah bahwa Anda harus memecah setiap bagian informasi ke dalam bagian-bagian terkecil yang berguna. Dalam kasus nama, untuk membuat nama belakang tersedia dengan mudah, Anda akan memecah nama menjadi dua bagian — Nama Depan dan Nama Belakang. Untuk mengurutkan laporan menurut nama belakang, misalnya, membantu menyimpan nama belakang pelanggan secara terpisah. Secara umum, jika Anda ingin mengurutkan, mencari, menghitung, atau melaporkan berdasarkan item informasi, Anda harus meletakkan item itu di bidangnya sendiri.
Pikirkan tentang pertanyaan yang mungkin Anda inginkan untuk dijawab oleh database. Misalnya, berapa banyak penjualan produk unggulan Anda yang Anda tutup bulan lalu? Di mana pelanggan terbaik Anda tinggal? Siapa pemasok untuk produk terlaris Anda? Mengantisipasi pertanyaan ini membantu Anda mendata item tambahan.
Setelah mengumpulkan informasi ini, Anda siap untuk langkah berikutnya.
Membadingkan informasi ke dalam tabel
Untuk membagi informasi menjadi tabel, pilih entitas utama, atau subjek. Misalnya, setelah menemukan dan menata informasi untuk database penjualan produk, daftar pendahuluan mungkin terlihat seperti ini:
Entitas utama yang ditunjukkan di sini adalah produk, pemasok, pelanggan, dan pesanan. Oleh karena itu, masuk akal untuk memulai dengan empat tabel ini: satu untuk fakta tentang produk, satu untuk fakta tentang pemasok, satu untuk fakta tentang pelanggan, dan satu untuk fakta tentang pesanan. Meskipun ini tidak melengkapi daftar, ini adalah titik awal yang baik. Anda bisa terus memperbaiki daftar ini hingga Anda memiliki desain yang berfungsi dengan baik.
Saat pertama kali meninjau daftar item pendahuluan, Anda mungkin tergoda untuk menempatkan semuanya dalam satu tabel, bukan empat item yang diperlihatkan dalam ilustrasi sebelumnya. Anda akan belajar di sini mengapa itu adalah ide yang buruk. Pertimbangkan untuk sesaat, tabel yang diperlihatkan di sini:
Dalam hal ini, setiap baris berisi informasi tentang produk dan pemasoknya. Karena Anda dapat memiliki banyak produk dari pemasok yang sama, nama pemasok dan informasi alamat harus diulang berkali-kali. Ini membuang ruang disk. Merekam informasi pemasok hanya sekali dalam tabel Pemasok terpisah, lalu menautkan tabel tersebut ke tabel Produk, adalah solusi yang jauh lebih baik.
Masalah kedua dengan desain ini muncul ketika Anda perlu mengubah informasi tentang pemasok. Misalnya, Anda perlu mengubah alamat pemasok. Karena alamat muncul di banyak tempat, Anda mungkin secara tidak sengaja mengubah alamat di satu tempat tetapi lupa untuk mengubahnya di tempat lain. Merekam alamat pemasok hanya di satu tempat yang menyelesaikan masalah.
Saat Anda mendesain database Anda, selalu coba merekam setiap fakta sekali saja. Jika Anda menemukan diri Anda mengulangi informasi yang sama di lebih dari satu tempat, seperti alamat untuk pemasok tertentu, tempatkan informasi tersebut dalam tabel terpisah.
Akhirnya, misalkan hanya ada satu produk yang disediakan oleh Coho Winery, dan Anda ingin menghapus produk, tetapi mempertahankan nama pemasok dan informasi alamat. Bagaimana Anda menghapus catatan produk tanpa kehilangan informasi pemasok juga? Anda tidak bisa. Karena setiap catatan berisi fakta tentang produk, serta fakta tentang pemasok, Anda tidak dapat menghapusnya tanpa menghapus yang lain. Untuk memisahkan fakta-fakta ini, Anda harus membagi satu tabel menjadi dua: satu tabel untuk informasi produk, dan tabel lain untuk informasi pemasok. Menghapus catatan produk harus menghapus hanya fakta tentang produk, bukan fakta tentang pemasok.
Setelah Memilih subjek yang dinyatakan oleh tabel, kolom dalam tabel tersebut hanya akan menyimpan fakta tentang subjek. Misalnya, tabel produk harus menyimpan fakta hanya tentang produk. Karena alamat pemasok adalah fakta tentang pemasok, dan bukan fakta tentang produk, itu termasuk dalam tabel pemasok.
Mengubah item informasi menjadi kolom
Untuk menentukan kolom dalam tabel, tentukan informasi apa yang perlu Anda lacak tentang subjek yang direkam dalam tabel. Misalnya, untuk tabel Pelanggan, Nama, Alamat, Kota-Negara-Zip, Kirim email, Salam dan Alamat email terdiri dari daftar awal kolom yang baik. Setiap catatan dalam tabel berisi kumpulan kolom yang sama, sehingga Anda bisa menyimpan informasi Nama, Alamat, Kota-Negara-Zip, Kirim email, Salam dan Alamat email untuk setiap catatan. Misalnya, kolom alamat berisi alamat pelanggan. Setiap catatan berisi data tentang satu pelanggan, dan bidang alamat berisi alamat untuk pelanggan tersebut.
Setelah menentukan kumpulan kolom awal untuk setiap tabel, Anda dapat lebih mempersempit kolom. Misalnya, masuk akal untuk menyimpan nama pelanggan sebagai dua kolom terpisah: nama depan dan nama belakang, sehingga Anda bisa mengurutkan, mencari, dan mengindeks hanya pada kolom tersebut. Demikian pula, alamat sebenarnya terdiri dari lima komponen, alamat, kota, negara bagian, kode pos, dan negara/kawasan terpisah, dan juga masuk akal untuk menyimpannya di kolom terpisah. Jika Anda ingin melakukan operasi pencarian, filter, atau pengurutan menurut status, misalnya, Anda memerlukan informasi status yang disimpan dalam kolom terpisah.
Anda juga harus mempertimbangkan apakah database akan menyimpan informasi yang berasal dari dalam negeri saja, atau internasional, juga. Misalnya, jika Anda berencana untuk menyimpan alamat internasional, lebih baik memiliki kolom Kawasan dan bukan Negara Bagian, karena kolom tersebut dapat mengakomodasi negara bagian domestik dan kawasan negara/kawasan lain. Demikian pula, Kode Pos lebih masuk akal daripada Kode Pos jika Anda akan menyimpan alamat internasional.
Daftar berikut ini memperlihatkan beberapa tips untuk menentukan kolom Anda.
-
Jangan sertakan data terhitung
Biasanya, Anda tidak boleh menyimpan hasil penghitungan dalam tabel. Sebagai gantinya, Anda bisa meminta Access melakukan penghitungan saat Anda ingin melihat hasilnya. Misalnya, anggaplah ada laporan Produk Sesuai Pesanan yang menampilkan subtotal unit sesuai urutan untuk setiap kategori produk dalam database. Namun, tidak ada kolom subtotal Unit Sesuai Pesanan dalam tabel apa pun. Sebagai gantinya, tabel Produk menyertakan kolom Unit Sesuai Pesanan yang menyimpan unit sesuai pesanan untuk setiap produk. Dengan data tersebut, Access menghitung subtotal setiap kali Anda mencetak laporan. Subtotal itu sendiri tidak boleh disimpan dalam tabel.
-
Menyimpan informasi di bagian logika terkecilnya
Anda mungkin tergoda untuk memiliki satu bidang untuk nama lengkap, atau untuk nama produk beserta deskripsi produk. Jika Anda menggabungkan lebih dari satu jenis informasi dalam bidang, sulit untuk mengambil fakta individual nanti. Cobalah untuk memecah informasi menjadi bagian logika; misalnya, buat bidang terpisah untuk nama depan dan belakang, atau untuk nama produk, kategori, dan deskripsi.
Setelah anda telah menyempurnakan kolom data di setiap tabel, Anda siap untuk memilih setiap kunci utama tabel.
Menentukan kunci utama
Setiap tabel harus menyertakan kolom atau sekumpulan kolom yang mengidentifikasi setiap baris yang disimpan dalam tabel secara unik. Ini seringkali merupakan nomor identifikasi unik, seperti nomor ID karyawan atau nomor seri. Dalam terminologi database, informasi ini disebut kunci utama tabel. Access menggunakan bidang kunci utama untuk mengaitkan data dengan cepat dari beberapa tabel dan menyatukan data untuk Anda.
Jika Anda sudah memiliki pengidentifikasi unik untuk tabel, seperti nomor produk yang mengidentifikasi setiap produk secara unik dalam katalog, Anda bisa menggunakan pengidentifikasi itu sebagai kunci utama tabel — tetapi hanya jika nilai di kolom ini akan selalu berbeda untuk setiap catatan. Anda tidak dapat memiliki nilai duplikat dalam kunci utama. Misalnya, jangan gunakan nama orang sebagai kunci utama, karena nama tidak unik. Anda dapat dengan mudah memiliki dua orang dengan nama yang sama dalam tabel yang sama.
Kunci utama harus selalu memiliki nilai. Jika nilai kolom dapat menjadi tidak ditetapkan atau tidak diketahui (nilai yang hilang) di beberapa titik, nilai tersebut tidak dapat digunakan sebagai komponen dalam kunci utama.
Anda harus selalu memilih kunci utama yang nilainya tidak akan berubah. Dalam database yang menggunakan lebih dari satu tabel, kunci utama tabel dapat digunakan sebagai referensi dalam tabel lain. Jika kunci utama berubah, perubahan juga harus diterapkan di mana saja kunci dirujuk. Menggunakan kunci utama yang tidak akan berubah mengurangi kemungkinan kunci utama mungkin menjadi tidak sinkron dengan tabel lain yang mereferensikannya.
Seringkali, angka unik semena-mena digunakan sebagai kunci utama. Misalnya, Anda dapat menetapkan setiap pesanan nomor pesanan yang unik. Satu-satunya tujuan nomor pesanan adalah untuk mengidentifikasi pesanan. Setelah ditetapkan, tidak pernah berubah.
Jika Anda tidak keberatan dengan kolom atau sekumpulan kolom yang mungkin menjadi kunci utama yang baik, pertimbangkan untuk menggunakan kolom yang memiliki tipe data AutoNumber. Saat Anda menggunakan tipe data AutoNumber, Access secara otomatis menetapkan nilai untuk Anda. Pengidentifikasi semacam itu tidak ada faktanya; tidak berisi informasi faktual yang menjelaskan baris yang diwakilinya. Pengidentifikasi tanpa fakta ideal untuk digunakan sebagai kunci utama karena pengidentifikasi tidak berubah. Kunci utama yang berisi fakta tentang baris — nomor telepon atau nama pelanggan, misalnya — lebih mungkin berubah, karena informasi faktual itu sendiri mungkin berubah.
1. Kolom yang diatur ke tipe data AutoNumber sering membuat kunci utama yang baik. Tidak ada dua ID produk yang sama.
Dalam beberapa kasus, Anda mungkin ingin menggunakan dua bidang atau lebih yang, bersama-sama, menyediakan kunci utama tabel. Misalnya, tabel Detail Pesanan yang menyimpan item baris untuk pesanan akan menggunakan dua kolom dalam kunci utamanya: ID Pesanan dan ID Produk. Ketika kunci utama menggunakan lebih dari satu kolom, kunci tersebut juga disebut kunci komposit.
Untuk database penjualan produk, Anda bisa membuat kolom AutoNumber untuk setiap tabel agar berfungsi sebagai kunci utama: IDProduk untuk tabel Produk, IDPesanan untuk tabel Pesanan, ID Pelanggan untuk tabel Pelanggan, dan ID Pemasok untuk tabel Pemasok.
Membuat hubungan tabel
Setelah membagi informasi menjadi tabel, Anda memerlukan cara untuk menyampulkan informasi kembali dengan cara yang bermakna. Misalnya, formulir berikut ini menyertakan informasi dari beberapa tabel.
1. Informasi di formulir ini berasal dari tabel Pelanggan...
2. ... tabel Karyawan...
3. ... tabel Pesanan...
4. ... tabel Produk...
5. ... dan tabel Detail Pesanan.
Access adalah sistem manajemen database relasionais. Dalam database relasialis, Anda membagi informasi menjadi tabel berbasis subjek yang terpisah. Lalu, gunakan hubungan tabel untuk menyampulkan informasi sesuai kebutuhan.
Membuat hubungan satu ke banyak
Pertimbangkan contoh ini: tabel Pemasok dan Produk dalam database pesanan produk. Pemasok dapat menyediakan sejumlah produk. Hal ini mengikuti bahwa untuk setiap pemasok yang diwakili dalam tabel Pemasok, dapat ada banyak produk yang diwakili dalam tabel Produk. Oleh karena itu, hubungan antara tabel Pemasok dan tabel Produk adalah hubungan satu ke banyak.
Untuk mewakili hubungan satu ke banyak dalam desain database Anda, ambil kunci utama di sisi "satu" hubungan dan tambahkan sebagai kolom atau kolom tambahan ke tabel di sisi "banyak" hubungan. Dalam hal ini, misalnya, Anda menambahkan kolom ID Pemasok dari tabel Pemasok ke tabel Produk. Access kemudian dapat menggunakan nomor ID pemasok dalam tabel Produk untuk menemukan pemasok yang tepat untuk setiap produk.
Kolom ID Pemasok dalam tabel Produk disebut kunci asing. Kunci asing adalah kunci utama tabel lain. Kolom ID Pemasok dalam tabel Produk adalah kunci asing karena juga merupakan kunci utama dalam tabel Pemasok.
Anda menyediakan dasar untuk menggabungkan tabel terkait dengan menetapkan pemasangan kunci utama dan kunci asing. Jika Anda tidak yakin tabel mana yang harus berbagi kolom umum, mengidentifikasi hubungan satu ke banyak memastikan bahwa dua tabel yang terlibat akan memerlukan kolom bersama.
Membuat hubungan banyak ke banyak
Pertimbangkan hubungan antara tabel Produk dan tabel Pesanan.
Sebuah pesanan bisa berisi lebih dari satu produk. Di sisi lain, sebuah produk bisa muncul di banyak pesanan. Karena itu, untuk tiap rekaman dalam tabel Pesanan, bisa terdapat banyak rekaman dalam tabel Produk. Dan untuk setiap catatan dalam tabel Produk, bisa ada banyak rekaman dalam tabel Pesanan. Tipe hubungan ini disebut hubungan banyak ke banyak karena untuk produk apa pun, bisa ada banyak pesanan; dan untuk pesanan apa pun, bisa ada banyak produk. Perhatikan bahwa untuk mendeteksi hubungan banyak ke banyak di antara tabel Anda, penting bagi Anda untuk mempertimbangkan kedua sisi hubungan.
Subjek dari dua tabel — pesanan dan produk — memiliki hubungan banyak ke banyak. Hal ini menyuguhkan masalah. Untuk memahami masalah, bayangkan apa yang akan terjadi jika Anda mencoba membuat hubungan antara kedua tabel dengan menambahkan bidang ID Produk ke tabel Pesanan. Untuk memiliki lebih dari satu produk per pesanan, Anda memerlukan lebih dari satu catatan dalam tabel Pesanan per pesanan. Anda akan mengulangi informasi pesanan untuk setiap baris yang berkaitan dengan satu urutan — menghasilkan desain yang tidak efisien yang dapat mengakibatkan data yang tidak akurat. Anda mengalami masalah yang sama jika Anda meletakkan bidang ID Pesanan dalam tabel Produk — Anda akan memiliki lebih dari satu catatan dalam tabel Produk untuk setiap produk. Bagaimana Anda mengatasi masalah ini?
Jawabannya adalah dengan membuat tabel ketiga, sering disebut tabel persimpangan, yang memecah hubungan banyak ke banyak menjadi dua hubungan satu ke banyak. Anda menyisipkan kunci utama dari masing-masing dua tabel ke tabel ketiga tersebut. Akibatnya, tabel ketiga merekam setiap kemunculan atau contoh hubungan.
Setiap rekaman dalam tabel Detail Pesanan mewakili satu item baris dalam urutan. Kunci utama tabel Detail Pesanan terdiri dari dua bidang — kunci asing dari tabel Pesanan dan Produk. Menggunakan bidang ID Pesanan saja tidak berfungsi sebagai kunci utama untuk tabel ini, karena satu pesanan bisa memiliki banyak item baris. ID Pesanan diulangi untuk setiap item baris dalam urutan, sehingga bidang tidak berisi nilai unik. Menggunakan bidang ID Produk saja tidak berfungsi, karena satu produk dapat muncul pada banyak pesanan yang berbeda. Namun bersama-sama, dua bidang tersebut selalu menghasilkan nilai yang unik untuk setiap catatan.
Dalam database penjualan produk, tabel Pesanan dan tabel Produk tidak terkait satu sama lain secara langsung. Sebaliknya, data terkait secara tidak langsung melalui tabel Detail Pesanan. Hubungan banyak ke banyak antara pesanan dan produk dinyatakan dalam database dengan menggunakan dua hubungan satu ke banyak:
-
Tabel Pesanan dan tabel Detail Pesanan memiliki hubungan satu ke banyak. Setiap pesanan dapat memiliki lebih dari satu item baris, tetapi setiap item baris hanya tersambung ke satu pesanan.
-
Tabel Produk dan tabel Detail Pesanan memiliki hubungan satu ke banyak. Setiap produk dapat memiliki banyak item baris yang terkait dengannya, tetapi setiap item baris hanya merujuk ke satu produk.
Dari tabel Detail Pesanan, Anda dapat menentukan semua produk pada pesanan tertentu. Anda juga dapat menentukan semua pesanan untuk produk tertentu.
Setelah menggabungkan tabel Detail Pesanan, daftar tabel dan bidang mungkin terlihat seperti ini:
Membuat hubungan satu ke satu
Tipe hubungan lainnya adalah hubungan satu ke satu. Misalnya, Anda perlu merekam beberapa informasi produk tambahan khusus yang jarang Anda perlukan atau yang hanya berlaku untuk beberapa produk. Karena Anda tidak sering membutuhkan informasi, dan karena menyimpan informasi dalam tabel Produk akan mengakibatkan ruang kosong untuk setiap produk yang tidak diterapkannya, Anda menempatkannya di tabel terpisah. Seperti tabel Produk, Anda menggunakan IDProduk sebagai kunci utama. Hubungan antara tabel tambahan ini dan tabel Produk adalah hubungan satu ke satu. Untuk setiap catatan dalam tabel Produk, ada satu rekaman yang cocok dalam tabel tambahan. Saat Anda memang mengidentifikasi hubungan tersebut, kedua tabel harus berbagi bidang yang sama.
Saat Anda mendeteksi perlunya hubungan satu ke satu dalam database Anda, pertimbangkan apakah Anda bisa meletakkan informasi dari dua tabel bersama-sama dalam satu tabel. Jika Anda tidak ingin melakukan itu karena beberapa alasan, mungkin karena itu akan menghasilkan banyak ruang kosong, daftar berikut ini memperlihatkan bagaimana Anda akan mewakili hubungan dalam desain Anda:
-
Jika kedua tabel memiliki subjek yang sama, Anda mungkin bisa menyetel hubungan dengan menggunakan kunci utama yang sama di kedua tabel.
-
Jika kedua tabel memiliki subjek yang berbeda dengan kunci utama yang berbeda, pilih salah satu tabel (salah satu tabel) dan sisipkan kunci utamanya di tabel lain sebagai kunci asing.
Menentukan hubungan antar tabel membantu Anda memastikan bahwa Anda memiliki tabel dan kolom yang tepat. Ketika hubungan satu ke satu atau satu ke banyak ada, tabel yang dilibatkan perlu berbagi kolom atau kolom umum. Ketika hubungan banyak ke banyak ada, tabel ketiga diperlukan untuk mewakili hubungan.
Menyempurnakan desain
Setelah memiliki tabel, bidang, dan hubungan yang diperlukan, Anda harus membuat dan mengisi tabel dengan data sampel dan mencoba bekerja dengan informasi: membuat kueri, menambahkan catatan baru, dan seterusnya. Melakukan ini membantu menyoroti masalah potensial — misalnya, Anda mungkin perlu menambahkan kolom yang lupa disisipkan selama fase desain, atau Mungkin ada tabel yang harus Anda pisahkan menjadi dua tabel untuk menghapus duplikasi.
Lihat apakah Anda bisa menggunakan database untuk mendapatkan jawaban yang Anda inginkan. Buat draf kasar formulir dan laporan Anda dan lihat apakah formulir dan laporan memperlihatkan data yang Anda harapkan. Cari duplikasi data yang tidak diperlukan dan, ketika Anda menemukannya, ubah desain Anda untuk menghilangkannya.
Saat mencoba database awal, Anda mungkin akan menemukan ruang untuk penyempurnaan. Berikut adalah beberapa hal untuk diperiksa:
-
Apakah Anda lupa kolom apa pun? Jika demikian, apakah informasi tersebut termasuk dalam tabel yang sudah ada? Jika ini adalah informasi tentang hal lain, Anda mungkin perlu membuat tabel lain. Buat kolom untuk setiap item informasi yang perlu Anda lacak. Jika informasi tidak dapat dihitung dari kolom lain, kemungkinan Anda akan memerlukan kolom baru untuk kolom tersebut.
-
Apakah kolom apa pun tidak diperlukan karena kolom dapat dihitung dari bidang yang sudah ada? Jika item informasi dapat dihitung dari kolom lain yang sudah ada — harga diskon yang dihitung dari harga eceran, misalnya — biasanya lebih baik untuk melakukan hal itu, dan menghindari pembuatan kolom baru.
-
Apakah Anda berulang kali memasukkan informasi duplikat di salah satu tabel? Jika demikian, Anda mungkin perlu membagi tabel menjadi dua tabel yang memiliki hubungan satu ke banyak.
-
Apakah Anda memiliki tabel dengan banyak bidang, jumlah rekaman terbatas, dan banyak bidang kosong dalam catatan individual? Jika demikian, pikirkan tentang mendesain ulang tabel sehingga memiliki lebih sedikit bidang dan rekaman lainnya.
-
Apakah setiap item informasi telah dipecah menjadi bagian terkecil yang berguna? Jika Anda perlu melaporkan, mengurutkan, mencari, atau menghitung item informasi, letakkan item tersebut di kolomnya sendiri.
-
Apakah setiap kolom berisi fakta tentang subjek tabel? Jika kolom tidak berisi informasi tentang subjek tabel, kolom tersebut berada dalam tabel berbeda.
-
Apakah semua hubungan antar tabel diwakili, baik menurut bidang umum atau menurut tabel ketiga? Hubungan satu ke satu dan satu ke-banyak memerlukan kolom umum. Hubungan banyak ke banyak memerlukan tabel ketiga.
Menyempurnakan tabel Produk
Anggaplah bahwa setiap produk dalam database penjualan produk termasuk dalam kategori umum, seperti minuman, bumbu, atau makanan laut. Tabel Produk dapat menyertakan bidang yang memperlihatkan kategori setiap produk.
Misalnya setelah memeriksa dan menyempurnakan desain database, Anda memutuskan untuk menyimpan deskripsi kategori beserta namanya. Jika Anda menambahkan bidang Deskripsi Kategori ke tabel Produk, Anda harus mengulangi setiap deskripsi kategori untuk setiap produk yang termasuk dalam kategori — ini bukan solusi yang baik.
Solusi yang lebih baik adalah membuat Kategori menjadi subjek baru bagi database untuk dilacak, dengan tabelnya sendiri dan kunci utamanya sendiri. Anda kemudian dapat menambahkan kunci utama dari tabel Kategori ke tabel Produk sebagai kunci asing.
Tabel Kategori dan Produk memiliki hubungan satu ke banyak: kategori dapat menyertakan lebih dari satu produk, tetapi produk hanya dapat termasuk dalam satu kategori.
Saat Anda meninjau struktur tabel Anda, waspadai grup berulang. Misalnya, pertimbangkan tabel yang berisi kolom berikut:
-
Product ID
-
Nama
-
ID Produk1
-
Name1
-
ID Produk2
-
Nama2
-
ID Produk3
-
Name3
Di sini, setiap produk adalah grup kolom berulang yang berbeda dari yang lain hanya dengan menambahkan angka ke akhir nama kolom. Ketika melihat kolom bernomor seperti ini, Anda harus mengunjungi kembali desain Anda.
Desain seperti itu memiliki beberapa kelemahan. Sebagai permulaan, ini memaksa Anda untuk menempatkan batas atas pada jumlah produk. Segera setelah melampaui batas tersebut, Anda harus menambahkan sekelompok kolom baru ke struktur tabel, yang merupakan tugas administratif utama.
Masalah lain adalah bahwa pemasok yang memiliki lebih sedikit dari jumlah maksimum produk akan membuang beberapa ruang, karena kolom tambahan akan kosong. Kelemahan yang paling serius dengan desain seperti itu adalah membuat banyak tugas sulit dilakukan, seperti mengurutkan atau mengindeks tabel berdasarkan ID produk atau nama.
Setiap kali Anda melihat grup berulang meninjau desain dengan cermat dengan mata memisahkan tabel menjadi dua. Dalam contoh di atas lebih baik menggunakan dua tabel, satu untuk pemasok dan satu untuk produk, ditautkan oleh ID pemasok.
Menerapkan aturan normalisasi
Anda bisa menerapkan aturan normalisasi data (terkadang hanya disebut aturan normalisasi) sebagai langkah berikutnya dalam desain Anda. Gunakan aturan ini untuk melihat apakah tabel Anda disusun dengan benar. Proses penerapan aturan ke desain database Anda disebut menormalkan database, atau hanya normalisasi.
Normalisasi paling berguna setelah Anda mewakili semua item informasi dan telah sampai pada desain pendahuluan. Idenya adalah untuk membantu Anda memastikan bahwa Anda telah membagi item informasi Anda ke dalam tabel yang sesuai. Normalisasi apa yang tidak bisa dilakukan adalah memastikan bahwa Anda memiliki semua item data yang benar untuk dimulai.
Anda menerapkan aturan secara berurut, pada setiap langkah memastikan bahwa desain Anda tiba di salah satu dari apa yang dikenal sebagai "formulir normal." Lima bentuk normal diterima secara luas — bentuk normal pertama melalui bentuk normal kelima. Artikel ini diperluas di tiga pertama, karena semuanya diperlukan untuk sebagian besar desain database.
Formulir normal pertama
Formulir normal pertama menyatakan bahwa pada setiap irisan baris dan kolom dalam tabel di sana, ada nilai tunggal, dan tidak pernah ada daftar nilai. Misalnya, Anda tidak dapat memiliki bidang bernama Harga di mana Anda menempatkan lebih dari satu Harga. Jika Anda menganggap setiap irisan baris dan kolom sebagai sel, setiap sel hanya bisa menampung satu nilai.
Formulir normal kedua
Formulir normal kedua mengharuskan setiap kolom non-kunci sepenuhnya bergantung pada seluruh kunci utama, bukan hanya sebagian kunci. Aturan ini berlaku ketika Anda memiliki kunci utama yang terdiri dari lebih dari satu kolom. Misalnya, anggaplah Anda memiliki tabel yang berisi kolom berikut ini, di mana ID Pesanan dan ID Produk membentuk kunci utama:
-
ID Pesanan (kunci utama)
-
ID produk (kunci utama)
-
Nama Produk
Desain ini melanggar formulir normal kedua, karena Nama Produk bergantung pada ID Produk, tetapi tidak pada ID Pesanan, sehingga tidak bergantung pada seluruh kunci utama. Anda harus menghapus Nama Produk dari tabel. Ini termasuk dalam tabel yang berbeda (Produk).
Formulir normal ketiga
Formulir normal ketiga mengharuskan agar tidak hanya setiap kolom non-kunci yang bergantung pada seluruh kunci utama, tetapi kolom non-kunci tidak terpisah satu sama lain.
Cara lain untuk mengatakan ini adalah bahwa setiap kolom non-kunci harus bergantung pada kunci utama dan tidak ada selain kunci utama. Misalnya, anggaplah Anda memiliki tabel yang berisi kolom berikut ini:
-
PRODUCTID (kunci utama)
-
Nama
-
SRP
-
Discount
Asumsikan bahwa Diskon tergantung pada harga eceran yang disarankan (SRP). Tabel ini melanggar formulir normal ketiga karena kolom non-kunci, Diskon, bergantung pada kolom non-kunci lainnya, SRP. Independensi kolom berarti Anda harus bisa mengubah kolom non-kunci apa pun tanpa memengaruhi kolom lain. Jika Anda mengubah nilai dalam bidang SRP, Diskon akan berubah sesuai keinginan, sehingga melanggar aturan tersebut. Dalam hal ini Diskon harus dipindahkan ke tabel lain yang ditujukan pada SRP.