Database yang dirancang dengan benar memberi Anda akses ke informasi terkini dan akurat. 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 untuk berakhir dengan database yang memenuhi kebutuhan Anda dan dapat dengan mudah mengakomodasi perubahan.
Artikel ini memberikan panduan untuk merencanakan database desktop. Anda akan belajar bagaimana memutuskan informasi apa yang Anda butuhkan, cara membagi informasi itu ke dalam tabel dan kolom yang sesuai, dan bagaimana tabel itu berhubungan satu sama lain. Anda harus membaca artikel ini sebelum membuat database desktop pertama Anda.
Di artikel ini
- Beberapa istilah database yang perlu diketahui
- Apa itu desain database yang baik?
- Proses desain
- Menentukan tujuan database Anda
- Menemukan dan menyusun informasi yang diperlukan
- Membagi informasi ke dalam tabel
- Mengubah item informasi menjadi kolom
- Menentukan kunci primer
- Membuat hubungan tabel
- Menyempurnakan desain
- Menerapkan aturan normalisasi
Beberapa istilah database yang perlu diketahui
Access mengatur informasi Anda ke dalam tabel: daftar baris dan kolom yang mengingatkan pada pad akuntan atau lembar bentang. Dalam database sederhana, Anda mungkin hanya memiliki satu tabel. Untuk sebagian besar database, Anda memerlukan lebih dari satu. 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 tepat disebut rekaman, dan setiap kolom, bidang. Catatan adalah cara yang bermakna dan konsisten untuk menggabungkan informasi tentang sesuatu. Bidang adalah satu item informasi — jenis item yang muncul di setiap catatan. Dalam tabel Produk, misalnya, setiap baris atau rekaman akan memuat informasi tentang satu produk. Setiap kolom atau bidang memuat beberapa jenis informasi tentang produk tersebut, seperti nama atau harganya.
Apa itu desain database yang baik?
Prinsip-prinsip tertentu memandu proses desain database. Prinsip pertama adalah bahwa informasi duplikat (juga disebut data yang berlebihan) itu buruk, karena membuang-buang ruang dan meningkatkan kemungkinan kesalahan dan inkonsistensi. Prinsip kedua adalah bahwa kebenaran dan kelengkapan informasi itu penting. Jika database Anda berisi informasi yang salah, setiap laporan yang menarik informasi dari database juga akan berisi informasi yang salah. Akibatnya, setiap keputusan yang Anda buat yang didasarkan pada laporan tersebut akan disalahinformasikan.
Oleh karena itu, desain database yang baik adalah desain yang:
- Membagi informasi Anda ke dalam tabel berbasis subjek untuk mengurangi data yang berlebihan.
- Menyediakan Akses dengan informasi yang diperlukan untuk menggabungkan informasi dalam tabel 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:
-
Tentukan tujuan database Anda
Ini membantu mempersiapkan Anda untuk langkah-langkah lainnya. -
Temukan dan atur informasi yang diperlukan
Kumpulkan semua tipe informasi yang mungkin ingin Anda catat dalam database, seperti nama produk dan nomor pesanan. -
Bagi 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 Perekrutan. -
Tentukan kunci primer
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. -
Sempurnakan desain Anda
Menganalisis desain Anda dari kesalahan. Buat tabel dan tambahkan beberapa catatan data sampel. Lihat apakah Anda bisa mendapatkan hasil yang diinginkan dari tabel Anda. Lakukan penyesuaian pada desain, sesuai kebutuhan. -
Menerapkan aturan normalisasi
Terapkan aturan normalisasi data untuk melihat apakah tabel Anda terstruktur dengan benar. Lakukan penyesuaian pada tabel sesuai kebutuhan.
Menentukan tujuan database Anda
Sebaiknya tuliskan tujuan database di atas kertas — tujuannya, bagaimana Anda berharap menggunakannya, dan siapa yang akan menggunakannya. Untuk database kecil untuk bisnis rumahan, misalnya, Anda dapat menulis sesuatu yang sederhana seperti "Database pelanggan menyimpan daftar informasi pelanggan untuk tujuan menghasilkan surat dan laporan." Jika database lebih kompleks atau digunakan oleh banyak orang, seperti yang sering terjadi dalam pengaturan perusahaan, tujuannya dapat dengan mudah berupa satu paragraf atau lebih dan harus mencakup kapan dan bagaimana setiap orang akan menggunakan database tersebut. Idenya adalah untuk memiliki pernyataan misi yang dikembangkan dengan baik yang dapat dirujuk selama proses desain. Memiliki pernyataan seperti itu membantu Anda fokus pada tujuan Anda ketika membuat keputusan.
Menemukan dan menyusun informasi yang diperlukan
Untuk menemukan dan mengatur informasi yang diperlukan, mulai dengan informasi yang sudah ada. Misalnya, Anda dapat mencatat pesanan pembelian dalam buku besar atau menyimpan informasi pelanggan pada formulir kertas di lemari arsip. Kumpulkan dokumen tersebut dan cantumkan setiap tipe informasi yang ditampilkan (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 pengisi apa yang akan Anda buat? Identifikasi dan cantumkan masing-masing item ini. Sebagai contoh, misalnya saat ini Anda menyimpan daftar pelanggan di kartu indeks. Memeriksa kartu ini mungkin menunjukkan bahwa setiap kartu memiliki nama, alamat, kota, negara bagian, kode pos, dan nomor telepon pelanggan. Masing-masing item ini mewakili kolom potensial dalam tabel.
Saat Anda mempersiapkan daftar ini, jangan khawatir untuk membuatnya sempurna pada awalnya. Sebagai gantinya, cantumkan setiap item yang terlintas dalam pikiran. Jika orang lain akan menggunakan database tersebut, mintalah ide mereka juga. Anda dapat menyempurnakan daftar nanti.
Berikutnya, pertimbangkan jenis laporan atau surat yang mungkin ingin Anda hasilkan dari database. Misalnya, Anda mungkin ingin laporan penjualan produk menampilkan penjualan berdasarkan wilayah, atau laporan ringkasan inventaris yang menunjukkan tingkat inventaris produk. Anda mungkin juga ingin membuat surat formulir untuk dikirim kepada pelanggan yang mengumumkan acara penjualan atau menawarkan premium. Rancang laporan dalam pikiran Anda, dan bayangkan seperti apa tampilannya. Informasi apa yang akan Anda tempatkan di laporan? Cantumkan setiap item. Lakukan hal yang sama untuk surat formulir dan untuk laporan lain yang Anda perkirakan akan dibuat.
Memikirkan laporan dan surat yang mungkin ingin Anda buat akan membantu Anda mengidentifikasi item yang diperlukan dalam database. Misalnya, Anda memberi pelanggan kesempatan untuk ikut serta (atau tidak serta) pembaruan email berkala, dan Anda ingin mencetak daftar 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 kepada pelanggan menyarankan item lain untuk direkam. Setelah Anda mengetahui bahwa pelanggan ingin menerima pesan email, Anda juga perlu mengetahui alamat email yang harus dikiriminya. Oleh karena itu, Anda perlu mencatat alamat email untuk setiap pelanggan.
Masuk akal untuk membangun prototipe dari setiap laporan atau daftar keluaran dan mempertimbangkan item apa yang Anda perlukan untuk menghasilkan laporan. Misalnya, ketika Anda memeriksa surat formulir, beberapa hal mungkin terlintas di benak Anda. Jika Anda ingin menyertakan salam yang tepat — misalnya, string "Mr.", "Mrs." atau "Ms." yang memulai salam, Anda harus membuat item salam. Selain itu, Anda biasanya memulai surat dengan "Dear Mr. Smith", bukan "Dear. Tuan Sylvester Smith". Hal ini menunjukkan bahwa Anda biasanya ingin menyimpan nama belakang terpisah dari nama depan.
Poin penting yang perlu diingat adalah bahwa Anda harus membagi setiap informasi menjadi bagian-bagian terkecil yang berguna. Dalam kasus nama, untuk membuat nama belakang tersedia, Anda akan membagi nama menjadi dua bagian — Nama Depan dan Nama Belakang. Untuk mengurutkan laporan berdasarkan nama belakang, misalnya, akan berguna jika nama belakang pelanggan disimpan secara terpisah. Secara umum, jika Anda ingin mengurutkan, mencari, menghitung, atau melaporkan berdasarkan item informasi, Anda harus meletakkan item tersebut di bidangnya sendiri.
Pikirkan tentang pertanyaan yang mungkin Anda inginkan untuk dijawab oleh database. Misalnya, berapa banyak penjualan produk unggulan yang Anda tutup bulan lalu? Di mana pelanggan terbaik Anda tinggal? Siapa pemasok produk terlaris Anda? Mengantisipasi pertanyaan ini membantu Anda memusatkan perhatian pada item tambahan untuk direkam.
Setelah mengumpulkan informasi ini, Anda siap untuk langkah berikutnya.
Membagi informasi ke dalam tabel
Untuk membagi informasi ke dalam tabel, pilih entitas utama, atau subjek. Misalnya, setelah menemukan dan mengatur informasi untuk database penjualan produk, daftar awal mungkin terlihat seperti ini:
Entitas utama yang ditampilkan 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 dapat terus menyempurnakan daftar ini hingga memiliki desain yang berfungsi dengan baik.
Ketika pertama kali meninjau daftar item awal, Anda mungkin tergoda untuk meletakkan semuanya dalam satu tabel, bukan empat yang diperlihatkan pada ilustrasi sebelumnya. Anda akan belajar di sini mengapa itu adalah ide yang buruk. Pertimbangkan sejenak, tabel yang ditampilkan di sini:
Dalam hal ini, setiap baris berisi informasi tentang produk dan pemasoknya. Karena Anda dapat memiliki banyak produk dari pemasok yang sama, informasi nama dan alamat pemasok harus diulang berkali-kali. Ini membuang-buang ruang disk. Mencatat informasi pemasok hanya sekali dalam tabel Pemasok terpisah, lalu menautkan tabel itu ke tabel Produk, adalah solusi yang jauh lebih baik.
Masalah kedua dengan desain ini muncul ketika Anda perlu memodifikasi informasi tentang pemasok. Misalnya, Anda perlu mengubah alamat pemasok. Karena muncul di banyak tempat, Anda mungkin tidak sengaja mengubah alamat di satu tempat tetapi lupa mengubahnya di tempat lain. Mencatat alamat pemasok hanya di satu tempat akan menyelesaikan masalah.
Saat Anda mendesain database, selalu coba untuk merekam setiap fakta hanya sekali. Jika Anda menemukan diri Anda mengulangi informasi yang sama di lebih dari satu tempat, seperti alamat pemasok tertentu, tempatkan informasi tersebut di tabel terpisah.
Terakhir, misalkan hanya ada satu produk yang disediakan oleh Coho Winery, dan Anda ingin menghapus produk tersebut, tetapi tetap pertahankan informasi nama dan alamat pemasok. Bagaimana Anda menghapus catatan produk tanpa kehilangan informasi pemasok? Anda tidak bisa. Karena setiap catatan berisi fakta tentang suatu produk, serta fakta tentang pemasok, Anda tidak dapat menghapus satu tanpa menghapus yang lainnya. 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 hanya akan menghapus fakta tentang produk, bukan fakta tentang pemasok.
Setelah Anda memilih subjek yang diwakili oleh tabel, kolom dalam tabel tersebut hanya akan menyimpan fakta tentang subjek tersebut. Misalnya, tabel produk hanya boleh menyimpan fakta 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, putuskan informasi apa yang perlu Anda lacak tentang subjek yang tercatat dalam tabel. Misalnya, untuk tabel Pelanggan, Nama, Alamat, Kota-Negara Bagian-Zip, Kirim e-mail, Salam, dan Alamat email terdiri dari daftar kolom awal yang baik. Setiap catatan dalam tabel berisi kumpulan kolom yang sama, sehingga Anda dapat menyimpan informasi Nama, Alamat, Kota-Negara Bagian-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 pelanggan tersebut.
Setelah menentukan kumpulan kolom awal untuk setiap tabel, Anda dapat menyempurnakan kolom tersebut lebih lanjut. Misalnya, masuk akal untuk menyimpan nama pelanggan sebagai dua kolom terpisah: nama depan dan nama belakang, sehingga Anda dapat mengurutkan, mencari, dan mengindeks hanya pada kolom tersebut. Demikian pula, alamat sebenarnya terdiri dari lima komponen terpisah, alamat, kota, negara bagian, kode pos, dan negara/kawasan, dan juga masuk akal untuk menyimpannya di kolom terpisah. Jika Anda ingin melakukan operasi pencarian, memfilter, atau mengurutkan berdasarkan status, misalnya, informasi status harus disimpan di kolom terpisah.
Anda juga harus mempertimbangkan apakah database akan menyimpan informasi yang hanya berasal dari dalam negeri, atau internasional, juga. Misalnya, jika Anda berencana untuk menyimpan alamat internasional, lebih baik memiliki kolom Wilayah daripada Negara Bagian, karena kolom semacam itu dapat mengakomodasi negara bagian domestik dan wilayah negara/wilayah 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 dapat meminta Access melakukan penghitungan saat ingin melihat hasilnya. Sebagai contoh, misalnya terdapat laporan Produk Sesuai Pesanan yang menampilkan subtotal unit sesuai pesanan untuk setiap kategori produk dalam database. Namun, tidak ada kolom subtotal Units On Order dalam tabel apa pun. Sebagai gantinya, tabel Produk menyertakan kolom Unit Sesuai Pesanan yang menyimpan unit sesuai pesanan untuk setiap produk. Dengan menggunakan data tersebut, Access menghitung subtotal setiap kali Anda mencetak laporan. Subtotal itu sendiri tidak boleh disimpan dalam tabel. -
Menyimpan informasi dalam bagian logis terkecil
Anda mungkin tergoda untuk memiliki satu bidang untuk nama lengkap, atau untuk nama produk bersama dengan deskripsi produk. Jika Anda menggabungkan lebih dari satu jenis informasi dalam satu bidang, akan sulit untuk mengambil fakta individu nanti. Cobalah untuk memecah informasi menjadi beberapa bagian logis; Misalnya, buat bidang terpisah untuk nama depan dan belakang, atau untuk nama produk, kategori, dan deskripsi.
Setelah menyempurnakan kolom data di setiap tabel, Anda siap untuk memilih kunci utama setiap tabel.
Menentukan kunci primer
Setiap tabel harus menyertakan kolom atau kumpulan kolom yang mengidentifikasi setiap baris yang disimpan dalam tabel secara unik. Ini sering kali 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 dari beberapa tabel dengan cepat dan menyatukan data untuk Anda.
Jika sudah memiliki pengidentifikasi unik untuk tabel, seperti nomor produk yang mengidentifikasi setiap produk dalam katalog secara unik, Anda dapat menggunakan pengidentifikasi tersebut sebagai kunci utama tabel — tetapi hanya jika nilai dalam kolom ini akan selalu berbeda untuk setiap catatan. Anda tidak dapat memiliki nilai duplikat dalam kunci primer. Misalnya, jangan gunakan nama orang sebagai kunci primer, karena nama tidak unik. Anda dapat dengan mudah memiliki dua orang dengan nama yang sama dalam tabel yang sama.
Kunci primer harus selalu memiliki nilai. Jika nilai kolom dapat menjadi tidak ditetapkan atau tidak diketahui (nilai yang hilang) di beberapa titik, nilai kolom tidak dapat digunakan sebagai komponen dalam kunci primer.
Anda harus selalu memilih kunci primer yang nilainya tidak akan berubah. Dalam database yang menggunakan lebih dari satu tabel, kunci primer tabel dapat digunakan sebagai referensi di tabel lain. Jika kunci primer berubah, perubahan juga harus diterapkan di mana pun kunci direferensikan. Menggunakan kunci primer yang tidak akan berubah mengurangi kemungkinan kunci primer menjadi tidak sinkron dengan tabel lain yang mereferensikannya.
Seringkali, nomor unik arbitrer digunakan sebagai kunci utama. Misalnya, Anda dapat menetapkan nomor pesanan unik untuk setiap pesanan. Satu-satunya tujuan nomor pesanan adalah untuk mengidentifikasi pesanan. Setelah ditetapkan, aplikasi tidak akan pernah berubah.
Jika Anda tidak memikirkan kolom atau kumpulan kolom yang mungkin merupakan kunci primer 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 seperti itu tidak berfakta; Ini tidak berisi informasi faktual yang menjelaskan baris yang diwakilinya. Pengidentifikasi tanpa fakta ideal untuk digunakan sebagai kunci utama karena tidak berubah. Kunci primer yang berisi fakta tentang perselisihan — 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 kali merupakan kunci primer 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 di kunci utamanya: ID Pesanan dan ID Produk. Ketika kunci primer menggunakan lebih dari satu kolom, kunci ini juga disebut kunci komposit.
Untuk database penjualan produk, Anda dapat membuat kolom AutoNumber untuk setiap tabel untuk berfungsi sebagai kunci utama: ProductID untuk tabel Produk, OrderID untuk tabel Pesanan, CustomerID untuk tabel Pelanggan, dan SupplierID untuk tabel Pemasok.
Membuat hubungan tabel
Setelah membagi informasi ke dalam tabel, Anda memerlukan cara untuk menyatukan informasi lagi dengan cara yang bermakna. Misalnya, formulir berikut menyertakan informasi dari beberapa tabel.
1. Informasi dalam 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 relasional. Dalam database relasional, Anda membagi informasi Anda menjadi tabel terpisah berbasis subjek. Anda kemudian menggunakan hubungan tabel untuk menyatukan informasi sesuai kebutuhan.
Membuat hubungan satu ke banyak
Pertimbangkan contoh ini: tabel Pemasok dan Produk dalam database pesanan produk. Pemasok dapat memasok sejumlah produk. Oleh karena itu, untuk setiap pemasok yang terwakili dalam tabel Pemasok, mungkin ada banyak produk yang terwakili 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 primer di sisi "satu" hubungan dan tambahkan sebagai kolom atau kolom tambahan ke tabel di sisi "banyak" hubungan. Dalam kasus ini, misalnya, Anda menambahkan kolom ID Pemasok dari tabel Pemasok ke tabel Produk. Access kemudian dapat menggunakan nomor ID pemasok di 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 membuat pemasangan kunci primer dan kunci asing. Jika Anda tidak yakin tabel mana yang harus berbagi kolom yang sama, mengidentifikasi hubungan satu ke banyak memastikan bahwa dua tabel yang terlibat memang 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, dapat ada banyak catatan di tabel Pesanan. Jenis 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 untuk mempertimbangkan kedua sisi hubungan.
Subjek dari dua tabel — pesanan dan produk — memiliki hubungan banyak ke banyak. Ini menimbulkan masalah. Untuk memahami masalahnya, bayangkan apa yang akan terjadi jika Anda mencoba membuat hubungan antara dua 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 berhubungan dengan satu pesanan — menghasilkan desain yang tidak efisien yang dapat menyebabkan data tidak akurat. Anda mengalami masalah yang sama jika memasukkan bidang ID Pesanan di tabel Produk — Anda akan memiliki lebih dari satu catatan di tabel Produk untuk setiap produk. Bagaimana Anda mengatasi masalah ini?
Jawabannya adalah 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 mencatat setiap kejadian atau contoh hubungan.
Setiap catatan dalam tabel Detail Pesanan mewakili satu item baris pada pesanan. 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 dapat memiliki banyak item baris. ID Pesanan diulang untuk setiap item baris pada pesanan, sehingga bidang tidak berisi nilai unik. Menggunakan bidang ID Produk saja juga tidak berfungsi, karena satu produk dapat muncul pada banyak pesanan yang berbeda. Namun bersama-sama, kedua bidang tersebut selalu menghasilkan nilai unik untuk setiap rekaman.
Dalam database penjualan produk, tabel Pesanan dan tabel Produk tidak terkait satu sama lain secara langsung. Sebaliknya, mereka terkait secara tidak langsung melalui tabel Detail Pesanan. Hubungan banyak ke banyak antara pesanan dan produk direpresentasikan 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
Jenis hubungan lainnya adalah hubungan satu-ke-satu. Misalnya, Anda perlu mencatat 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 menghasilkan ruang kosong untuk setiap produk yang tidak berlaku, Anda meletakkannya di tabel terpisah. Seperti tabel Produk, Anda menggunakan ProductID sebagai kunci utama. Hubungan antara tabel tambahan ini dan tabel Produk adalah hubungan satu-ke-satu. Untuk setiap catatan dalam tabel Produk, ada satu catatan pencocokan dalam tabel tambahan. Saat Anda memang mengidentifikasi hubungan tersebut, kedua tabel harus berbagi bidang yang sama.
Ketika Anda mendeteksi kebutuhan akan hubungan satu lawan satu dalam database Anda, pertimbangkan apakah Anda dapat menyatukan informasi dari dua tabel dalam satu tabel. Jika Anda tidak ingin melakukannya karena alasan tertentu, mungkin karena akan menghasilkan banyak ruang kosong, daftar berikut menunjukkan bagaimana Anda akan mewakili hubungan dalam desain Anda:
- Jika kedua tabel memiliki subjek yang sama, Anda mungkin dapat mengatur hubungan dengan menggunakan kunci primer yang sama di kedua tabel.
- Jika kedua tabel memiliki subjek yang berbeda dengan kunci primer yang berbeda, pilih salah satu tabel (salah satu) dan masukkan kunci primernya di tabel lain sebagai kunci asing.
Menentukan hubungan antar tabel membantu Anda memastikan bahwa Anda memiliki tabel dan kolom yang tepat. Ketika ada hubungan satu lawan satu atau satu ke banyak, tabel yang terlibat perlu berbagi kolom atau kolom yang sama. Ketika ada hubungan banyak ke banyak, tabel ketiga diperlukan untuk mewakili hubungan tersebut.
Menyempurnakan desain
Setelah memiliki tabel, bidang, dan hubungan yang Anda butuhkan, Anda harus membuat dan mengisi tabel dengan data sampel dan mencoba bekerja dengan informasi: membuat kueri, menambahkan catatan baru, dan sebagainya. Melakukan hal ini akan membantu menyoroti potensi masalah — misalnya, Anda mungkin perlu menambahkan kolom yang lupa disisipkan selama fase desain, atau Anda mungkin memiliki tabel yang harus dibagi menjadi dua tabel untuk menghapus duplikasi.
Lihat apakah Anda dapat menggunakan database untuk mendapatkan jawaban yang diinginkan. Buat draf kasar formulir dan laporan Anda, lalu lihat apakah formulir tersebut menampilkan data yang Anda harapkan. Cari duplikasi data yang tidak perlu dan, jika Anda menemukannya, ubah desain Anda untuk menghilangkannya.
Saat Anda mencoba database awal Anda, Anda mungkin akan menemukan ruang untuk perbaikan. Berikut adalah beberapa hal yang perlu diperiksa:
- Apakah Anda lupa kolom? Jika demikian, apakah informasi tersebut termasuk dalam tabel yang sudah ada? Jika 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 memerlukan kolom baru untuk informasi tersebut.
- Apakah ada kolom yang tidak diperlukan karena dapat dihitung dari bidang yang sudah ada? Jika item informasi dapat dihitung dari kolom lain yang ada — harga diskon yang dihitung dari harga eceran, misalnya — biasanya lebih baik 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 catatan yang terbatas, dan banyak bidang kosong dalam catatan individu? Jika demikian, pertimbangkan untuk mendesain ulang tabel agar memiliki lebih sedikit bidang dan lebih banyak catatan.
- Apakah setiap item informasi telah dipecah menjadi bagian-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 sebuah kolom tidak berisi informasi tentang subjek tabel, kolom akan berada dalam tabel yang berbeda.
- Apakah semua hubungan antar tabel diwakili, baik oleh bidang umum maupun oleh tabel ketiga? Hubungan satu lawan satu dan satu-ke-banyak memerlukan kolom umum. Hubungan banyak ke banyak memerlukan tabel ketiga.
Menyempurnakan tabel Produk
Misalkan 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.
Misalkan setelah memeriksa dan menyempurnakan desain database, Anda memutuskan untuk menyimpan deskripsi kategori beserta namanya. Jika 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 menjadikan Kategori sebagai subjek baru untuk dilacak database, dengan tabel dan kunci utamanya sendiri. Anda kemudian dapat menambahkan kunci primer dari tabel Kategori ke tabel Produk sebagai kunci asing.
Tabel Kategori dan Produk memiliki hubungan satu ke banyak: satu kategori dapat mencakup lebih dari satu produk, tetapi produk hanya dapat termasuk dalam satu kategori.
Saat meninjau struktur tabel Anda, waspadai grup berulang. Misalnya, pertimbangkan tabel yang berisi kolom berikut:
- Product ID
- Nama
- ID Produk1
- Nama1
- ID Produk 2
- Nama2
- ID Produk3
- Nama3
Dalam kasus ini, setiap produk adalah kelompok kolom berulang yang berbeda dari yang lain hanya dengan menambahkan angka di akhir nama kolom. Jika Anda melihat kolom bernomor seperti ini, Anda harus meninjau kembali desain Anda.
Desain seperti itu memiliki beberapa kekurangan. Sebagai permulaan, ini memaksa Anda untuk menempatkan batas atas jumlah produk. Segera setelah melebihi batas tersebut, Anda harus menambahkan grup kolom baru ke struktur tabel, yang merupakan tugas administratif utama.
Masalah lain adalah bahwa pemasok yang memiliki lebih sedikit dari jumlah produk maksimum akan membuang ruang, karena kolom tambahan akan kosong. Kekurangan paling serius dengan desain semacam itu adalah membuat banyak tugas sulit dilakukan, seperti mengurutkan atau mengindeks tabel berdasarkan ID atau nama produk.
Setiap kali Anda melihat kelompok berulang, tinjau desain dengan cermat dengan tujuan untuk membagi tabel menjadi dua. Dalam contoh di atas, lebih baik menggunakan dua tabel, satu untuk pemasok dan satu untuk produk, yang ditautkan oleh ID pemasok.
Menerapkan aturan normalisasi
Anda dapat menerapkan aturan normalisasi data (terkadang hanya disebut aturan normalisasi) sebagai langkah berikutnya dalam desain Anda. Anda menggunakan aturan ini untuk melihat apakah tabel Anda terstruktur dengan benar. Proses penerapan aturan pada desain database Anda disebut menormalkan database, atau hanya normalisasi.
Normalisasi paling berguna setelah Anda mewakili semua item informasi dan sampai pada desain awal. Idenya adalah untuk membantu Anda memastikan bahwa Anda telah membagi item informasi Anda ke dalam tabel yang sesuai. Apa yang tidak dapat dilakukan normalisasi adalah memastikan bahwa Anda memiliki semua item data yang benar untuk memulainya.
Anda menerapkan aturan secara berurutan, pada setiap langkah memastikan bahwa desain Anda sampai pada salah satu yang dikenal sebagai "bentuk normal." Lima bentuk normal diterima secara luas - bentuk normal pertama hingga bentuk normal kelima. Artikel ini memperluas tiga yang pertama, karena hanya itu yang diperlukan untuk sebagian besar desain database.
Bentuk normal pertama
Formulir normal pertama menyatakan bahwa di setiap persimpangan baris dan kolom dalam tabel, ada satu nilai, 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 persimpangan baris dan kolom sebagai sebuah sel, setiap sel hanya dapat menampung satu nilai.
Bentuk normal kedua
Bentuk normal kedua mengharuskan setiap kolom non-kunci sepenuhnya bergantung pada seluruh kunci primer, bukan hanya pada sebagian kunci. Aturan ini berlaku jika Anda memiliki kunci primer yang terdiri dari lebih dari satu kolom. Sebagai contoh, misalnya Anda memiliki tabel yang berisi kolom berikut, di mana ID Pesanan dan ID Produk merupakan kunci utama:
- ID Pesanan (kunci utama)
- ID produk (kunci utama)
- Nama Produk
Desain ini melanggar bentuk normal kedua, karena Nama Produk bergantung pada ID Produk, tetapi tidak pada ID Pesanan, sehingga tidak bergantung pada seluruh kunci primer. Anda harus menghapus Nama Produk dari tabel. Itu termasuk dalam tabel (Produk) yang berbeda.
Bentuk normal ketiga
Bentuk normal ketiga mengharuskan bahwa tidak hanya setiap kolom non-kunci yang bergantung pada seluruh kunci primer, tetapi kolom non-kunci independen satu sama lain.
Cara lain untuk mengatakan ini adalah bahwa setiap kolom non-kunci harus bergantung pada kunci primer dan tidak lain adalah kunci primer. Sebagai contoh, misalnya Anda memiliki tabel yang berisi kolom berikut:
- ProductID (kunci utama)
- Nama
- SRP
- Discount
Asumsikan bahwa Diskon bergantung pada harga eceran yang disarankan (SRP). Tabel ini melanggar bentuk normal ketiga karena kolom non-kunci, Diskon, bergantung pada kolom non-kunci lainnya, SRP. Independensi kolom berarti Anda harus dapat mengubah kolom non-kunci apa pun tanpa memengaruhi kolom lainnya. Jika Anda mengubah nilai dalam bidang SRP, Diskon akan berubah sesuai dengan itu, sehingga melanggar aturan tersebut. Dalam hal ini, Diskon harus dipindahkan ke tabel lain yang dimasukkan ke SRP.