35 BAB 3 ANALISIS DAN PERANCANGAN
3.1
Latar Belakang Perusahaan 3.1.1
Sejarah Perusahaan PT Mejisinar Kasih merupakan perusahaan yang bergerak di bidang Air Minum Dalam Kemasan (AMDK). Perusahaan ini beralamat di Jalan Raya Bogor Km. 26,6 Ciracas Jakarta 13069 dan didirikan pada tanggal 14 Juni 1990, dimana pada awalnya perusahaan ini berada di bawah manajemen PT Astra Internasional sebagai perusahaan pendukung dalam penyediaan air minum. Sejalan dengan perjalanan waktu, perusahaan mulai berkembang menjadi perusahaan menengah dengan produknya yang mulai dikenal oleh pasar dan mulai menyuplai air minum ke perusahaan dan pabrik lain. Pada tahun 1998 terjadi krisis moneter di Indonesia dan menyebabkan perusahaan ini berhenti beroperasi selama 4 tahun, sehingga pada akhir tahun 2002 perusahaan ini berganti kepemilikan dan sudah tidak di bawah manajemen PT Astra Internasional. Perusahaan ini memproduksi Air Minum Dalam Kemasan (AMDK) dengan label produk Bonanza dan Osmosis. Air baku yang digunakan adalah sumber air dari sumur dalam yang kemudian diproses kembali dengan menggunakan metode Reverse Osmosis. Pada saat ini sesuai dengan kemampuannya perusahaan ini telah memproduksi air minum dalam kemasan galon, botol, dan gelas. Menanggapi persyaratan pasar, pihak perusahaan berkeinginan menjaga mutu produksinya secara
36 konsisten yang mengacu kepada persyaratan Standar Nasional Indonesia (SNI) dan tetap memperhatikan akan kesehatan, keselamatan, keamanan, dan lingkungan hidup.
3.1.2
Visi dan Misi Perusahaan Perusahaan memiliki sebuah visi yaitu berkomitmen untuk selalu memenuhi harapan dan kepuasan pelanggan dalam hal mutu produk Air Minum Dalam Kemasan (AMDK) yang akan diberikan. Sedangkan misinya adalah bertekad untuk selalu memenuhi mutu produksi dan menjaga secara konsisten berdasarkan pada acuan Standar Nasional Indonesia (SNI) 01 – 3553 – 1996. Perusahaan ini selalu melakukan evaluasi terhadap sistem mutu yang diterapkan di perusahaannya, antara lain: •
Meningkatkan dan menjaga mutu produksi Air Minum Dalam Kemasan (AMDK) berdasarkan Standar Nasional Indonesia (SNI).
•
Meningkatkan
kekompakan
kerja
seluruh
karyawan
menghasikan produk AMDK yang bermutu dan higienis.
untuk
37 3.1.3
Struktur Organisasi Berikut ini adalah struktur organisasi PT Mejisinar Kasih :
Direktur
Personalia
Keuangan
Keamanan
Produksi / QC
Pemasaran
Kasir
Produksi
Pembelian
Teknik / Listrik
Penjualan
Gudang
Gambar 3.1 Struktur Organisasi
3.1.4
Tugas dan Tanggung Jawab 1. Direktur •
Tugas -
Menyetujui dan mengesahkan rencana kerja untuk satu tahun anggaran.
-
Mengesahkan dokumen sistem manajemen mutu.
-
Memantau pelaksanaan manajemen keuangan perusahaan setiap hari kerja.
38 •
Tanggung jawab -
Memimpin, mengkoordinasi, mengarahkan, dan mengawasi seluruh kegiatan perusahaan.
-
Mengambil keputusan dan kebijakan yang telah ditetapkan oleh perusahaan.
-
Memilih
Wakil
Manajemen
untuk
penerapan
sistem
manajemen mutu perusahaan. -
Menerima dan mengevaluasi laporan pelaksanaan kegiatan di perusahaan.
-
Mengangkat dan memberhentikan karyawan tetap.
2. Personalia •
Tugas -
Menerima dan mendistribusikan surat – surat masuk ke perusahaan.
•
-
Menyimpan dan memelihara dokumen karyawan.
-
mengevaluasi laporan dari keamanan.
-
Menjalankan administrasi karyawan.
Tanggung jawab -
Merencanakan penerimaan karyawan.
-
Merencanakan pelatihan internal karyawan.
-
Mengembangkan dan menetapkan peraturan karyawan yang disesuaikan dengan peraturan Pemerintah.
39 -
Merencanakan program kerja sama dengan lingkungan masyarakat.
3. Keuangan •
Tugas -
Mengeluarkan dan membayarkan uang pembelian bahan penolong serta gaji karyawan dan pembayaran – pembayaran lainnya sesuai aturan perusahaan.
-
Melaporkan kegiatan keuangan triwulan kepada direktur.
-
Membicarakan kegiatan arus keuangan setiap hari atau setiap saat dengan direktur.
•
-
Mengevaluasi kegiatan penggunaan uang setiap hari.
-
Mencatat seluruh kegiatan keuangan setiap hari.
-
Menerima laporan kegiatan keuangan dari kasir dan pembelian.
Tanggung jawab -
Menyusun kebijakan keuangan yang berhubungan dengan kegiatan akuntansi, administrasi keuangan, pengaturan sumber dana, dan penggunaan dana perusahaan.
-
Mengkoordinir dan mengawasi transaksi keuangan.
-
Menugaskan kasir membayar gaji karyawan.
-
Mengawasi kelancaran keuangan perusahaan.
40 4. Produksi / QC •
Tugas -
Mengkoordinir karyawan dalam proses produksi untuk melaksanakan tugasnya sesuai prosedur yang telah diterapkan.
-
Mengatur kelancaran proses produksi dari tahap bahan baku air sampai produk jadi.
-
Memeriksa dan menguji bahan baku, produksi jadi sesuai dengan Standar Nasional Indonesia (SNI).
•
Menyiapkan standar mutu sebagai acuan.
Tanggung jawab -
Bertanggung jawab di dalam proses produksi.
-
Bertanggung jawab atas mutu bahan baku air.
-
Bertanggung jawab atas kesesuaian mutu produk akhir.
-
Bertanggung jawab atas arus persediaan bahan penolong.
5. Distribusi / Pemasaran •
Tugas -
Mengkoordinasikan dan mengidentifikasi informasi pasar.
-
Melaksanakan program promosi untuk mengikatkan daya saing.
-
Memelihara dan menyimpan dokumen penjualan.
-
Membuat dan melaporkan mekanisme pasar kepada direktur selama tiga bulan penjualan.
•
Tanggung jawab -
Bertanggung jawab atas pencapaian target penjualan.
41 -
Bertanggung jawab atas perkembangan pasar penjualan.
-
Bertanggung jawab atas kebijakan promosi dan penagihan.
-
Bertanggung jawab atas pelayanan dan hubungan baik dengan konsumen dan distributor.
6. Keamanan •
Tugas -
Memegang dan melaksanakan absensi karyawan.
-
Membuat laporan absensi dan disampaikan ke bagian personalia.
-
Menjaga keamanan pabrik.
7. Kasir •
Tugas -
Menerima semua uang masuk, baik berupa tunai, giro, maupun cek.
-
Membantu bagian keuangan menyetor cek atau giro ke rekening bank.
-
Mengelola kas kecil untuk pengeluaran dana harian yang berjumlah kecil.
-
Membayar gaji dan uang lembur karyawan.
8. Pembelian •
Tugas -
Menentukan persyaratan supplier.
42 -
Mendata kemampuan supplier untuk memasok barang, harga barang, mutu, jumlah, dan jadwal pengiriman barang.
-
Menyiapkan order pembelian untuk disetujui bagian keuangan.
-
Mengawasi penerimaan barang sesuai dengan order.
-
Memelihara dan menyimpan seluruh catatan pembelian bahan penolong.
•
Tanggung jawab -
Bertanggung jawab atas kesesuaian persyaratan mutu barang – barang yang dibeli.
9. Produksi •
Tugas -
Mencatat jumlah produksi ke dalam buku induk / harian.
-
Melaporkan
kepada
bagian
produksi
atas
temuan
ketidaksesuaian proses produksi dan mutu produksi.
•
-
Memeriksa tingkat kebersihan galon sebelum diisi.
-
Membuat laporan produksi setiap 3 bulan kepada Direktur.
Tanggung jawab -
Bertanggung jawab atas tersedia wadah di tempat produksi.
-
Bertanggung jawab atas kebersihan ruangan atau tempat produksi.
-
Bertanggung jawab kepada bagian produksi (QC) atas mutu produksi.
43 -
Bertanggung jawab atas penyelesaian klaim pelanggan atau masyarakat pemakai.
10. Teknik / listrik •
Tugas -
Mengajukan alternatif dan usulan pembelian suku cadang serta peralatan produksi.
-
Memeriksa tingkat kebersihan alat / mesin produksi baik sebelum dan sesudah dioperasikan.
•
Memelihara, merawat mesin / peralatan dan instalasi listrik.
Tanggung jawab -
Bertanggung jawab atas kesiapan operasi alat – alat produksi.
-
Bertanggung jawab atas pelaksanaan perawatan alat – alat produksi.
11. Gudang •
Tugas -
Mencatat jumlah bahan penolong yang keluar masuk gudang.
-
Mencatat jumlah produksi akhir yang keluar masuk gudang.
-
Menjaga tingkat kerapian, kebersihan, dan keamanan gudang.
-
Memberi identifikasi barang setiap barang masuk gudang dan melaksanakan penggunaan barang dengan sistem FIFO.
•
Tanggung jawab -
Bertanggung jawab atas keselamatan bahan penolong dan produksi yang tersimpan dalam gudang.
44 -
Bertanggung jawab atas pemberian identifikasi atas bahan baku dan produk jadi yang ada dalam gudang.
12. Penjualan •
Tugas -
Menganalisa dan mendata persaingan yang terjadi di pasar.
-
Mengusulkan program promosi untuk meningkatkan penjualan dan memperluas pasar.
-
Mengajukan anggaran biaya untuk keperluan promosi.
-
Melaporkan kepada bagian pembelian kendala – kendala yang terjadi di pasar.
•
3.2
Tanggung jawab -
Bertanggung jawab atas naik turunnya tingkat penjualan.
-
Bertanggung jawab atas pengiriman produk jadi kepada pasar.
Analisis Permasalahan 3.2.1
Sistem yang Sedang Berjalan Berikut ini adalah prosedur sistem transaksi yang dilakukan pada PT Mejisinar Kasih : •
Prosedur pendaftaran pelanggan Sebelum melakukan transaksi pemesanan barang, calon pelanggan harus melakukan pendaftaran terlebih dahulu kepada staf bagian distribusi / pemasaran. Pendaftaran dilakukan agar staf bagian distribusi dapat mengecek kelayakan calon pelanggan, jika calon
45 pelanggan dianggap layak maka staf bagian distribusi akan meneruskan pendaftaran calon pelanggan kepada staf bagian penjualan. Staf bagian penjualan kemudian akan menerbitkan Bukti Pesanan (BP) 4 rangkap. Lembar 1 (putih) ditujukan ke bagian penjualan. Lembar 2 (merah) ditujukan ke bagian distribusi. Lembar 3 (kuning) diberikan kepada pelanggan. Lembar 4 (hijau) dijadikan sebagai arsip. Jika pelanggan sudah tidak ingin berlangganan lagi, maka lembar 1 akan dikembalikan kepada pelanggan.
46
Gambar 3.2 Diagram Alir Dokumen pada Tahap Pendaftaran •
Prosedur pemesanan barang Jika pelanggan tidak melakukan perubahan pesanan, maka barang akan dikirim secara rutin sesuai dengan perjanjian yang ada di BP. Jika pelanggan ingin melakukan perubahan pesanan, maka pelanggan harus melakukannya minimal sehari sebelum jadwal pengiriman barang dan
47 paling lambat sampai dengan jam 12.00 siang. Staf bagian penjualan akan melihat jadwal pengiriman barang pada hari tersebut, kemudian menerbitkan Puchased Order (PO) 2 rangkap. Lembar 1 (putih) ditujukan ke bagian distribusi. Lembar 2 (merah) ditujukan ke bagian penjualan.
Gambar 3.3 Diagram Alir Dokumen pada Tahap Pemesanan
48 •
Prosedur pengeluaran barang Setelah menerima PO dari bagian penjualan, maka staf bagian distribusi akan membuat Rencana Kerja Distribusi (RKD) 3 rangkap. RKD lembar 2 akan digunakan oleh driver sebagai panduan dalam melakukan distribusi barang. Lembar 1 (putih) ditujukan ke bagian gudang. Lembar 2 (merah) ditujukan ke driver. Lembar 3 (Kuning) digunakan sebagai arsip. Kemudian staf bagian distribusi juga akan menerbitkan Bukti Pengeluaran Barang Jadi (BPBJ) 3 rangkap yang digunakan agar staf bagian gudang dapat mengeluarkan barang yang diminta dan nantinya digunakan untuk mencocokkan antara barang yang diminta, barang yang diberikan, dan barang yang dijual. Lembar 1 (putih) ditujukan kepada bagian distribusi. Lembar 2 (merah) ditujukan kepada bagian gudang. Lembar 3 (hijau) ditujukan kepada pengambil / driver. Staf bagian distribusi juga akan menerbitkan Surat Jalan (SJ) 4 rangkap yang berisi nama dan alamat pelanggan, nama barang dan jumlah barang yang dijual akan diisi oleh driver. Lembar 1 (putih) dan lembar 4 (hijau) diberikan kepada pelanggan (lembar 1 diberikan apabila pembayaran telah dilakukan). Lembar 2 (merah) ditujukan ke bagian penjualan. Lembar 3 (kuning) digunakan sebagai arsip.
49 Staf bagian distribusi akan menyerahkan RKD lembar 2, seluruh BPBJ, dan seluruh SJ ke staf bagian gudang.
Gambar 3.4 Diagram Alir Dokumen pada Tahap Pengeluaran Barang
50 •
Prosedur pengiriman barang Setelah menerima BPBJ dari staf bagian distribusi, maka staf bagian gudang akan memberikan barang sesuai dengan yang diminta kepada driver beserta RKD lembar 2 dan seluruh SJ. Driver akan mengirim barang sesuai dengan RKD dan akan mengisi SJ pelanggan sesuai dengan jumlah barang yang dipesan atau sesuai dengan jumlah galon kosong yang tersedia di pihak pelanggan. Untuk pengiriman produk galon, jika barang yang diminta oleh pelanggan lebih besar dari jumlah pemesanan di RKD, maka driver harus mengecek apakah jumlah barang yang tersedia masih dapat mencukupi seluruh pesanan pelanggan. Jika ternyata jumlah barang masih mencukupi, maka perubahan pesanan dapat dilakukan. Jika tidak, maka jumlah barang yang diberikan sesuai dengan jumlah yang tertera di RKD.
51
Gambar 3.5 Diagram Alir Dokumen pada Tahap Pengiriman
52
Gambar 3.6 Diagram Alir Dokumen pada Tahap Pengiriman (Lanjutan)
•
Prosedur penagihan Setiap akhir bulan staf bagian penjualan membuat Surat Penagihan (SP) rangkap 3 berdasarkan pada SJ pelanggan pada bulan tersebut. Lembar 1 (putih) dan lembar 3 (kuning) diberikan kepada pelanggan (lembar 1 SP diberikan apabila pembayaran telah dilakukan beserta dengan lembar 1 SJ). Lembar 2 (merah) digunakan sebagai arsip. Jika tidak langsung melakukan pembayaran, maka pihak pelanggan harus memberikan tanda terima bahwa telah menerima SP dari PT Mejisinar Kasih dan akan diberikan batas waktu sesuai dengan perjanjian. Kolektor akan melakukan penagihan kembali sesuai dengan batas waktu yang telah dijanjikan.
53
Gambar 3.7 Diagram Alir Dokumen pada Tahap Penagihan
Untuk pelanggan dengan jenis pembayaran lunas, maka pada saat dilakukan pengiriman barang selain diterbitkan SJ, diterbitkan pula SP yang berisi nama pelanggan, alamat pelanggan, dan harga barang. Jumlah barang akan diisi sendiri oleh driver karena harus sesuai dengan SJ. Jika pembayaran telah dilakukan maka driver akan
54 menyerahkan SJ lembar 1 dan 4 kepada pelanggan, serta SP lembar 1 dan 3.
•
Prosedur serah terima produk jadi Setelah melakukan produksi, staf bagian produksi akan memindahkan barang ke gudang beserta Bukti Serah Terima Produk Jadi (BSTPJ) 2 rangkap. Lembar 1 (putih) ditujukan ke bagian produksi. Lembar 2 (merah) ditujukan ke bagian gudang.
Gambar 3.8 Diagram Alir Dokumen pada Tahap Penerimaan Barang
55 •
Prosedur retur barang Jika pelanggan ingin melakukan retur barang, maka pada saat pengiriman barang pelanggan dapat langsung mengajukan retur ke driver. Driver akan memeriksa apakah barang tersebut dapat diretur, jika dapat diretur maka barang yang ingin diretur dapat langsung ditukar dengan barang yang baru selama masih terdapat sisa barang di armada dan driver akan mengeluarkan Surat Retur (SR) 3 rangkap. Lembar 1 (putih) yang ditujukan ke bagian gudang. Lembar 2 (merah) yang ditujukan ke bagian produksi. Lembar 3 (kuning) yang ditujukan ke bagian pelanggan. Jika barang tidak tersedia di armada, maka retur barang akan dilakukan pada pengiriman berikutnya setelah driver mempersiapkan barang yang akan diretur.
56
Gambar 3.9 Diagram Alir Dokumen pada Tahap Retur Barang
57 Berikut ini adalah DFD (Data Flow Diagram) yang sedang berjalan dalam perusahaan. •
Diagram konteks
Gambar 3.10 DFD Diagram Konteks
58 •
Diagram nol
Gambar 3.11 DFD Diagram Nol 3.2.2
Permasalahan yang Dihadapi Saat ini PT Mejisinar Kasih sudah mempunyai sekitar 500 pelanggan tetap dengan jumlah rata – rata transaksi sebesar 150 transaksi setiap harinya. Berdasarkan gambaran sistem yang sedang berjalan dapat diketahui permasalahan – permasalahan yang dihadapi oleh perusahaan ini, antara lain:
59 •
Prosedur pemesanan barang Bagian penjualan mengalami kesulitan dalam membuat PO untuk pelanggan, sebab bagian penjualan harus selalu mengecek jadwal pengiriman beserta jumlah barang yang akan dikirimkan kepada setiap pelanggan berdasarkan BP yang telah disepakati antara pihak pelanggan dengan pihak perusahaan.
•
Prosedur pengeluaran dan penerimaan barang Karena data belum terintegrasi antara bagian gudang, distribusi dan penjualan, maka bagian distribusi dan penjualan harus selalu menghubungi bagian gudang terlebih dahulu untuk mendapatkan informasi mengenai sisa barang yang ada di gudang barang jadi.
•
Prosedur penagihan Perhitungan tagihan pelanggan masih dilakukan secara manual sehingga memungkinkan terjadinya kesalahan. Selain itu harga barang yang dijual untuk setiap pelanggan tidak sama, karena semua harga tergantung pada BP yang telah disepakati antara pihak pelanggan dengan pihak perusahaan. Permasalahan yang lainnya adalah bagian penjualan tidak dapat langsung mengetahui pelanggan mana yang tagihannya sudah melewati tanggal jatuh tempo karena harus melakukan pengecekan terlebih dahulu terhadap setiap tagihan yang ada.
60 3.2.3
Usulan Pemecahan Masalah •
Prosedur pemesanan barang Dibuat sebuah sistem yang dapat mengelompokkan pelanggan berdasarkan hari kirim beserta barang dan jumlah barang yang akan dikirimkan, sehingga dapat mempercepat proses pembuatan PO dan pengiriman barang.
•
Prosedur pengeluaran dan penerimaan barang Dibuat sebuah sistem yang terintegrasi antara bagian gudang, distribusi dan penjualan, sehingga bagian distribusi dan penjualan dapat langsung mengetahui persediaan barang yang ada saat ini dan tidak perlu menanyakan ke bagian gudang terlebih dahulu lagi.
•
Prosedur penagihan Dibuat sebuah sistem yang dapat menghitung jumlah tagihan yang harus dibayar oleh semua pelanggan berdasarkan jumlah barang yang telah diterima dan harga barang untuk masing – masing pelanggan. Selain itu sistem juga akan memberitahukan daftar pelanggan yang penagihannya sudah melewati jatuh tempo. Berdasarkan usulan pemecahan masalah di atas, maka solusi yang
baik dan bermanfaat bagi pihak perusahaan adalah dengan membuat suatu sistem basis data, sehingga segala jenis data, seperti PO, surat pengeluaran barang, surat jalan, dapat tersimpan dengan baik. Dan ketika dibutuhkan, dapat dengan cepat memperoleh data – data yang diperlukan.
61 3.3
Perancangan Basis Data Koseptual 3.3.1
Mengidentifikasi Tipe Entiti Berikut ini merupakan tabel yang menjelaskan entiti – entiti yang digunakan dalam perancangan basis data.
Entiti Pegawai
Deskripsi Alias Berhubungan dengan Staf semua pegawai yang bekerja pada PT Mejisinar Kasih
Pelanggan
Berhubungan dengan Konsumen semua pelanggan yang membeli barang pada PT Mejisinar Kasih Berhubungan dengan Position semua jabatan yang berlaku dalam proses bisnis PT Mejisinar Kasih Berhubungan dengan Pendaftaran semua jenis barang yang dipesan oleh pelanggan, jumlah pengiriman barang, harga dari setiap barang dan jadwal pengiriman barang
Jabatan
BP
PO
Berhubungan dengan Invoice semua pemesanan barang yang dilakukan oleh pelanggan
Kemunculan Setiap pegawai dapat melayani banyak PO, RKD, BPBJ, SJ, retur jual, penagihan dan pembayaran. Setiap pelanggan dapat memesan barang dan dapat melakukan retur penjualan Setiap pegawai memiliki satu jabatan sesuai dengan tugas dan tanggung jawabnya Setiap BP dibuat pada awal pemesanan barang milik pelanggan serta bila terjadi perubahan jadwal kirim, harga barang, jumlah pengiriman barang dan penambahan atau pengurangan jenis barang Setiap PO dibuat berdasarkan BP, tetapi masih dimungkinkan untuk mengalami perubahan jika ada pemberitahuan perubahan pesanan oleh pelanggan
62 Entiti SJ
Penagihan
Barang BPBJ
BSTPJ ReturJual
Deskripsi Alias Berhubungan dengan Surat Jalan semua pengiriman barang terhadap pelanggan serta jumlah barang yang diterima oleh pelanggan Berhubungan dengan Penagihan semua penagihan penjualan terhadap pelanggan Barang yang dijual Produk oleh PT Mejisinar Kasih Berhubungan dengan Pengeluaran jumlah barang yang Barang keluar dari gudang Berhubungan dengan Peneriman jumlah barang yang Barang masuk ke gudang Berhubungan dengan Retur semua pengembalian barang yang dilakukan pelanggan
RKD
Berhubungan dengan Rencana semua urutan jadwal Kerja pengiriman barang Distribusi untuk pelanggan
Kendaraan
Berhubungan dengan Armada informasi semua kendaraan pengirim barang
Kemunculan Informasi pengiriman barang berupa jumlah barang yang diterima oleh pelanggan ditulis kedalam SJ setiap kali melakukan pengiriman barang Penagihan dilakukan setiap hari atau setiap bulan berdasarkan pada jenis pembayaran pelanggan yang ada di BP Barang dibutuhkan dalam transaksi penjualan Barang dikeluarkan dari gudang barang jadi pada saat ada pengiriman barang Pemasukkan barang jadi dari produksi ke gudang barang jadi Pelanggan dapat menukarkan barang yang dipesannya jika terjadi kerusakan pada barang yang diterima Setiap kali melakukan pengiriman barang bagian distribusi membuat RKD untuk tiap kendaraan tertentu Kendaraan digunakan pada saat pengiriman barang kepada pelanggan
Tabel 3.1 Identifikasi Tipe Entiti
63 3.3.2
Mengidentifikasi Tipe Relasi
Entiti Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Pegawai Jabatan Pelanggan Pelanggan BP PO PO BP BSTPJ RKD RKD Kendaraan Penagihan BPBJ ReturJual SJ
Multiplicity Relasi 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Menangani 1..1 Mempunyai 1..1 Memiliki 1..1 Memiliki 1..* Memiliki 1..* Memiliki 1..1 Memiliki 1..1 Memiliki 1..* Menambah 1..1 Memiliki 1..1 Menghasilkan 1..1 Digunakan 1..1 BerdasarkanPada 1..* Mengurangi 0..* Memiliki 1..* Memiliki
Entiti PO BP Penagihan Penagihan Penagihan RKD RKD RKD RKD ReturJual BPBJ BSTPJ SJ Pegawai BP ReturJual Barang Barang SJ PO Barang PO BPBJ RKD SJ Barang Barang Barang
Tabel 3.2 Identifikasi Tipe Relasi
Multiplicity 0..* 0..* 0..* 0..* 0..* 0..* 0..* 0..* 0..* 0..* 0..* 0..* 0..* 1..* 1..* 0..* 1..* 1..* 1..1 1..* 1..* 1..* 1..1 1..* 1..* 1..* 1..* 1..*
64
Gambar 3.12 Diagram ER yang menunjukkan tipe entiti dan relasi
3.3.3 Entiti Pegawai
Identifikasi Atribut dan Tipe Entitas Atribut kodePegawai namaPegawai alamatPegawai kota kodePos kecamatan kelurahan tglLahir jenisKelamin tglMasukKerja noTelepon noHP statusPegawai
Panjang 10 30 100 30 30 30 8 1 8 12 12 1
Jenis Char VarChar VarChar VarChar Integer VarChar VarChar DateTime Char DateTime VarChar VarChar Boolean
Null No No No No No No No No No No Yes Yes No
MultiValue No No No No No No No No No No No No No
Derived No No No No No No No No No No No No No
65 Entiti Pelanggan
Jabatan BP
PO BSTPJ BPBJ Barang
RKD
Atribut kodePelanggan namaPelanggan alamatPengiriman kotaKirim kodePosKirim kecKirim kelKirim alamatPenagihan kotaTagih kodePosTagih kecTagih kelTagih NPWP noTelepon noFax statusPelanggan kodeJabatan namaJabatan kodeBP tgl jenisPembayaran jmlPinjamanGalon hargaPinjamanGalon hariKirim statusBP kodePO tgl kodeBSTPJ tgl kodeBPBJ tgl kodeBarang namaBarang merek satuan stok kodeRKD tgl keterangan
Panjang 10 30 100 30 30 30 100 30 50 50 25 12 12 1 6 30 10 8 1 6 1 10 8 10 8 10 8 6 30 30 30 10 8 100
Jenis Char VarChar VarChar VarChar Integer VarChar VarChar VarChar VarChar Integer VarChar VarChar VarChar VarChar VarChar Boolean Char VarChar Char DateTime Char Integer Money VarChar Boolean Char DateTime Char DateTime Char DateTime Char VarChar VarChar VarChar Integer Char DateTime VarChar
Null No No No No No No No No No No No No Yes No Yes No No No No No No No No No No No No No No No No No No No No No No No Yes
MultiValue No No No No No No No No No No No No No Yes Yes No No No No No No No No Yes No No No No No No No No No No No No No No No
Derived No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No No
66 Entiti Kendaraan
SJ Penagihan
ReturJual
Atribut noPolisi merekMobil tipe tahun kapasitasStd kapasitasOpt statusKendaraan keterangan kodeSJ tgl totalDijual kodePenagihan tglPenagihan tglJatuhTempo tglPembayaran jumlah disc ppn totalPenagihan statusTagih kodeReturJual tgl
Panjang 8 30 30 4 1 100 10 8 10 8 8 8 1 10 8
Jenis VarChar VarChar VarChar Integer Integer Integer Boolean VarChar Char DateTime Money Char DateTime DateTime DateTime Money Float Float Money Boolean Char DateTime
Null No No No No No No No Yes No No Yes No No No No No No No No No No No
MultiValue No No No No No No No No No No No No No No No No No No No No No No
Derived No No No No No No No No No No Yes No No Yes No Yes No No Yes No No No
Tabel 3.3 Menentukan Atribut dan Tipe Entitas
3.3.4
Menentukan Domain Atribut
Nama Atribut kodePegawai
Domain Atribut Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 3 karakter pertama diisi dengan kode PGW • 2 karakter selanjutnya menunjukkan tahun masuk pegawai dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan masuk pegawai dengan range ( 01..12 ) • 3 karakter terakhir menunjukkan urutan masuk pegawai pada tahun dan bulan yang sama dengan range ( 001..999 ) Contoh kodePegawai : PGW0601001, artinya pegawai masuk pada tahun 2006 bulan Januari dan merupakan orang ke – 1 yang masuk pada tahun dan bulan tersebut.
67 Nama Atribut jenisKelamin kodePelanggan
Domain Atribut Terdiri dari 1 karakter dengan tipe Char, yang berisi nilai ‘L’ untuk pria atau ‘P’ untuk wanita. Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 3 karakter pertama diisi dengan kode PLG •
2 karakter selanjutnya menunjukkan tahun masuk pelanggan dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan masuk pelanggan dengan range ( 01..12 ) • 3 karakter terakhir menunjukkan urutan masuk pelanggan pada tahun dan bulan yang sama dengan range ( 001..999 ) Contoh kodePelanggan : PLG0601001, artinya pelanggan masuk pada tahun 2006 bulan Januari dan merupakan orang ke – 1 yang masuk pada tahun dan bulan tersebut. kodeBP
jenisPembayaran kodeReturJual
Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi yaitu Pendaftaran dengan kode BP • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodeBP dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodeBP dengan range ( 01..12 ) • 4 karakter terakhir menunjukkan urutan nomor kodeBP yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999 ) Contoh kodeBP : BP06010001, artinya BP ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut. Terdiri dari 1 karakter dengan tipe Char, yang berisi nilai ‘K’ untuk kredit atau ‘L’ untuk lunas. Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi yaitu returJual dengan kode RJ • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodeReturJual dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodeReturJual dengan range ( 01..12 )
68 Nama Atribut
kodePO
kodeBarang
kodeRKD
Domain Atribut • 4 karakter terakhir menunjukkan urutan nomor kodeReturJual yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999) Contoh kodeReturJual : RJ06010001, artinya ReturJual ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut. Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi, yaitu Penjualan dengan kode PO • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodePO dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodePO dengan range ( 01..12 ) • 4 karakter terakhir menunjukkan urutan nomor kodePO yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999 ) Contoh kodePO : PO06010001, artinya PO ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut. Terdiri dari 6 karakter dengan tipe Char, dengan cara penulisan : • 3 karakter pertama diisi dengan kode BRG • 3 karakter terakhir menunjukkan urutan nomor kodeBarang dengan range (001..999) Contoh kodeBarang : BRG001 Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi, yaitu RKD dengan kode RD • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodeRKD dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodeRKD dengan range ( 01..12 ) • 4 karakter terakhir menunjukkan urutan nomor kodeRKD yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999 ) Contoh kodeRKD : RD06010001, artinya RKD ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut.
69 Nama Atribut kodeSJ
kodePenagihan
kodeBSTPJ
Domain Atribut Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi yaitu SuratJalan, dengan kode SJ • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodeSJ dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodeSJ dengan range ( 01..12 ) • 4 karakter terakhir menunjukkan urutan kodeSJ yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999 ) Contoh kodeSJ : SJ06010001, artinya SJ ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut. Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi yaitu Penagihan, dengan kode PH • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodePenagihan dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodePenagihan dengan range ( 01..12 ) • 4 karakter terakhir menunjukkan urutan kodePenagihan yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999 ) Contoh kodePenagihan : PH06010001, artinya Penagihan ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi yaitu Penerimaan Barang, dengan kode TB • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodeBSTPJ dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodeBSTPJ dengan range ( 01..12 ) • 4 karakter terakhir menunjukkan urutan kodeBSTPJ yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999 )
70 Nama Atribut
kodeBPBJ
statusTagih statusBP statusPegawai statusPelanggan statusKendaraan kodePos kodePosKirim kodePosTagih kodeJabatan
Domain Atribut Contoh kodeBSTPJ : TB06010001, artinya BSTPJ ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut Terdiri dari 10 karakter dengan tipe Char, dengan cara penulisan : • 2 karakter pertama menunjukkan jenis transaksi yaitu Pengeluaran Barang, dengan kode PB • 2 karakter selanjutnya menunjukkan tahun dibuatnya kodeBPBJ dengan range ( 00..99 ) • 2 karakter selanjutnya menunjukkan bulan dibuatnya kodeBPBJ dengan range ( 01..12 ) • 4 karakter terakhir menunjukkan urutan kodeBPBJ yang dibuat pada tahun dan bulan yang sama dengan range ( 0001..9999 ) Contoh kodeBPBJ : PB06010001, artinya BPBJ ini dibuat pada tahun 2006 bulan Januari dengan urutan pembuatan ke – 1 pada tahun dan bulan tersebut Terdiri dari 1 karakter dengan tipe Boolean, yang berisi nilai true (1) untuk ‘Lunas’ atau false (0) untuk ‘belumLunas’. Terdiri dari 1 karakter dengan tipe Boolean, yang berisi nilai true (1) ‘Valid’ atau false (0) untuk ‘tidakValid’. Terdiri dari 1 karakter dengan tipe Boolean, yang berisi nilai true (1) untuk ‘Aktif’ atau false (0) untuk ‘tidakAktif’ Terdiri dari 1 karakter dengan tipe Boolean, yang berisi nilai true (1) untuk ‘Aktif’ atau false (0) untuk ‘tidakAktif’ Terdiri dari 1 karakter dengan tipe Boolean, yang berisi nilai true (1) untuk ‘Available’ atau false (0) untuk ‘Unavailable’ Terdiri dari 5 digit angka dengan tipe Integer Terdiri dari 6 karakter dengan tipe Char, dengan cara penulisan : • 3 karakter pertama diisi dengan kode JBT • 3 karakter terakhir menunjukkan urutan nomor kodeJabatan dengan range (001..999) Contoh kodeJabatan : JBT001 Tabel 3.4 Menentukan Domain Atribut
71 3.3.5
Menentukan Atribut Candidate dan Primary Key
Entiti Pegawai Pelanggan Jabatan Barang BSTPJ BPBJ BP PO RKD Kendaraan SJ Penagihan ReturJual
Candidate Key kodePegawai noTelepon noHP kodePelanggan noTelepon noFax kodeJabatan namaJabatan kodeBarang namaBarang kodeBSTPJ kodeBPBJ kodeBP kodePO kodeRKD noPolisi kodeSJ kodePenagihan kodeReturJual
Primary Key kodePegawai kodePelanggan kodeJabatan kodeBarang kodeBSTPJ kodeBPBJ kodeBP kodePO kodeRKD noPolisi kodeSJ kodePenagihan kodeReturJual
Tabel 3.5 Menentukan Atribut Candidate dan Primary Key
72
Gambar 3.13 Diagram ER dengan Penambahan Primary Key
3.3.6
Memeriksa Model Terhadap Redundansi Berdasarkan model yang telah dihasilkan, tidak terdapat model yang redundansi.
73 3.3.7
Validasi Model Konseptual Lokal Terhadap Transaksi User Data Entry a) Masukkan detail dari pelanggan b) Masukkan detail dari jabatan c) Masukkan detail dari pegawai d) Masukkan detail dari Penagihan e) Masukan detail dari Kendaraan f) Masukkan detail dari Barang g) Masukkan detail dari BP h) Masukkan detail dari RKD i) Masukkan detail dari BPBJ j) Masukkan detail dari BSTPJ k) Masukkan detail dari PO l) Masukkan detail dari ReturJual m) Masukkan detail dari SJ
Data Update/Deletion a) Mengubah / menghapus detail dari pegawai b) Mengubah / menghapus detail dari jabatan c) Mengubah / menghapus detail dari pelanggan d) Mengubah detail dari RKD e) Mengubah / menghapus detail dari barang f) Mengubah / menghapus detail dari kendaraan g) Mengubah detail dari BP
74 h) Mengubah detail dari SJ i) Mengubah detail dari penagihan j) Mengubah detail dari PO k) Mengubah detail dari retur l) Mengubah detail dari BPBJ m) Mengubah detail dari BSTPJ
Data Query a) Tampilkan detail pegawai berdasarkan kode jabatan b) Tampilkan detail pelanggan berdasarkan hari pengiriman c) Tampilkan detail barang beserta harga untuk pelanggan tertentu d) Tampilkan nama pelanggan dan detail dari penagihan yang belum dibayar pada bulan dan tahun tertentu e) Tampilkan detail persediaan barang f) Tampilkan detail PO beserta detail Barang yang dipesan berdasarkan kodeRKD tertentu g) Tampilkan detail SJ berdasarkan bulan dan kodePelanggan tertentu dari PO h) Tampilkan detail SJ berdasarkan kode penagihan tertentu i) Tampilkan detail barang berdasarkan kode retur tertentu j) Tampilkan detail barang berdasarkan kode BPBJ tertentu k) Tampilkan detail barang berdasarkan kode BSTPJ tertentu l) Tampilkan detail barang berdasarkan kode PO tertentu
75 m) Tampilkan detail kendaraan yang diurut berdasarkan kapasitas standart terbesar
Gambar 3.14 Menggunakan Pathway untuk Memeriksa Bahwa Model Konseptual Mendukung Transaksi Query Data
76 3.4
Perancangan Basis Data Logikal 3.4.1
Menghilangkan Fitur yang Tidak Sesuai Dengan Model Relasional 1. Menghilangkan tipe relasi binary many-to-many (*:*) •
Relasi Memiliki (BP-Barang)
Gambar 3.15 Relasi many-to-many BP-Barang
Gambar 3.16 Dekomposisi Relasi many-to-many BP-Barang
Dilakukan identifikasi entiti baru BPDetail sehingga relasi Memiliki diganti dengan dua relasi one-to-many (1:*). Relasi many-to-many (*:*) Memiliki direpresentasikan sebagai BP Memiliki BPDetail dan Barang Mempunyai BPDetail. •
Relasi Menambah (BSTPJ-Barang)
Gambar 3.17 Relasi many-to-many BSTPJ-Barang
77
Gambar 3.18 Dekomposisi Relasi many-to-many BSTPJ-Barang
Dilakukan identifikasi entiti baru BSTPJDetail sehingga relasi Menambah diganti dengan dua relasi one-to-many (1:*). Relasi manyto-many (*:*) Menambah direpresentasikan sebagai BSTPJ Memiliki BSTPJDetail dan Barang Mempunyai BSTPJDetail. •
Relasi Memiliki (PO-Barang)
Gambar 3.19 Relasi many-to-many PO-Barang
Gambar 3.20 Dekomposisi Relasi many-to-many PO-Barang
Dilakukan identifikasi entiti baru PODetail sehingga relasi Memiliki diganti dengan dua relasi one-to-many (1:*). Relasi many-to-many (*:*) Memiliki direpresentasikan sebagai PO Memiliki PODetail dan Barang Mempunyai PODetail.
78 •
Relasi Memiliki (ReturJual-Barang)
Gambar 3.21 Relasi many-to-many ReturJual-Barang
Gambar 3.22 Dekomposisi Relasi many-to-many ReturJual-Barang
Dilakukan identifikasi entiti baru ReturJualDetail sehingga relasi Memiliki diganti dengan dua relasi one-to-many (1:*). Relasi manyto-many (*:*) Memiliki direpresentasikan sebagai ReturJual Memiliki ReturJualDetail dan Barang Mempunyai ReturJualDetail. •
Relasi Mengurangi (BPBJ-Barang)
Gambar 3.23 Relasi many-to-many BPBJ-Barang
79
Gambar 3.24 Dekomposisi Relasi many-to-many BPBJ-Barang
Dilakukan identifikasi entiti baru BPBJDetail sehingga relasi Mengurangi diganti dengan dua relasi one-to-many (1:*). Relasi many-to-many (*:*) Mengurangi direpresentasikan sebagai BPBJ Memiliki BPBJDetail dan Barang Mempunyai BPBJDetail. •
Relasi Memiliki (SJ-Barang)
Gambar 3.25 Relasi many-to-many SJ-Barang
Gambar 3.26 Dekomposisi Relasi many-to-many SJ-Barang
Dilakukan identifikasi entiti baru SJDetail sehingga relasi Memiliki diganti dengan dua relasi one-to-many (1:*). Relasi many-to-many
80 (*:*) Memiliki direpresentasikan sebagai SJ Memiliki SJDetail dan Barang Mempunyai SJDetail.
2. Menghilangkan atribut multi-valued •
Pada entiti BP Terdapat atribut multi-valued hariKirim.
Gambar 3.27 Entiti BP dengan multi-valued
Gambar 3.28 Dekomposisi Atribut hariKirim Menjadi Entiti JadwalKirim •
Pada entiti Pelanggan Terdapat atribut multi-valued noTelepon dan noFax
81
Gambar 3.29 Entiti Pelanggan dengan multi-valued
Gambar 3.30 Dekomposisi Atribut noTelepon dan noFax Menjadi Entiti TeleponPlgn dan FaxPlgn
82 3.4.2
Menurunkan Relasi untuk Model Data Logikal Lokal 1. Strong entity types (kodeJabatan, namaJabatan) kodeJabatan (kodeBarang, namaBarang, merek, satuan, stok) kodeBarang (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, statusPegawai) Primary Key kodePegawai Pelanggan (kodePelanggan, namaPelanggan, alamatPengiriman, kotaKirim, kodePosKirim, kecKirim, kelKirim, alamatPenagihan, kotaTagih, kodePosTagih, kecTagih, kelTagih, NPWP, statusPelanggan) Primary Key (kodePelanggan) TeleponPlgn (noTelepon) Primary Key noTelepon FaxPlgn (noFax) Primary Key noFax Kendaraan (noPolisi, merekMobil, tipe, tahun, kapasitasStd, kapasitasOpt, statusKendaraan, keterangan) Primary Key noPolisi BP (kodeBP, tgl, jenisPembayaran, jmlPinjamanGalon, hargaPinjamanGalon, statusBP) Primary Key kodeBP JadwalKirim (hariKirim, kodeBP) Primary Key hariKirim, kodeBP RKD (kodeRKD, tgl, keterangan) Primary Key kodeRKD PO (kodePO, tgl) Primary Key kodePO Penagihan (kodePenagihan, tglPenagihan, tglPembayaran, disc, ppn, statusTagih) Primary Key kodePenagihan Derived jumlah (∑(SJ.totalDijual), Derived tglJatuhTempo(dateadd(day,10,tglPenagihan)), Derived totalPenagihan ((jumlah – (jumlah * disc)) + (jumlah – (jumlah * disc)) * ppn) SJ (kodeSJ, tgl) Primary Key kodeSJ Derived totalDijual (∑(SJDetail.jumlahDijual)) BPBJ (kodeBPBJ, tgl) Primary Key kodeBPBJ Jabatan Primary Key Barang Primary Key Pegawai
83 BSTPJ (kodeBSTPJ, tgl) Primary Key kodeBSTPJ ReturJual (kodeReturJual, tgl) Primary Key kodeReturJual Tabel 3.6 Strong Entity Types
2. Weak entity types BPDetail (hargaBarang, jmlDefaultKirim) Primary Key belum ada (saat ini) BSTPJDetail (qtyMasuk) Primary Key belum ada (saat ini) PODetail (qtyDiminta) Primary Key belum ada (saat ini) ReturJualDetail (qtyRetur, keterangan) Primary Key belum ada (saat ini) BPBJDetail (qtyDiberikan, qtySisaBarang, keterangan) Primary Key belum ada (saat ini) SJDetail (qtyDijual, keterangan) Primary Key belum ada (saat ini) Derived jumlahDijual (qtyDijual * PODetail.hargaBarang) Tabel 3.7 Weak Entity Types
3. One-to-many (1:*) binary relationship types Jabatan Mempunyai Pegawai Jabatan (kodeJabatan, namaJabatan) Primary Key kodeJabatan
(kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) Pegawai
84 Pelanggan Memiliki BP Pegawai Menangani BP Pelanggan (kodePelanggan, namaPelanggan, alamatPengiriman, kotaKirim, kodePosKirim, kecKirim, kelKirim, alamatPenagihan, kotaTagih, kodePosTagih, kecTagih, kelTagih, NPWP, statusPelanggan) Primary Key kodePelanggan Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) Pelanggan Memiliki TeleponPlgn Pelanggan (kodePelanggan, namaPelanggan, alamatPengiriman, kotaKirim, kodePosKirim, kecKirim, kelKirim, alamatPenagihan, kotaTagih, kodePosTagih, kecTagih, kelTagih, NPWP, statusPelanggan) Primary Key kodePelanggan Pelanggan Memiliki FaxPlgn Pelanggan (kodePelanggan, namaPelanggan, alamatPengiriman, kotaKirim, kodePosKirim, kecKirim, kelKirim, alamatPenagihan, kotaTagih, kodePosTagih, kecTagih, kelTagih, NPWP, statusPelanggan) Primary Key kodePelanggan
(kodeBP, tgl, jenisPembayaran, jmlPinjamanGalon, hargaPinjamanGalon, statusBP, kodePelanggan, kodePegawai) Primary Key kodeBP Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) BP
TeleponPlgn (noTelepon, kodePelanggan) Primary Key noTelepon Foreign Key kodePelanggan references Pelanggan(kodePelanggan)
FaxPlgn (noFax, kodePelanggan) Primary Key noFax Foreign Key kodePelanggan references Pelanggan(kodePelanggan)
85 BP Memiliki JadwalKirim BP (kodeBP, tgl, jenisPembayaran, jmlPinjamanGalon, hargaPinjamanGalon, statusBP, kodePelanggan, kodePegawai) Primary Key kodeBP Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) Pegawai Menangani BSTPJ Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) Pegawai Menangani RKD Pegawai Menangani RKD Pegawai Menangani RKD Pegawai Menangani RKD Kendaraan Digunakan RKD Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) Kendaraan (noPolisi, merekMobil, tipe, tahun, kapasitasStd, kapasitasOpt, statusKendaraan, keterangan) Primary Key Kendaraan
JadwalKirim (hariKirim, kodeBP) Primary Key hariKirim, kodeBP Foreign Key kodeBP references BP(kodeBP)
BSTPJ (kodeBSTPJ, tgl, kodePegawai) Primary Key kodeBSTPJ Foreign Key kodePegawai references Pegawai(kodePegawai)
(kodeRKD, tgl, keterangan, kodePegawai, kodeDriver, kodeHelper1, kodeHelper2, kodeKendaraan) Primary Key kodeRKD Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodeDriver references Pegawai(kodePegawai) Foreign Key kodeHelper1 references Pegawai(kodePegawai) Foreign Key kodeHelper2 references Pegawai(kodePegawai) Foreign Key kodeKendaraan references Kendaraan(noPolisi) RKD
86 Pelanggan Memiliki ReturJual Pegawai Menangani ReturJual Pelanggan (kodePelanggan, namaPelanggan, alamatPengiriman, kotaKirim, kodePosKirim, kecKirim, kelKirim, alamatPenagihan, kotaTagih, kodePosTagih, kecTagih, kelTagih, NPWP, statusPelanggan) Primary Key kodePelanggan Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) Pegawai Menangani Penagihan Pegawai Menangani Penagihan Pegawai Menangani Penagihan Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan)
(kodeReturJual, tgl, kodePelanggan, kodePegawai) Primary Key kodeReturJual Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) ReturJual
(kodePenagihan, tglPenagihan, tglPembayaran, disc, ppn, statusTagih, kodeKolektor, kodePegawaiByr, kodePegawaiTgh) Primary Key kodePenagihan Foreign Key kodeKolektor references Pegawai(kodePegawai) Foreign Key kodePegawaiByr references Pegawai(kodePegawai) Foreign Key kodePegawaiTgh references Pegawai(kodePegawai) Derived jumlah (∑(SJ.totalDijual) Derived tglJatuhTempo(dateadd( day, 10, tglPenagihan)) Derived totalPenagihan ((jumlah – (jumlah * disc)) + (jumlah – (jumlah * disc)) * ppn) Penagihan
87 Pegawai Menangani BPBJ Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) Pegawai Menangani PO RKD Memiliki PO BP Memiliki PO Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) RKD (kodeRKD, tgl, keterangan, kodePegawai, kodeDriver, kodeHelper1, kodeHelper2, kodeKendaraan) Primary Key kodeRKD Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodeDriver references Pegawai(kodePegawai) Foreign Key kodeHelper1 references Pegawai(kodePegawai) Foreign Key kodeHelper2 references Pegawai(kodePegawai) Foreign Key kodeKendaraan references Kendaraan(noPolisi) BP (kodeBP, tgl, jenisPembayaran, jmlPinjamanGalon, hargaPinjamanGalon, statusBP,
BPBJ (kodeBPBJ, tgl, kodePegawai) Primary Key kodeBPBJ Foreign Key kodePegawai references Pegawai(kodePegawai)
(kodePO, tgl, kodePegawai, kodeRKD, kodeBP) Primary Key KodePO Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodeRKD references RKD(kodeRKD) Foreign Key kodeBP references BP(kodeBP) PO
88 kodePelanggan, kodePegawai) Primary Key kodeBP Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) Pegawai Menangani SJ Penagihan BerdasarkanPada SJ Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) Penagihan (kodePenagihan, tglPenagihan, tglPembayaran, disc, ppn, statusTagih, kodeKolektor, kodePegawaiByr, kodePegawaiTgh) Primary Key kodePenagihan Foreign Key kodeKolektor references Pegawai(kodePegawai) Foreign Key kodePegawaiByr references Pegawai(kodePegawai) Foreign Key kodePegawaiTgh references Pegawai(kodePegawai) Derived jumlah (∑(SJ.totalDijual) Derived tglJatuhTempo(dateadd( day, 10, tglPenagihan)) Derived totalPenagihan ((jumlah – (jumlah * disc)) + (jumlah – (jumlah * disc)) * ppn) BP Memiliki BPDetail Barang Mempunyai BPDetail BP (kodeBP, tgl, jenisPembayaran, jmlPinjamanGalon, hargaPinjamanGalon, statusBP, kodePelanggan, kodePegawai) Primary Key kodeBP
(kodeSJ, tgl, kodePegawai, kodePenagihan) Primary Key kodeSJ Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodePenagihan references Penagihan(kodePenagihan) Derived totalDijual (∑(SJDetail.jumlahDijual)) SJ
(kodeBP, kodeBarang, hargaBarang, jmlDefaultKirim) Primary Key kodeBP, kodeBarang Foreign Key kodeBP references BPDetail
89 Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang BSTPJ Memiliki BSTBJDetail Barang Mempunyai BSTPJDeatail BSTPJ (kodeBSTPJ, tgl, kodePegawai) Primary Key kodeBSTPJ Foreign Key kodePegawai references Pegawai(kodePegawai) Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang PO Memiliki PODetail Barang Mempunyai PODetail PO (kodePO, tgl, kodePegawai, kodeRKD, kodeBP) Primary Key KodePO Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodeRKD references RKD(kodeRKD) Foreign Key kodeBP references BP(kodeBP) Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang ReturJual Memiliki ReturJualDetail Barang Mempunyai ReturJualDetail ReturJual (kodeReturJual, tgl, kodePelanggan, kodePegawai) Primary Key kodeReturJual Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang
BP(kodeBP) Foreign Key kodeBarang references Barang(kodeBarang)
BSTPJDetail (kodeBSTPJ, kodeBarang, qtyMasuk) Primary Key kodeBSTPJ, kodeBarang Foreign Key kodeBSTPJ references BSTPJ(kodeBSTPJ) Foreign Key kodeBarang references Barang(kodeBarang)
PODetail (kodePO, kodeBarang, qtyDiminta) Primary Key kodePO, kodeBarang Foreign Key kodePO references PO(kodePO) Foreign Key kodeBarang references Barang(kodeBarang)
ReturJualDetail (kodeReturJual, kodeBarang, qtyRetur, keterangan) Primary Key kodeReturJual, kodeBarang Foreign Key kodeReturJual references ReturJual(kodeReturJual) Foreign Key kodeBarang references Barang(kodeBarang)
90 BPBJ Memiliki BPBJDetail Barang Mempunyai BPBJDetail BPBJ (kodeBPBJ, tgl, kodePegawai) Primary Key kodeBPBJ Foreign Key kodePegawai references Pegawai(kodePegawai) Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang SJ Memiliki SJDetail Barang Mempunyai SJDetail SJ (kodeSJ, tgl, kodePegawai, kodePenagihan) Primary Key kodeSJ Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodePenagihan references Penagihan(kodePenagihan) Derived totalDijual (∑(SJDetail.jumlahDijual)) Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang
BPBJDetail (kodeBPBJ, kodeBarang, qtyDiberikan, qtySisaBarang, keterangan) Primary Key kodeBPBJ, kodeBarang Foreign Key kodeBPBJ references BPBJ(kodeBPBJ) Foreign Key kodeBarang references Barang(kodeBarang) SJDetail (kodeSJ, kodeBarang, qtyDijual, keterangan) Primary Key kodeSJ, kodeBarang Foreign Key kodeSJ references SJ(kodeSJ) Foreign Key kodeBarang references Barang(kodeBarang) Derived jumlahDijual (qtyDijual * PODetail.hargaBarang)
Tabel 3.8 One-to-many (1:*) binary relationship types
4. One-to-one (1:1) binary relationship types RKD Menghasilkan BPBJ (patisipasi mandatory pada satu sisi) RKD (kodeRKD, tgl, keterangan, BPBJ (kodeBPBJ, tgl, kodePegawai, kodePegawai, kodeDriver, kodeRKD) kodeHelper1, kodeHelper2, Primary Key kodeBPBJ kodeKendaraan) Foreign Key kodePegawai references Primary Key kodeRKD Pegawai(kodePegawai) Foreign Key kodePegawai references Foreign Key kodeRKD references Pegawai(kodePegawai) RKD(kodeRKD) Foreign Key kodeDriver references Pegawai(kodePegawai) Foreign Key kodeHelper1 references Pegawai(kodePegawai) Foreign Key kodeHelper2 references Pegawai(kodePegawai) Foreign Key kodeKendaraan references Kendaraan(noPolisi)
91 PO Memiliki SJ (patisipasi mandatory pada satu sisi) PO (kodePO, tgl, kodePegawai, SJ (kodeSJ, tgl, kodePegawai, kodeRKD, kodeBP) kodePenagihan, kodePO) Primary Key KodePO Primary Key kodeSJ Foreign Key kodePegawai references Foreign Key kodePegawai references Pegawai(kodePegawai) Pegawai(kodePegawai) Foreign Key kodeRKD references Foreign Key kodePenagihan references RKD(kodeRKD) Penagihan(kodePenagihan) Foreign Key kodeBP references Foreign Key kodePO references BP(kodeBP) PO(kodePO) Derived totalDijual (∑(SJDetail.jumlahDijual)) Tabel 3.9 One-to-one (1:1) Binary Relationship Types
5. Dokumentasi relasi dan atribut Foreign Key (kodeJabatan, namaJabatan) Primary Key kodeJabatan Pegawai (kodePegawai, namaPegawai, alamatPegawai, kota, kodePos, kecamatan, kelurahan, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, noTelepon, noHP, statusPegawai) Primary Key kodePegawai Foreign Key kodeJabatan references Jabatan(kodeJabatan) TeleponPlgn (noTelepon, kodePelanggan) Primary Key noTelepon Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Kendaraan (noPolisi, merekMobil, tipe, tahun, kapasitasStd, kapasitasOpt, statusKendaraan, keterangan) Primary Key noPolisi Jabatan
Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang Pelanggan (kodePelanggan, namaPelanggan, alamatPengiriman, kotaKirim, kodePosKirim, kecKirim, kelKirim, alamatPenagihan, kotaTagih, kodePosTagih, kecTagih, kelTagih, NPWP, statusPelanggan) Primary Key kodePelanggan
FaxPlgn (noFax, kodePelanggan) Primary Key noFax Foreign Key kodePelanggan references Pelanggan(kodePelanggan) (kodeRKD, tgl, keterangan, kodePegawai, kodeDriver, kodeHelper1, kodeHelper2, kodeKendaraan) Primary Key kodeRKD Foreign Key kodePegawai references RKD
92
(kodeBP, tgl, jenisPembayaran, jmlPinjamanGalon, hargaPinjamanGalon, statusBP, kodePelanggan, kodePegawai) Primary Key kodeBP Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) JadwalKirim (hariKirim, kodeBP) Primary Key hariKirim, kodeBP Foreign Key kodeBP references BP(kodeBP) BP
(kodePO, tgl, kodePegawai, kodeRKD, kodeBP) Primary Key KodePO Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodeRKD references RKD(kodeRKD) Foreign Key kodeBP references BP(kodeBP) PO
Pegawai(kodePegawai) Foreign Key kodeDriver references Pegawai(kodePegawai) Foreign Key kodeHelper1 references Pegawai(kodePegawai) Foreign Key kodeHelper2 references Pegawai(kodePegawai) Foreign Key kodeKendaraan references Kendaraan(noPolisi) BPDetail (kodeBP, kodeBarang, hargaBarang, jmlDefaultKirim) Primary Key kodeBP, kodeBarang Foreign Key kodeBP references BP(kodeBP) Foreign Key kodeBarang references Barang(kodeBarang) (kodePenagihan, tglPenagihan, tglPembayaran, disc, ppn, statusTagih, kodeKolektor, kodePegawaiByr, kodePegawaiTgh) Primary Key kodePenagihan Foreign Key kodeKolektor references Pegawai(kodePegawai) Foreign Key kodePegawaiByr references Pegawai(kodePegawai) Foreign Key kodePegawaiTgh references Pegawai(kodePegawai) Derived jumlah (∑(SJ.totalDijual) Derived tglJatuhTempo(dateadd( day, 10, tglPenagihan)) Derived totalPenagihan ((jumlah – (jumlah * disc)) + (jumlah – (jumlah * disc)) * ppn) PODetail (kodePO, kodeBarang, qtyDiminta) Primary Key kodePO, kodeBarang Foreign Key kodePO references PO(kodePO) Foreign Key kodeBarang references Barang(kodeBarang) Penagihan
93 (kodeSJ, tgl, kodePegawai, kodePenagihan, kodePO) Primary Key kodeSJ Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodePenagihan references Penagihan(kodePenagihan) Foreign Key kodePO references PO(kodePO) Derived totalDijual (∑(SJDetail.jumlahDijual)) BPBJ (kodeBPBJ, tgl, kodeRKD, kodePegawai) Primary Key kodeBPBJ Foreign Key kodePegawai references Pegawai(kodePegawai) Foreign Key kodeRKD references RKD(kodeRKD) SJ
(kodeBSTPJ, tgl, kodePegawai) Primary Key kodeBSTPJ Foreign Key kodePegawai references Pegawai(kodePegawai) BSTPJ
(kodeReturJual, tgl, kodePelanggan, kodePegawai) Primary Key kodeReturJual Foreign Key kodePelanggan references Pelanggan(kodePelanggan) Foreign Key kodePegawai references Pegawai(kodePegawai) ReturJual
SJDetail (kodeSJ, qtyDijual, kodeBarang, keterangan) Primary Key kodeSJ, kodeBarang Foreign Key kodeSJ references SJ(kodeSJ) Foreign Key kodeBarang references Barang(kodeBarang) Derived jumlahDijual (qtyDijual * PODetail.hargaBarang) BPBJDetail (kodeBPBJ, kodeBarang, qtyDiberikan, qtySisaBarang, keterangan) Primary Key kodeBPBJ, kodeBarang Foreign Key kodeBPBJ references BPBJ(kodeBPBJ) Foreign Key kodeBarang references Barang(kodeBarang) BSTPJDetail (kodeBSTPJ, kodeBarang, qtyMasuk) Primary Key kodeBSTPJ, kodeBarang Foreign Key kodeBSTPJ references BSTPJ(kodeBSTPJ) Foreign Key kodeBarang references Barang(kodeBarang) ReturJualDetail (kodeReturJual, kodeBarang, qtyRetur, keterangan) Primary Key kodeReturJual, kodeBarang Foreign Key kodeReturJual references ReturJual(kodeReturJual) Foreign Key kodeBarang references Barang(kodeBarang)
Tabel 3.10 Dokumentasi Relasi dan Atribut Foreign Key
94 3.4.3
Validasi Relasi Menggunakan Normalisasi •
Pegawai UNF : Pegawai = kodePegawai + namaPegawai + alamatPegawai + kota + kodePos + namaKec + namaKel + tglLahir + jenisKelamin + tglMasukKerja + kodeJabatan + noTelepon + noHP + statusPegawai
1NF : Pegawai = @kodePegawai + namaPegawai + alamatPegawai + kota + kodePos + kecamatan + kelurahan + tglLahir + jenisKelamin
+
tglMasukKerja
+
kodeJabatan
+
noTelepon + noHP + statusPegawai Primary Key kodePegawai
2NF : Pegawai = @kodePegawai + namaPegawai + alamatPegawai + kota + kodePos + kecamatan + kelurahan + tglLahir + jenisKelamin
+
tglMasukKerja
noTelepon + noHP + statusPegawai Primary Key kodePegawai
+
kodeJabatan
+
95 3NF : Pegawai = @kodePegawai + namaPegawai + alamatPegawai + kodeKel + tglLahir + jenisKelamin + tglMasukKerja + kodeJabatan + noTelepon + noHP + statusPegawai Primary Key kodePegawai Foreign Key kodeKel references Kelurahan(kodeKel)
Kelurahan = @kodeKel + namaKel + kodeKec + kodeKota + kodePos Primary Key kodeKel Foreign Key kodeKec references Kecamatan(kodeKec) Foreign Key kodeKota references Kota(kodeKota) Foreign Key kodePos references Pos(kodePos)
Kecamatan = @kodeKec + namaKec Primary Key kodeKec
Kota = @kodeKota + namaKota Primary Key kodeKota
Pos = @kodePos Primary Key kodePos
96 •
Pelanggan : UNF Pelanggan = kodePelanggan + namaPelanggan + alamatPengiriman + kotaKirim + kodePosKirim + kecKirim + kelKirim + alamatPenagihan + kotaTagih +
kodePosTagih +
kecTagih + kelTagih + NPWP + statusPelanggan
1NF Pelanggan = kodePelanggan + namaPelanggan + alamatPengiriman + kotaKirim + kodePosKirim + kecKirim + kelKirim + alamatPenagihan + kotaTagih + kodePosTagih + kecTagih + kelTagih + NPWP + statusPelanggan Primary Key kodePelanggan
2NF Pelanggan = kodePelanggan + namaPelanggan + alamatPengiriman + kotaKirim + kodePosKirim + kecKirim + kelKirim + alamatPenagihan + kotaTagih + kodePosTagih + kecTagih + kelTagih + NPWP + statusPelanggan Primary Key kodePelanggan
97 3NF Pelanggan = kodePelanggan + namaPelanggan + alamatPengiriman + kodeKelKirim + alamatPenagihan + kodeKelTagih + NPWP + statusPelanggan Primary Key kodePelanggan Foreign Key kodeKelKirim references Kelurahan(kodeKel) Foreign Key kodeKelTagih references Kelurahan(kodeKel)
Kelurahan = @kodeKel + namaKel + kodeKec + kodeKota + kodePos Primary Key kodeKel Foreign Key kodeKec references Kecamatan(kodeKec) Foreign Key kodeKota references Kota(kodeKota) Foreign Key kodePos references Pos(kodePos)
Kecamatan = @kodeKec + namaKec Primary Key kodeKec
Kota = @kodeKota + namaKota Primary Key kodeKota
Pos = @kodePos Primary Key kodePos
98 3.4.4
Mendefinisikan Integrity Constraints
Jabatan (kodeJabatan, namaJabatan) Primary Key kodeJabatan Barang (kodeBarang, namaBarang, merek, satuan, stok) Primary Key kodeBarang Kota (kodeKota, namaKota) Primary Key kodeKota Kecamatan (kodeKec, namaKec) Primary Key kodeKec Pos (kodePos) Primary Key kodePos Kelurahan (kodeKel, namaKel, kodeKec, kodeKota, kodePos) Primary Key kodeKel Foreign Key kodeKec references Kecamatan(kodeKec) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeKota references Kota(kodeKota) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodePos references Pos(kodePos) ON UPDATE CASCADE ON DELETE CASCADE Pegawai (kodePegawai, namaPegawai, alamatPegawai, kodeKel, tglLahir, jenisKelamin, tglMasukKerja, noTelepon, noHP, kodeJabatan, statusPegawai) Primary Key kodePegawai Foreign Key kodeKel references Kelurahan(kodeKel) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeJabatan references Jabatan(kodeJabatan) ON UPDATE CASCADE ON DELETE NO ACTION Pelanggan (kodePelanggan, namaPelanggan, alamatPengiriman, kodeKelKirim, alamatPenagihan, kodeKelTagih, NPWP, statusPelanggan) Primary Key kodePelanggan Foreign Key kodeKelKirim references Kelurahan(kodeKel) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeKelTagih references Kelurahan(kodeKel) ON UPDATE CASCADE ON DELETE CASCADE TeleponPlgn (noTelepon, kodePelanggan) Primary Key noTelepon Foreign Key kodePelanggan references Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE CASCADE FaxPlgn (noFax, kodePelanggan) Primary Key noFax Foreign Key kodePelanggan references Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE CASCADE
99 Kendaraan (noPolisi, merekMobil, tipe, tahun, kapasitasStd, kapasitasOpt, statusKendaraan, keterangan) Primary Key Kendaraan BP (kodeBP, tgl, jenisPembayaran, jmlPinjamanGalon, hargaPinjamanGalon, statusBP, kodePelanggan, kodePegawai) Primary Key kodeBP Foreign Key kodePelanggan references Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodePegawai references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION BPDetail (kodeBP, kodeBarang, hargaBarang, jmlDefaultKirim) Primary Key kodeBP, kodeBarang Foreign Key kodeBP references BP(kodeBP) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeBarang references Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION JadwalKirim (hariKirim, kodeBP) Primary Key hariKirim, kodeBP Foreign Key kodeBP references BP(kodeBP) ON UPDATE CASCADE ON DELETE CASCADE RKD (kodeRKD, tgl, keterangan, kodePegawai, kodeDriver, kodeHelper1, kodeHelper2, kodeKendaraan) Primary Key kodeRKD Foreign Key kodePegawai references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodeDriver references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodeHelper1references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodeHelper2references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodeKendaraan references Kendaraan(noPolisi) ON UPDATE CASCADE ON DELETE NO ACTION PO (kodePO, tgl, kodePegawai, kodeRKD, kodeBP) Primary Key KodePO Foreign Key kodePegawai references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodeRKD references RKD(kodeRKD) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodeBP references BP(kodeBP) ON UPDATE CASCADE ON DELETE NO ACTION
100 PODetail (kodePO, kodeBarang, qtyDiminta) Primary Key kodePO, kodeBarang Foreign Key kodePO references PO(kodePO) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeBarang references Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION Penagihan (kodePenagihan, tglPenagihan, tglPembayaran, disc, ppn, statusTagih, kodeKolektor, kodePegawaiByr, kodePegawaiTgh) Primary Key kodePenagihan Foreign Key kodeKolektor references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodePegawaiByr references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodePegawaiTgh references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Derived jumlah (∑(SJ.totalDijual) Derived tglJatuhTempo(dateadd(day, 10, tglPenagihan)) Derived totalPenagihan ((jumlah – (jumlah * disc)) + (jumlah – (jumlah * disc)) * ppn) SJ (kodeSJ, tgl, kodePegawai, kodePenagihan, kodePO) Primary Key kodeSJ Foreign Key kodePegawai references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodePenagihan references Penagihan(kodePenagihan) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodePO references PO(kodePO) ON UPDATE CASCADE ON DELETE NO ACTION Derived totalDijual (∑(SJDetail.jumlahDijual)) SJDetail (kodeSJ, kodeBarang, qtyDijual, keterangan) Primary Key kodeSJ, kodeBarang Foreign Key kodeSJ references SJ(kodeSJ) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeBarang references Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION Derived jumlahDijual (qtyDijual * PODetail.hargaBarang) BPBJ (kodeBPBJ, tgl, kodeRKD, kodePegawai) Primary Key kodeBPBJ Foreign Key kodePegawai references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodeRKD references RKD(kodeRKD) ON UPDATE CASCADE ON DELETE NO ACTION
101 BPBJDetail (kodeBPBJ, kodeBarang, qtyDiberikan, qtySisaBarang, keterangan) Primary Key kodeBPBJ, kodeBarang Foreign Key kodeBPBJ references BPBJ(kodeBPBJ) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeBarang references Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION BSTPJ (kodeBSTPJ, tgl, kodePegawai) Primary Key kodeBSTPJ Foreign Key kodePegawai references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION BSTPJDetail (kodeBSTPJ, kodeBarang, qtyMasuk) Primary Key kodeBSTPJ, kodeBarang Foreign Key kodeBSTPJ references BSTPJ(kodeBSTPJ) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeBarang references Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION ReturJual (kodeReturJual, tgl, kodePelanggan, kodePegawai) Primary Key kodeReturJual Foreign Key kodePelanggan references Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key kodePegawai references Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION ReturJualDetail (kodeReturJual, kodeBarang, qtyRetur, keterangan) Primary Key kodeReturJual, kodeBarang Foreign Key kodeReturJual references ReturJual(kodeReturJual) ON UPDATE CASCADE ON DELETE CASCADE Foreign Key kodeBarang references Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION Tabel 3.11 Mendefinisikan Integrity Constraints
102
Gambar 3.31 Diagram ER dengan Penambahan Primary Key dan Foreign Key
3.5
Perancangan Basis Data Fisikal 3.5.1
Merancang Relasi Dasar Relasi Jabatan : Domain kodeJabatan: fixed length character string, length 6 Domain namaJabatan: variable length character string, length 30
103 Jabatan ( kodeJabatan
KodeJabatan NOT NULL,
namaJabatan
NamaJabatan NOT NULL,
PRIMARY KEY (kodeJabatan));
Relasi Barang : Domain kodeBarang:
fixed length character string, length 6
Domain namaBarang:
variable length character string, length 30
Domain merek:
variable length character string, length 30
Domain satuan:
variable length character string, length 30
Domain stok:
integer
Barang ( kodeBarang
KodeBarang NOT NULL,
namaBarang
NamaBarang NOT NULL,
merek
NamaMerek
satuan
NamaSatuan NOT NULL,
stok
StokBarang
NOT NULL,
NOT NULL,
PRIMARY KEY (kodeBarang));
Relasi Kota Domain kodeKota:
fixed length character string, length 6
Domain namaKota:
variable length character string, length 30
Kota ( kodeKota
KodeKota
NOT NULL,
104 namaKota
NamaKota
NOT NULL,
PRIMARY KEY (kodeKota));
Relasi Kecamatan Domain kodeKec:
fixed length character string, length 6
Domain namaKec:
variable length character string, length 30
Kecamatan ( kodeKec
KodeKecamatan
NOT NULL,
namaKec
NamaKecamatan
NOT NULL,
PRIMARY KEY (kodeKec));
Relasi Pos Domain kodePos:
integer, in the range 10000 – 99999
Pos ( KodePos
KodePos
NOT NULL,
PRIMARY KEY (kodePos));
Relasi Kelurahan Domain kodeKel
fixed length character string, length 6
Domain namaKel:
variable length character string, length 30
Domain kodeKec:
fixed length character string, length 6
Domain kodeKota:
fixed length character string, length 6
Domain kodePos:
integer, in the range 10000 – 99999
105 Kelurahan ( kodeKel
KodeKelurahan
NOT NULL,
namaKel
NamaKelurahan
NOT NULL,
kodeKec
KodeKecamatan
NOT NULL,
kodeKota
KodeKota
NOT NULL,
kodePos
KodePos
NOT NULL,
PRIMARY KEY (kodeKel), FOREIGN KEY kodeKec REFERENCES Kecamatan(kodeKec) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodeKota REFERENCES Kota(kodeKota) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodePos REFERENCES Pos(kodePos) ON UPDATE CASCADE ON DELETE CASCADE);
Relasi Pegawai : Domain kodePegawai:
fixed length character string, length 10
Domain namaPegawai:
variable length character string, length 30
Domain alamatPegawai:
variable length character string, length 100
Domain kodeKel:
fixed length character string, length 6
Domain tglLahir:
date, must be less than now()
Domain jenisKelamin:
single character, must be one of ‘L’, ‘P’
Domain tglMasukKerja:
date
Domain noTelepon
variable length character string, length 12
Domain noHP:
variable length character string, length 12
106 Domain kodeJabatan:
fixed length character string, length 6
Domain statusPegawai:
boolean
Pegawai( kodePegawai
KodePegawai
NOT NULL,
namaPegawai
NamaPegawai
NOT NULL,
alamatPegawai
AlamatPegawai
NOT NULL,
kodeKel
KodeKelurahan
NOT NULL,
tglLahir
TanggalLahir
NOT NULL,
jenisKelamin
JenisKelamin
NOT NULL,
tglMasukKerja
TanggalMasukKerja NOT NULL,
noTelepon
NomorTelepon,
noHP
NomorHP,
kodeJabatan
KodeJabatan
NOT NULL,
statusPegawai
StatusPegawai
NOT NULL,
PRIMARY KEY (kodeJabatan), FOREIGN KEY kodeKel REFERENCES Kelurahan(kodeKel) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeJabatan REFERENCES Jabatan(kodeJabatan) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi Pelanggan : Domain kodePelanggan:
fixed length character string, length 10
Domain namaPelanggan:
variable length character string, length 30
Domain alamatPengiriman:
variable length character string, length 100
107 Domain kodeKelKirim:
fixed length character string, length 6
Domain alamatPenagihan:
variable length character string, length 100
Domain kodeKelTagih:
fixed length character string, length 6
Domain NPWP:
variable length character string, length 25
Domain statusPelanggan:
Boolean
Pelanggan ( kodePelanggan
KodePelanggan
NOT NULL,
namaPelanggan
NamaPelanggan
NOT NULL,
alamatPengiriman
AlamatPengiriman
NOT NULL,
kodeKelKirim
KodeKelurahanKirim NOT NULL,
alamatPenagihan
AlamatPenagihan
kodeKelTagih
KodeKelurahanTagih NOT NULL,
NPWP
NomorWajibPajak,
statusPelanggan
StatusPelanggan
NOT NULL,
NOT NULL,
PRIMARY KEY (kodePelanggan), FOREIGN KEY kodeKelKirim REFERENCES Kelurahan(kodeKel) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeKelTagih REFERENCES Kelurahan(kodeKel) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi TeleponPlgn : Domain noTelepon:
variable length character string, length 12
Domain kodePelanggan:
fixed length character string, length 10
TeleponPlgn (
108 noTelepon
NomorTelepon
NOT NULL,
kodePelanggan
KodePelanggan
NOT NULL,
PRIMARY KEY (noTelepon), FOREIGN
KEY
kodePelanggan
REFERENCES
Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE CASCADE);
Relasi FaxPlgn : Domain noFax:
variable length character string, length 12
Domain kodePelanggan:
fixed length character string, length 10
FaxPlgn ( noFax
NomorFaximile
NOT NULL,
kodePelanggan
KodePelanggan
NOT NULL,
PRIMARY KEY (noFax), FOREIGN
KEY
kodePelanggan
REFERENCES
Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE CASCADE);
Relasi Kendaraan : Domain noPolisi:
variable length character string, length 8
Domain merekMobil:
variable length character string, length 30
Domain tipe:
variable length character string, length 30
Domain tahun:
integer
Domain kapasitasStd:
integer
109 Domain kapasitasOpt:
integer
Domain statusKendaraan:
boolean
Domain keterangan:
variable length character string, length 100
Kendaraan ( noPolisi
NomorPolisi
NOT NULL,
merekMobil
Merek
NOT NULL,
tipe
Tipe
NOT NULL,
tahun
Tahun
NOT NULL,
kapasitasStd
KapasitasStandart
NOT NULL,
kapasitasOpt
KapasitasOptimal
NOT NULL,
statusKendaraan
StatusKendaraan
NOT NULL,
keterangan
Keterangan,
PRIMARY KEY (noPolisi));
Relasi BP : Domain kodeBP:
fixed length character string, length 10
Domain tgl:
date
Domain jenisPembayaran:
single character, must be one of ‘K’, ‘L’
Domain jmlPinjamanGalon:
integer
Domain hargaPinjamanGalon:monetary value Domain statusBP:
boolean
Domain kodePelanggan:
fixed length character string, length 10
Domain kodePegawai:
fixed length character string, length 10
110 BP ( kodeBP
KodeBP
NOT NULL,
tgl
Tanggal
NOT NULL,
jenisPembayaran
JenisPembayaran
NOT NULL,
jmlPinjamanGalon
JumlahPinjamanGalon
NOT NULL,
hargaPinjamanGalon
HargaPinjamanGalon
NOT NULL,
statusBP
StatusBP
NOT NULL,
kodePelanggan
KodePelanggan
NOT NULL,
kodePegawai
KodePegawai
NOT NULL,
PRIMARY KEY (kodeBP), FOREIGN KEY kodePelanggan REFERENCES Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodePegawai REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi BPDetail : Domain kodeBP:
fixed length character string, length 6
Domain kodeBarang:
fixed length character string, length 6
Domain hargaBarang:
monetary value
Domain jmlDefaultKirim:
integer
BPDetail ( kodeBP
KodeBP
NOT NULL,
kodeBarang
KodeBarang
NOT NULL,
111 hargaBarang
HargaBarang
NOT NULL,
jmlDefaultKirim
JumlahDefaultKirim NOT NULL,
PRIMARY KEY (kodeBP, kodeBarang), FOREIGN KEY kodeBP REFERENCES BP(kodeBP) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodeBarang REFERENCES Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi JadwalKirim : Domain hariKirim:
variable length character string, length 6
Domain kodeBP:
fixed length character string, length 10
JadwalKirim ( hariKirim
HariKirim
NOT NULL,
kodeBP
KodeBP
NOT NULL,
PRIMARY KEY (HariKirim, KodeBP), FOREIGN KEY kodeBP REFERENCES BP(kodeBP) ON UPDATE CASCADE ON DELETE CASCADE);
Relasi RKD : Domain kodeRKD:
fixed length character string, length 10
Domain tgl:
date
Domain keterangan:
variable length character string, length 100
Domain kodePegawai:
fixed length character string, length 10
Domain kodeDriver:
fixed length character string, length 10
112 Domain kodeHelper1:
fixed length character string, length 10
Domain kodeHelper2:
fixed length character string, length 10
Domain kodeKendaraan:
variable length character string, length 8
RKD ( kodeRKD
KodeRKD
NOT NULL,
tgl
Tanggal
NOT NULL,
keterangan
Keterangan,
kodePegawai
KodePegawai
NOT NULL,
kodeDriver
Supir
NOT NULL,
kodeHelper1
PembantuSupir1
NOT NULL,
kodeHelper2
PembantuSupir2
NOT NULL,
kodeKendaraan
KodeKendaraan
NOT NULL,
PRIMARY KEY (kodeRKD), FOREIGN KEY kodePegawai REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeDriver REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeHelper1 REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeHelper2 REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeKendaraan REFERENCES Kendaraan(noPolisi) ON UPDATE CASCADE ON DELETE NO ACTION);
113 Relasi PO : Domain kodePO:
fixed length character string, length 10
Domain tgl:
date
Domain kodePegawai:
fixed length character string, length 10
Domain kodeRKD:
fixed length character string, length 10
Domain kodeBP:
fixed length character string, length 10
PO ( kodePO
KodePO
NOT NULL,
tgl
Tanggal
NOT NULL,
kodePegawai
KodePegawai
NOT NULL,
kodeRKD
KodeRKD,
kodeBP
KodeBP
NOT NULL,
PRIMARY KEY (kodePO), FOREIGN KEY kodePegawai REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeRKD REFERENCES RKD(kodeRKD) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodeBP REFERENCES BP(kodeBP) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi PODetail : Domain kodePO:
fixed length character string, length 10
Domain kodeBarang:
fixed length character string, length 6
Domain qtyDiminta:
integer
114 PODetail ( kodePO
kodePO
NOT NULL,
kodeBarang
KodeBarang
NOT NULL,
qtyDiminta
KuantitiDiminta
NOT NULL,
PRIMARY KEY (kodePO, kodeBarang), FOREIGN KEY kodePO REFERENCES PO(kodePO) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodeBarang REFERENCES Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi Penagihan : Domain kodePenagihan:
fixed length character string, length 10
Domain tglPenagihan:
date
Domain tglJatuhTempo:
date
Domain tglPembayaran:
date
Domain jumlah:
monetary value
Domain disc:
float
Domain ppn:
float
Domain totalPenagihan:
monetary value
Domain statusTagih:
boolean
Domain kodeKolektor:
fixed length character string, length 10
Domain kodePegawaiByr:
fixed length character string, length 10
Domain kodePegawaiTgh:
fixed length character string, length 10
115 Penagihan ( kodePenagihan
kodePenagihan
NOT NULL,
tglPenagihan
TanggalPenagihan
NOT NULL,
tglPembayaran
TanggalPembayaran
NOT NULL,
jumlah
Jumlah
NOT NULL,
disc
PotonganHarga
NOT NULL,
ppn
PajakPertambahanNilai
NOT NULL,
totalPenagihan
TotalPenagihan
NOT NULL,
statusTagih
StatusTagih
NOT NULL,
kodeKolektor
KodeKolektor,
kodePegawaiByr
KodePegawaiBayar,
kodePegawaiTgh
KodePegawaiTagih
NOT NULL,
PRIMARY KEY (kodePenagihan), FOREIGN KEY kodeKolektor REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodePegawaiByr REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodePegawaiTgh REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, Derived jumlah (∑(SJ.totalDijual), Derived tglJatuhTempo (dateadd(day, 10, tglPenagihan)), Derived totalPenagihan ((jumlah – (jumlah * disc)) + (jumlah – (jumlah * disc)) * ppn);
116 Relasi SJ : Domain kodeSJ:
fixed length character string, length 10
Domain tgl:
date
Domain totalDijual:
monetary value
Domain kodePegawai:
fixed length character string, length 10
Domain kodePO:
fixed length character string, length 10
Domain kodePenagihan:
fixed length character string, length 10
SJ ( kodeSJ
KodeSJ
NOT NULL,
tgl
Tanggal
NOT NULL,
totalDijual
TotalDijual,
kodePegawai
KodePegawai
NOT NULL,
kodePO
KodePO
NOT NULL,
kodePenagihan
KodePenagihan,
PRIMARY KEY (kodeSJ), FOREIGN KEY kodePegawai REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodePO REFERENCES PO(kodePO) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN
KEY
kodePenagihan
REFERENCES
Penagihan(kodePenagihan) ON UPDATE CASCADE ON DELETE NO ACTION), Derived totalDijual (∑(SJDetail.jumlahDijual));
117 Relasi SJDetail : Domain kodeSJ:
fixed length character string, length 10
Domain kodeBarang:
fixed length character string, length 6
Domain qtyDijual:
integer
Domain jumlahDijual
monetary value
Domain keterangan:
variable length character string, length 100
SJDetail ( kodeSJ
KodeSJ
NOT NULL,
kodeBarang
KodeBarang
NOT NULL,
qtyDijual
KuantitiDijual,
jumlahDijual
Jumlah Dijual,
keterangan
Keterangan,
PRIMARY KEY (kodeSJ, kodeBarang), FOREIGN KEY kodeSJ REFERENCES SJ(kodeSJ) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodeBarang REFERENCES Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION, Derived jumlahDijual (qtyDijual * PODetail.hargaBarang);
Relasi BPBJ : Domain kodeBPBJ:
fixed length character string, length 10
Domain tgl:
date
Domain kodeRKD:
fixed length character string, length 10
Domain kodePegawai:
fixed length character string, length 10
118 BPBJ ( kodeBPBJ
KodeBPBJ
NOT NULL,
tgl
Tanggal
NOT NULL,
kodeRKD
KodeRKD
NOT NULL,
kodePegawai
KodePegawai
NOT NULL,
PRIMARY KEY (kodeBPBJ), FOREIGN
KEY
kodeRKD
REFERENCES
RKD(kodeRKD)
ON
UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodePegawai REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi BPBJDetail : Domain kodeBPBJ:
fixed length character string, length 10
Domain kodeBarang:
fixed length character string, length 6
Domain qtyDiberikan:
integer
Domain qtySisaBarang:
integer
Domain keterangan:
variable length character string, length 100
BPBJDetail ( kodeBPBJ
KodeBPBJ
NOT NULL,
kodeBarang
KodeBarang
NOT NULL,
qtyDiberikan
KuantitiDiberikan
NOT NULL,
qtySisaBarang
KuantitiSisaBarang,
keterangan
Keterangan,
PRIMARY KEY (kodeBPBJ, kodeBarang),
119 FOREIGN KEY kodeBPBJ REFERENCES BPBJ(kodeBPBJ) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodeBarang REFERENCES Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION,
Relasi BSTPJ : Domain kodeBSTPJ:
fixed length character string, length 10
Domain tgl:
date
Domain kodePegawai:
fixed length character string, length 10
BSTPJ ( kodeBSTPJ
kodeBSTPJ
NOT NULL,
tgl
Tanggal
NOT NULL,
kodePegawai
KodePegawai
NOT NULL,
PRIMARY KEY (kodeBSTPJ), FOREIGN KEY kodePegawai REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION);
Relasi BSTPJDetail : Domain kodeBSTPJ:
fixed length character string, length 10
Domain kodeBarang:
fixed length character string, length 6
Domain qtyMasuk:
integer
BSTPJDetail ( kodeBSTPJ
KodeBSTPJ
NOT NULL,
kodeBarang
KodeBarang
NOT NULL,
120 qtyMasuk
KuantitiMasuk
NOT NULL,
PRIMARY KEY (kodeBSTPJ, kodeBarang), FOREIGN KEY kodeBSTPJ REFERENCES BSTPJ(kodeBSTPJ) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodeBarang REFERENCES Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION,
Relasi ReturJual : Domain kodeReturJual:
fixed length character string, length 10
Domain tgl:
date
Domain kodePelanggan:
fixed length character string, length 10
Domain kodePegawai:
fixed length character string, length 10
ReturJual ( kodeReturJual
KodeReturJual
NOT NULL,
tgl
Tanggal
NOT NULL,
kodePelanggan
KodePelanggan
NOT NULL,
kodePegawai
KodePegawai
NOT NULL,
PRIMARY KEY (kodeReturJual), FOREIGN KEY kodePelanggan REFERENCES Pelanggan(kodePelanggan) ON UPDATE CASCADE ON DELETE NO ACTION, FOREIGN KEY kodePegawai REFERENCES Pegawai(kodePegawai) ON UPDATE CASCADE ON DELETE NO ACTION);
121 Relasi ReturJualDetail : Domain kodeReturJual:
fixed length character string, length 10
Domain kodeBarang:
fixed length character string, length 6
Domain qtyRetur:
integer
Domain keterangan:
variable length character string, length 100
ReturJualDetail ( kodeReturJual
KodeReturJual
NOT NULL,
kodeBarang
KodeBarang
NOT NULL,
qtyRetur
Kuantiti
NOT NULL,
keterangan
Keterangan,
PRIMARY KEY (kodeReturJual, kodeBarang), FOREIGN KEY kodeReturJual REFERENCES ReturJual(kodeReturJual) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY kodeBarang REFERENCES Barang(kodeBarang) ON UPDATE CASCADE ON DELETE NO ACTION);
122 3.5.2
Menganalisa Transaksi Data Entry
Transaksi/ Relasi I
(a) R U D I
(b) R U D I
Jabatan Barang x Kota x Kecamatan Pos Kelurahan Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(c) R U D I
(d) R U D
x x x
x x
Tabel 3.12 Transaction/Relation Cross-Referenced Matrix Entri Data Transaksi (a) - (d)
a) Masukkan detail dari Kota b) Masukkan detail dari Kecamatan c) Masukkan detail dari Pos d) Masukkan detail dari Kelurahan
123
Transaksi/ Relasi I
(e) (f) R U D I R U D I x
Jabatan Barang Kota Kecamatan Pos Kelurahan Pegawai x Pelanggan x TeleponPlgn x FaxPlgn Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(g) R U D I x
x
(h) R U D
x
x x x
Tabel 3.13 Transaction/Relation Cross-Referenced Matrix Entri Data Transaksi (e) - (h)
e) Masukkan detail dari pelanggan f) Masukkan detail dari jabatan g) Masukkan detail dari pegawai h) Masukkan detail dari Penagihan
124 Transaksi/ Relasi I
(i) R U D I
(j) R U D I
Jabatan x Barang Kota Kecamatan Pos Kelurahan Pegawai Pelanggan TeleponPlgn FaxPlgn x Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(k) R U D I
(l) R U D
x
x x
x
x x x x
Tabel 3.14 Transaction/Relation Cross-Referenced Matrix Entri Data Transaksi (i) - (l)
i) Masukan detail dari Kendaraan j) Masukkan detail dari Barang k) Masukkan detail dari BP l) Masukkan detail dari RKD
125 Transaksi/ Relasi I
(m) R U D I
(n) R U D I
Jabatan x x Barang Kota Kecamatan Pos Kelurahan x x Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan BP BPDetail JadwalKirim x RKD PO PODetail Penagihan SJ SJDetail x BPBJ x BPBJDetail x BSTPJ x BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(o) R U D I
(p) R U D
x
x
x x
x
x x
x x
Tabel 3.15 Transaction/Relation Cross-Referenced Matrix Entri Data Transaksi (m) - (p)
m) Masukkan detail dari BPBJ n) Masukkan detail dari BSTPJ o) Masukkan detail dari PO p) Masukkan detail dari ReturJual
126 Transaksi/ Relasi I
(q) R U D I
(r) R U D
Jabatan x Barang Kota Kecamatan Pos Kelurahan x Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan x BP BPDetail x JadwalKirim RKD x PO PODetail Penagihan x SJ x SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete Tabel 3.16 Transaction/Relation Cross-Referenced Matrix Entri Data Transaksi (q) - (r)
q) Masukkan detail dari JadwalKirim r) Masukkan detail dari SJ
127 Update / Delete Data Transaksi/ Relasi I
(a) R U D I
(b) R U D I
Jabatan Barang x x x Kota x x x Kecamatan Pos Kelurahan Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(c) R U D I
x
x
x
(d) R U D
x x x x
x
x
Tabel 3.17 Transaction/Relation Cross-Referenced Matrix Mengubah dan Menghapus Data Transaksi (a) – (d)
a) Mengubah / menghapus detail dari kota b) Mengubah / menghapus detail dari kecamatan c) Mengubah / menghapus detail dari pos d) Mengubah / menghapus detail dari kelurahan
128 Transaksi/ Relasi I
(e) R U D I x x x
(f) R U D I x
Jabatan Barang Kota Kecamatan Pos Kelurahan x x x Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(g) R U D I
(h) R U D
x x x x
x x x
x x x x
x
x
Tabel 3.18 Transaction/Relation Cross-Referenced Matrix Mengubah dan Menghapus Data Transaksi (e) – (h)
e) Mengubah / menghapus detail dari jabatan f) Mengubah / menghapus detail dari pegawai g) Mengubah / menghapus detail dari pelanggan h) Mengubah detail dari RKD
129 Transaksi/ Relasi I
(i) R U D I
(j) R U D I
Jabatan x x x Barang Kota Kecamatan Pos Kelurahan Pegawai Pelanggan TeleponPlgn FaxPlgn x x x Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(k) R U D I
(l) R U D
x
x
x x
x
x x
x x
x x x x
x x
Tabel 3.19 Transaction/Relation Cross-Referenced Matrix Mengubah dan Menghapus Data Transaksi (i) – (l)
i) Mengubah / menghapus detail dari barang j) Mengubah / menghapus detail dari kendaraan k) Mengubah detail dari BP l) Mengubah detail dari SJ
130 Transaksi/ Relasi I
(m) R U D I
(n) R U D I
Jabatan x Barang Kota Kecamatan Pos Kelurahan x x Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan x BP BPDetail JadwalKirim x RKD x x PO x x PODetail x x Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(o) R U D I
(p) R U D
x
x
x x
x
x
x x
x x
x x
x x
Tabel 3.20 Transaction/Relation Cross-Referenced Matrix Mengubah dan Menghapus Data Transaksi (m) – (p)
m) Mengubah detail dari penagihan n) Mengubah detail dari PO o) Mengubah detail dari retur p) Mengubah detail dari BPBJ
131 Transaksi/ Relasi I
(q) R U D
Jabatan x Barang Kota Kecamatan Pos Kelurahan x Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail x x BSTPJ x x BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete Tabel 3.21 Transaction/Relation Cross-Referenced Matrix Mengubah dan Menghapus Data Transaksi (q)
q) Mengubah detail dari BSTPJ
132 Data Query Transaksi/ Relasi I
(a) R U D I x
(b) R U D I
Jabatan Barang x x Kota x x Kecamatan x x Pos x x Kelurahan x Pegawai x Pelanggan x TeleponPlgn x FaxPlgn Kendaraan x BP BPDetail x JadwalKirim RKD PO PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(c) R U D I
(d) R U D
x
x
x
x x
x
x x x
Tabel 3.22 Transaction/Relation Cross-Referenced Matrix Melihat Data Transaksi (a) – (d)
a) Tampilkan detail pegawai berdasarkan kode jabatan b) Tampilkan detail pelanggan berdasarkan hari pengiriman c) Tampilkan detail barang beserta harga untuk pelanggan tertentu d) Tampilkan nama pelanggan dan detail dari penagihan yang belum dibayar pada bulan dan tahun tertentu
133
Transaksi/ Relasi I
(e) R U D I
(f) R U D I
Jabatan x Barang Kota Kecamatan Pos Kelurahan x Pegawai x Pelanggan TeleponPlgn FaxPlgn Kendaraan BP BPDetail JadwalKirim x RKD x PO x PODetail Penagihan SJ SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(g) R U D I
(h) R U D
x
x
x x
x
x x
x x x
Tabel 3.23 Transaction/Relation Cross-Referenced Matrix Melihat Data Transaksi (e) – (h) e) Tampilkan detail persediaan barang f) Tampilkan detail PO beserta detail barang yang dipesan oleh pelanggan berdasarkan kodeRKD tertentu
134 g) Tampilkan detail SJ beserta detail barang dan harga barang yang diterima pelanggan berdasarkan bulan, tahun, dan kodePelanggan tertentu h) Tampilkan detail SJ berdasarkan kode penagihan tertentu Transaksi/ Relasi I
(i) R U D I
(j) R U D I
Jabatan x x Barang Kota Kecamatan Pos Kelurahan Pegawai Pelanggan TeleponPlgn FaxPlgn Kendaraan BP BPDetail JadwalKirim RKD PO PODetail Penagihan SJ SJDetail x BPBJ x BPBJDetail BSTPJ BSTPJDetail x ReturJual x ReturJualDetail I = Insert; R = Read; U = Update; D = Delete
(k) R U D I
(l) R U D
x
x
x x
x x
Tabel 3.24 Transaction/Relation Cross-Referenced Matrix Melihat Data Transaksi (i) – (l) i) Tampilkan detail barang berdasarkan kode retur tertentu j) Tampilkan detail barang berdasarkan kode BPBJ tertentu
135 k) Tampilkan detail barang berdasarkan kode BSTPJ tertentu l) Tampilkan detail barang berdasarkan kode PO tertentu
Transaksi/ Relasi I
(m) R U D I
(n) R U D
Jabatan x Barang Kota Kecamatan Pos Kelurahan Pegawai x Pelanggan TeleponPlgn FaxPlgn x Kendaraan x BP BPDetail JadwalKirim RKD x PO x PODetail Penagihan x SJ x SJDetail BPBJ BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail I = Insert; R = Read; U = Update; D = Delete Tabel 3.25 Transaction/Relation Cross-Referenced Matrix Melihat Data Transaksi (m) – (n) m) Tampilkan detail kendaraan yang diurut berdasarkan kapasitas standart terbesar
136 n) Tampilkan
namaPelanggan,
kodeSJ,
kodePO,
namaBarang,
qtyDiminta pada PO, dan qtyDijual pada SJ yang jumlah qtyDiminta pada PO tidak sama dengan qtyDijual pada SJ untuk transaksi PO yang terjadi pada bulan tertentu
Transaction/relation cross-referenced matrix di atas menunjukkan bahwa relasi Jabatan diakses oleh 5 transaksi, relasi Pegawai diakses oleh 20 transaksi, relasi Pelanggan diakses oleh 11 transaksi, relasi TeleponPlgn diakses oleh 3 transaksi, relasi FaxPlgn diakses oleh 3 transaksi, relasi Barang diakses oleh 22 transaksi, relasi BP diakses oleh 10 transaksi, relasi BPDetail diakses oleh 4 transaksi, relasi RKD diakses oleh 6 transaksi, relasi SJ diakses oleh 7 transaksi, relasi SJDetail diakses oleh 6 transaksi, relasi PO diakses oleh 9 transaksi, relasi PODetail diakses oleh 5 transaksi, relasi BPBJ diakses oleh 3 transaksi, relasi BPBJDetail diakses oleh 3 transaksi, relasi BSTPJ diakses oleh 3 transaksi, relasi BSTPJDetail diakses oleh 3 transaksi, relasi returJual diakses oleh 3 transaksi, relasi returJualDetail diakses oleh 3 transaksi, relasi Penagihan diakses oleh 5 transaksi, relasi Kota diakses oleh 6 transaksi, relasi Pos diakses oleh 6 transaksi, relasi Kecamatan diakses oleh 6 transaksi, relasi Kelurahan diakses oleh 4 transaksi, relasi Kendaraan diakses oleh 5 transaksi, relasi JadwalKirim diakses oleh 2 transaksi.
137 Transaction Analysis Form Transaksi Volume Transaksi Average: Peak:
(c) Tampilkan detail barang beserta harga untuk pelanggan tertentu 30 per hour 70 per hour ( antara 08.00 dan 12.00 Senin – Jumat )
SELECT c.kodeBarang, namaBarang, satuan, merek, hargaBarang FROM Pelanggan a INNER JOIN BP b ON a.kodePelanggan = b.kodePelanggan INNER JOIN BPDetail c ON b.kodeBP = c.kodeBP INNER JOIN Barang d ON c.kodeBarang = d.kodeBarang WHERE b.kodePelanggan = ’PLG060101’ AND statusBP = 1
Predicate: b.kodePelanggan = ’PLG060101’, statusBP = 1 Join Attributes: a.kodePelanggan = b.kodePelanggan, b.kodeBP = c.kodeBP, c.kodeBarang = d.kodeBarang Ordering attribute: none Grouping attribute: none Built-in function: none Attribute updated: none Transaction usage map
138 Access 1 2 3 4
Entity
Type of No of References Access Per Transaction Avg per Hour Peak per Hour Pelanggan R 500 15000 35000 BP R 1 30 70 BPDetail R 3 – 10 90 – 300 210 – 700 Barang R 3 – 10 90 – 300 210 – 700 507 – 521 15210 – 15630 35490 – 36470 Total References Tabel 3.26 Transaction Analysis Form untuk Transaksi Query Data (c)
Transaction Analysis Form Transaksi Volume Transaksi Average: Peak:
(d) Tampilkan nama pelanggan dan detail dari penagihan yang belum dibayar pada bulan dan tahun tertentu 5 per hour 10 per hour ( antara 08.00 dan 12.00 Senin - Jumat )
SELECT namaPelanggan, a.* FROM Penagihan a INNER JOIN SJ b ON a.kodePenagihan = b.kodePenagihan INNER JOIN PO c ON b.kodePO = c.kodePO INNER JOIN Pelanggan d ON c.kodePelanggan = d.kodePelanggan WHERE MONTH(tglPenagihan) = 1 AND YEAR(tglPenagihan) = 2006 AND statusTagih = 0
Predicate: MONTH(tglPenagihan) = 1, YEAR(tglPenagihan) = 2006, statusTagih = 0 Join Attributes: a.kodePenagihan = b.kodePenagihan, b.kodePO = c.kodePO, c.kodePelanggan = d.kodePelanggan Ordering attribute: none Grouping attribute: none Built-in function: none Attribute updated: none
139
Transaction usage map
Access
Entity
1 2 3
Penagihan SJ PO
Type of Access R R R
4
Pelanggan
R
Total References
Per Transaction 7200 6000 – 12000 90000 – 360000 90000 – 360000 193200 – 739200
No of References Avg per Hour 36000 30000 – 60000 450000 – 1800000 450000 – 1800000 966000 – 3696000
Peak per Hour 720000 60000 – 120000 900000 – 3600000 900000 – 3600000 1932000 – 7392000
Tabel 3.27 Transaction Analysis Form untuk Transaksi Query Data (d)
Transaction Analysis Form Transaksi Volume Transaksi Average: Peak
(f) Tampilkan detail PO beserta detail Barang yang dipesan pelanggan berdasarkan kodeRKD tertentu 10 50 ( antara 13.00 dan 17.00 Senin – Jumat )
SELECT b.kodePO, tgl, b.kodePegawai, kodeRKD, kodeBP, b.kodeBarang,
Predicate: kodeRKD = ‘RD06010001’ Join Attributes: a.kodeRKD =
140 namaBarang, merek, satuan,qtyDiminta FROM RKD a INNER JOIN PO b ON a.kodeRKD = b.kodeRKD INNER JOIN PODetail c ON b.kodePO = c.kodePO INNER JOIN Barang d ON c.kodeBarang = d.kodeBarang WHERE b.kodeRKD = ‘RD06010001’
b.kodeRKD, b.kodePO = c.kodePO, c.kodeBarang = d.kodeBarang Ordering attribute: none Grouping attribute: none Built-in function: none Attribute updated: none
Transaction usage map
Access 1 2 3 4
Entity RKD PO PODetail Barang Total References
Type of Access R R R R
Per Transaction 7200 15 – 30 45 – 180 45 – 180 7305 – 7590
No of References Avg per Hour Peak per Hour 72000 150 – 300 450 – 1800 450 – 1800 73050 – 75900
360000 750 – 1500 2250 – 9000 2250 – 9000 365250 - 379500
Tabel 3.28 Transaction Analysis Form untuk Transaksi Query Data (f)
141 Transaction Analysis Form Transaksi
(g) Tampilkan detail SJ beserta detail barang dan harga barang yang diterima pelanggan berdasarkan bulan, tahun, dan kodePelanggan tertentu
Volume Transaksi Average: Peak:
10 15 ( antara 13.00 dan 17.00 Senin – Jumat )
SELECT a.*, b.*,hargaBarang FROM SJ a INNER JOIN SJDetail b ON a.kodeSJ = b.kodeSJ INNER JOIN PO c ON a.kodePO = c.kodePO INNER JOIN BP d ON c.kodeBP = d.kodeBP INNER JOIN BPDetail e ON d.kodeBP = e.kodeBP WHERE MONTH(a.tgl) = 1 AND YEAR(a.tgl) = 2006 AND kodePelanggan = ‘PLG060101’
Predicate: MONTH(c.tgl) = 1, YEAR(a.tgl) = 2006, kodePelanggan = ‘PLG060101’ Join Attributes: a.kodeSJ = b.kodeSJ, a.kodePO = c.kodePO, c.kodeBP = d.kodeBP, d.kodeBP = e.kodeBP Ordering attribute: none Grouping attribute: none Built-in function: none Attribute updated: none
Transaction usage map
Access 1 2 3
Entity SJ SJDetail PO
Type of Access R R R
Per Transaction 54000 36 – 120 36 – 120
No of References Avg per Hour 540000 360 – 1200 360 – 1200
Peak per Hour 810000 45 – 150 45 – 150
142 4 5
BP R BPDetail R Total References
36 – 120 108 – 1200 54216 – 55560
360 – 1200 1080 - 12000 542160 – 555600
45 – 150 135 - 1500 813240 – 833400
Tabel 3.29 Transaction Analysis Form untuk Transaksi Query Data (g)
Transaction Analysis Form Transaksi
Volume Transaksi Average: Peak
(n) Tampilkan namaPelanggan, kodeSJ, kodePO, namaBarang, qtyDiminta pada PO, dan qtyDijual pada SJ yang jumlah qtyDiminta pada PO tidak sama dengan qtyDijual pada SJ untuk transaksi PO yang terjadi pada bulan dan tahun tertentu dari PO 5 10 ( antara 13.00 dan 17.00 Senin – Jumat )
SELECT namaPelanggan, kodeSJ, kodePO, namaBarang, qtyDiminta, qtyDijual FROM PO a INNER JOIN PODetail b ON a.kodePO = b.kodePO INNER JOIN BP c ON a.kodeBP = c.kodeBP INNER JOIN Pelanggan d ON c.kodePelanggan = d.kodePelanggan INNER JOIN SJ e ON a.kodePO = e.kodePO INNER JOIN SJDetail f ON e.kodeSJ = f.kodeSJ WHERE MONTH(a.tgl) = 1 AND YEAR(a.tgl) = 2006 AND qtyDiminta <> qtyDijual
MONTH(a.tgl) = 1, YEAR(a.tgl) = 2006, qtyDiminta <> qtyDijual Join Attributes: a.kodePO = b.kodePO, a.kodeBP = c.kodeBP, c.kodePelanggan = d.kodePelanggan, a.kodePO = e.kodePO, e.kodeSJ = f.kodeSJ Ordering attribute: none Grouping attribute: none Built-in function: none Attribute updated: none Predicate:
143
Transaction usage map
Access
Entity
Type of Access
No of References Per Transaction Avg per Hour
1 2
PO PODetail
R R
54000 13500 – 45000
270000 67500 - 225000
3
Barang
R
13500 – 45000
67500 – 225000
4
BP
R
13500 – 45000
67500 – 225000
5
Pelanggan
R
13500 – 45000
67500 – 225000
6
SJ
R
13500 – 45000
67500 – 225000
7
SJDetail
R
40500 – 450000
202500 – 2250000
162000 – 729000
22595 - 22775
Total References
Peak per Hour 540000 135000 – 450000 135000 – 450000 135000 – 450000 135000 – 450000 135000 – 450000 405000 – 4500000 1620000 – 7290000
Tabel 3.30 Transaction Analysis Form untuk Transaksi Query Data (n)
144 3.5.3
Memilih Organisasi File DBMS yang digunakan untuk mengimplementasi basis data PT Mejisinar Kasih ini adalah Microsoft SQL Server 2000. Oleh karena itu organisasi file yang digunakan adalah B – Tree.
3.5.4
Memilih Indeks Berikut ini merupakan pembuatan indeks untuk masing – masing tabel.
Tabel Jabatan Barang Kota Kecamatan Pos Kelurahan Pegawai Pelanggan
TeleponPlgn FaxPlgn Kendaraan BP
Nama Indeks JabatanKodeJabatanInd (Primary Index) JabatanNamaJabatanInd (Secondary Index) BarangKodeBarangInd (Primary Index) BarangNamaBarangInd (Secondary Index) KotaKodeKotaInd (Primary Index) KotaNamaKotaInd (Secondary Index) KecamatanKodeKecInd (Primary Index) KecamatanNamaKecInd (Secondary Index) PosKodePosInd (Primary Index) KelurahanKodeKelInd (Primary Index) KelurahanNamaKelInd (Secondary Index) PegawaiKodePegawaiInd (Primary Index) PegawaiNamaPegawaiInd (Secondary Index) PelangganKodePelangganInd (Primary Index) PelangganNamaPelangganInd (Secondary Index) TeleponPlgnNoTeleponInd (Primary Index) TeleponKodePelangganInd (Secondary Index) FaxPlgnNoFaxInd (Primary Index) FaxPlgnKodePelangganInd (Secondary Index) KendaraanNoPolisiInd (Primary Index) BPKodeBPInd (Primary Index) BPTanggalInd (Secondary Index) BPKodePelangganInd (Secondary Index) BPKodePegawaiInd (Secondary Index)
Field kodeJabatan namaJabatan kodeBarang namaBarang kodeKota namaKota kodeKec namaKec kodePos kodeKel namaKel kodePegawai namaPegawai kodePelanggan namaPelanggan noTelepon kodePelanggan noFax kodePelanggan noPolisi kodeBP tgl kodePelanggan kodePegawai
145 Tabel BPDetail
JadwalKirim
RKD
PO PODetail
Penagihan
SJ
SJDetail
Nama Indeks BPDetailKodeBPKodeBarangInd (Primary Index) BPDetailKodeBPInd (Secondary Index) BPDetailKodeBarangInd (Secondary Index) JadwalKirimHariKirimKodeBPInd (Primary Index) JadwalKirimHariKirimInd (Secondary Index) JadwalKirimKodeBPInd (Secondary Index) RKDKodeRKDInd (Primary Index) RKDTanggalInd (Secondary Index) RKDKodeKendaraanInd (Secondary Index) RKDKodeDriverInd (Secondary Index) RKDKodeHelper1Ind (Secondary Index) RKDKodeHelper2Ind (Secondary Index) RKDKodePegawaiInd (Secondary Index) POKodePOInd (Primary Index) POTanggalInd (Secondary Index) POKodePegawaiInd (Secondary Index) PODetailKodePOKodeBarangInd (Primary Index) PODetailKodePOInd (Secondary Index) PODetailKodeBarangInd (Secondary Index) PenagihanKodePenagihanInd (Primary Index) PenagihanTglPenagihanInd (Secondary Index) PenagihanTglJatuhTempoInd (Secondary Index) PenagihanTglPembayaranInd (Secondary Index) PenagihanKodeKolektorInd (Secondary Index) PenagihanKodePegawaiByrInd (Secondary Index) PenagihanKodePegawaiTghInd (Secondary Index) SJKodeSJInd (Primary Index) SJTanggalInd (Secondary Index) SJKodePOInd (Secondary Index) SJKodePegawaiInd (Secondary Index) SJKodePenagihanInd (Secondary Index) SJDetailKodeSJKodeBarangInd (Primary Index) SJDetailKodeSJInd (Secondary Index)
Field kodeBP, kodeBarang kodeBP kodeBarang hariKirim, kodeBP hariKirim kodeBP kodeRKD tgl kodeKendaraan kodeDriver kodeHelper1 kodeHelper2 kodePegawai kodePO tgl kodePegawai kodePO, kodeBarang kodePO kodeBarang kodePenagihan tglPenagihan tglJatuhTempo tglPembayaran kodeKolektor kodePegawaiByr kodePegawaiTgh kodeSJ tgl kodePO kodePegawai kodePenagihan kodeSJ, kodeBarang kodeSJ
146 Tabel BPBJ
BPBJDetail
BSTPJ BSTPJDetail
ReturJual
ReturJualDetail
Nama Indeks SJDetailKodeBarangInd (Secondary Index) BPBJKodeBPBJInd (Primary Index) BPBJTanggalInd (Secondary Index) BPBJKodeRKDInd (Secondary Index) BPBJKodePegawaiInd (Secondary Index) BPBJDetailKodeBPBJKodeBarangInd (Primary Index) BPBJDetailKodeBPBJInd (Secondary Index) BPBJDetailKodeBarangInd (Secondary Index) BSTPJKodeBSTPJInd (Primary Index) BSTPJTanggalInd (Secondary Index) BSTPJKodePegawaiInd (Secondary Index) BSTPJDetailKodeBSTPJKodeBarangInd (Primary Index) BSTPJDetailKodeBSTPJInd (Secondary Index) BSTPJDetailKodeBarangInd (Secondary Index) ReturJualKodeReturInd (Primary Index) ReturJualTanggalInd (Secondary Index) ReturJualKodePelangganInd (Secondary Index) ReturJualKodePegawaiInd (Secondary Index) ReturJualDetailKodeReturKodeBarangInd (Primary Index) ReturJualDetailKodeReturInd (Secondary Index) ReturJualDetailKodeBarangInd (Secondary Index)
Field kodeBarang kodeBPBJ tgl kodeRKD kodePegawai kodeBPBJ, kodeBarang kodeBPBJ kodeBarang kodeBSTPJ tgl kodePegawai kodeBSTPJ, kodeBarang kodeBSTPJ kodeBarang kodeRetur tgl kodePelanggan kodePegawai kodeRetur, kodeBarang kodeRetur kodeBarang
Table 3.31 Indeks yang Digunakan pada Tabel (Primary Index / Clustered Index dan Secondary Index / Nonclustered Index)
3.5.5 Memperkirakan Kebutuhan Disk Space a) Menghitung Estimasi Pertumbuhan Jumlah Baris Dalam 3 Tahun NAMA TABEL
Kota Kecamatan Pos Kelurahan Pelanggan TeleponPlgn FaxPlgn Jabatan Pegawai Barang Kendaraan RKD BP BPDetail JadwalKirim Penagihan PO PODetail SJ SJDetail BPBJ
R
i
4 40 200 250 500 500 300 15 90 10 16 7200 600 600 1000 7200 54000 54000 54000 54000 9000
1 3 3 3 7 7 7 1 5 1 3 5 7 7 7 7 10 10 10 10 5
Jumlah Baris dalam 3 tahun (Num_Rows)
5 44 219 274 613 613 368 16 105 11 18 29538 736 736 1226 29844 227340 227340 227340 227340 36923
147
NAMA TABEL
BPBJDetail BSTPJ BSTPJDetail ReturJual ReturJualDetail
R
9000 360 360 720 720
Jumlah Baris dalam 3 tahun (Num_Rows)
i
5 5 5 3 3
36923 1477 1477 2924 2924
Tabel 3.32 Estimasi Perhitungan Baris Dalam 3 Tahun Keterangan : •
R = jumlah baris dalam 1 tahun
•
i = persentase pertumbuhan data dalam 1 tahun
•
Num_Rows = jumlah baris dalam 3 tahun, dihitung dengan rumus:
•
Rn = R x (i + 1)n – 1 untuk tabel transaksi dan Rn = R x (i + 1)n untuk tabel master
•
n = estimasi untuk berapa tahun ke depan. Pada rumus terdapat n – 1 karena transaksi yang terjadi sebelum pembuatan database tidak dimasukkan.
148
b) Menghitung Space untuk Menyimpan Data
NAMA TABEL
Kota Kecamatan Pos Kelurahan Pelanggan TeleponPlgn FaxPlgn Jabatan Pegawai Barang Kendaraan RKD BP BPDetail JadwalKirim Penagihan PO PODetail SJ SJDetail BPBJ
Num_ Rows
Num_ Cols
Fixed_ Data_ Size
5 44 219 274 613 613 368 16 105 11 18 29538 736 736 1226 29844 227340 227340 227340 227340 36923
2 2 1 5 14 2 2 2 11 5 8 8 8 4 2 12 5 3 6 5 4
6 6 4 22 23 10 10 6 40 8 7 58 50 22 10 89 48 18 58 26 38
Num_ Variable_ Cols
Max_ Var_ Size
1 1 0 1 4 1 1 1 4 3 4 2 0 0 1 0 0 0 0 1 0
30 30 0 30 255 12 12 30 154 90 168 108 0 0 6 0 0 0 0 100 0
Null_ Bitmap
Variable_ Data_ Size
3 3 3 3 4 3 3 3 4 3 3 3 3 3 3 4 3 3 3 3 3
34 34 2 34 265 16 16 34 164 98 178 114 0 0 10 0 0 0 0 104 0
Row_ Size
Rows_ Per_ Page
Free_ Rows_ Per_ Page
Num_ Pages
Table_ Size
47 47 13 63 296 33 33 47 212 113 192 179 57 29 27 97 55 25 65 137 45
165 165 539 124 27 231 231 165 37 70 41 44 137 261 279 81 142 299 120 58 172
33 33 107 24 5 46 46 33 7 14 8 8 27 52 55 16 28 59 24 11 34
1 1 1 3 28 4 2 1 4 1 1 821 7 4 6 460 1995 948 2369 4838 268
8192 8192 8192 24576 229376 32768 16384 8192 32768 8192 8192 6725632 57344 32768 49152 3768320 16343040 7766016 19406848 39632896 2195456
149
NAMA TABEL
Num_ Rows
Num_ Cols
Fixed_ Data_ Size
Num_ Variable_ Cols
Max_ Var_ Size
1 0 0 0 1
100 0 0 0 100
BPBJDetail 36923 5 20 BSTPJ 1477 3 28 BSTPJDetail 1477 3 18 ReturJual 2924 4 38 ReturJualDetail 2924 4 18 Total Ukuran Data_Space_Used (bytes)
Null_ Bitmap
Variable_ Data_ Size
3 3 3 3 3
104 0 0 0 104
Row_ Size
Rows_ Per_ Page
Free_ Rows_ Per_ Page
Num_ Pages
Table_ Size
131 35 25 45 129
60 218 299 172 61
12 43 59 34 12
770 9 7 22 60
6307840 73728 57344 180224 491520 103473152
Tabel 3.33 Perhitungan Space untuk Menyimpan Data Keterangan : •
Num_Rows = banyaknya baris
•
Num_Cols = banyaknya kolom
•
Fixed_Data_Size = total ukuran(bytes) kolom yang panjangnya tetap
•
Num_Variable_Cols = banyaknya kolom yang panjangnya tidak tetap
•
Max_Var_Size = total ukuran(bytes) maksimal kolom yang panjangnya tidak tetap
•
Null_Bitmap = Jika terdapat panjang kolom yang tetap pada tabel, sebuah bagian baris, dikenal dengan null bitmap, disiapkan untuk menangani kemungkinan null pada kolom (column nullability). Untuk menghitung ukurannya : Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
150
•
Variable_Data_Size = jika terdapat kolom yang panjangnya tidak tetap pada tabel, tentukan berapa banyak tempat penyimpanan kolom dalam baris : Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size Jika tidak terdapat kolom dengan panjang yang tidak tetap, maka Variable_Data_Size menjadi 0.
•
Row_Size = menghitung ukuran baris Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4 Nilai akhir yaitu 4 mewakili header baris data.
•
Rows_Per_Page = menghitung jumlah baris per halaman (8096 bytes per halaman): Rows_Per_Page = 8096 / (Row_Size + 2)
•
Free_Rows_Per_Page = jika sebuah clustered index akan dibuat pada tabel, hitung jumlah baris cadangan yang kosong per halaman, tergantung pada penetapan fill factor. Jika tidak ada clustered index yang akan dibuat, tetapkan fill factor menjadi 100. Free_Rows_Per_Page = 8096 x ((100 – fill factor) / 100) / (Row_Size + 2)
•
Num_Pages = Menghitung banyaknya halaman yang dibutuhkan untuk menyimpan semua baris Num_Pages = Num_Rows / (Rows_Per_Page – Free_Rows_Per_Page)
151
•
Data_Space_Used = menghitung jumlah tempat penyimpanan yang dibutuhkan untuk menyimpan data pada tabel (total 8192 bytes per halaman): Data_Space_Used = 8192 x Num_Pages
c) Menghitung space untuk Menyimpan Clustered Index
Nama Clustered Index
KotaKodeKotaInd KecamatanKodeK ecInd PosKodePosInd KelurahanKodeK elInd PelangganKodePe langganInd TeleponPlgnNoTe leponInd FaxPlgnNoFaxInd JabatanKodeJabat anInd PegawaiKodePeg awaiInd
Num Ckey Cols
Fixed Ckey Size
Num Varia ble Ckey Cols
1
6
0
0
3
0
18
404
8192
1
0
1
8192
1
6
0
0
3
0
18
404
8192
1
0
1
8192
1
4
0
0
3
0
16
449
8192
1
0
1
8192
1
6
0
0
3
0
18
404
24576
1
0
1
8192
1
10
0
0
3
0
22
337
229376
1
0
1
8192
1
0
1
12
3
16
28
269
32768
1
0
1
8192
1
0
1
12
3
16
28
269
16384
1
0
1
8192
1
6
0
0
3
0
18
404
8192
1
0
1
8192
1
10
0
0
3
0
22
337
32768
1
0
1
8192
Max Var_ Ckey_ Size
CIndex _ Null_ Bitmap
Varia ble Ckey Size
CInd ex Row Size
CIndex Rows Per Page
Data_ Space_ Used
Num Pages Clevel_ 0
Num Pages Clevel_ 1
Num _Cin dex_ Pages
Clustered _ Index_ Size
152
Nama Clustered Index
BarangKodeBara ngInd KendaraanNoPoli siInd RKDKodeRKDIn d BPKodeBPInd BPDetailKodeBP KodeBarangInd JadwalKirimHari KirimKodeBPInd PenagihanKodePe nagihanInd POKodePOInd PODetailKodePO KodeBarangInd SJKodeSJInd SJDetailKodeSJK odeBarangInd BPBJKodeBPBJI nd BPBJDetailKode BPBJKodeBarang Ind BSTPJKodeBSTP JInd
Num Ckey Cols
Fixed Ckey Size
Num Varia ble Ckey Cols
1
6
0
0
3
0
18
404
8192
1
0
1
8192
1
0
1
8
3
12
24
311
8192
1
0
1
8192
1
10
0
0
3
0
22
337
6725632
3
1
4
32768
1
10
0
0
3
0
22
337
57344
1
0
1
8192
2
16
0
0
3
0
28
269
32768
1
0
1
8192
2
10
1
6
3
10
32
238
49152
1
0
1
8192
1
10
0
0
3
0
22
337
3768320
2
0
2
16384
1
10
0
0
3
0
22
337
16343040
6
1
7
57344
2
16
0
0
3
0
28
269
7766016
4
1
5
40960
1
10
0
0
3
0
22
337
19406848
8
1
9
73728
2
16
0
0
3
0
28
269
39632896
18
1
19
155648
1
10
0
0
3
0
22
337
2195456
1
0
1
8192
2
16
0
0
3
0
28
269
6307840
3
1
4
32768
1
10
0
0
3
0
22
337
73728
1
0
1
8192
Max Var_ Ckey_ Size
CIndex _ Null_ Bitmap
Varia ble Ckey Size
CInd ex Row Size
CIndex Rows Per Page
Data_ Space_ Used
Num Pages Clevel_ 0
Num Pages Clevel_ 1
Num _Cin dex_ Pages
Clustered _ Index_ Size
153
Nama Clustered Index
Num Ckey Cols
Fixed Ckey Size
Num Varia ble Ckey Cols
Max Var_ Ckey_ Size
BSTPJDetailKode BSTPJKodeBaran 2 16 0 0 gInd ReturJualKodeRet 1 10 0 0 urInd ReturJualDetailK odeReturKodeBar 2 16 0 0 angInd Total ukuran Clustered_Index_Size (bytes)
CIndex _ Null_ Bitmap
Varia ble Ckey Size
CInd ex Row Size
CIndex Rows Per Page
Data_ Space_ Used
Num Pages Clevel_ 0
Num Pages Clevel_ 1
Num _Cin dex_ Pages
Clustered _ Index_ Size
3
0
28
269
57344
1
0
1
8192
3
0
22
337
180224
1
0
1
8192
3
0
28
269
491520
1
0
1
8192 565248
Tabel 3.34 Perhitungan Space untuk Menyimpan Clustered Index Keterangan : •
Num Ckey Cols = banyaknya kolom pada kunci index
•
Fixed Ckey Size = jumlah bytes pada semua panjang kolom kunci yang tetap
•
Num Variable Ckey Cols = banyaknya kunci yang panjang kolomnya tidak tetap
•
Max Var_Ckey_Size = total ukuran(bytes) maksimal kolom kunci yang panjangnya tidak tetap
•
CIndex_Null_Bitmap = Jika terdapat panjang kolom yang tetap pada clustered index, bagian pada baris index disiapkan untuk null bitmap. Untuk menghitung ukurannya :
154
Cindex_Null_Bitmap = 2 + ((Num_Ckey_Cols + 7) / 8) •
Variable Ckey Size = jika terdapat panjang kolom pada index yang tidak tetap, tentukan berapa banyak tempat penyimpanan yang digunakan untuk menyimpan kolom dalam baris index : Variable Ckey Size = 2 + (Num Variable Ckey Cols x 2) + Max Var_Ckey_Size Jika tidak ada panjang kolom pada index yang tidak tetap, maka Variable Ckey Size menjadi 0.
•
Cindex Row Size = menghitung ukuran kolom index Cindex Row Size = Fixed Ckey Size + Variable Ckey Size + Cindex_Null_Bitmap + 1 + 8
•
Cindex Rows Per Page = menghitung banyaknya baris index per halaman (8096 bytes bebas per halaman): Cindex Rows Per Page = 8096 / (Cindex Row Size + 2)
•
Num Page Clevel_0 dan Num Pages Clevel_1 = menghitung banyaknya halaman yang dibutuhkan untuk menyimpan semua baris index pada tiap level index. Num Page Clevel_0 = (Data_Space_Used / 8192) / Cindex Rows Per Page Num Pages Clevel_1 = Num Page Clevel_0 / Cindex Rows Per Page
•
Num_Cindex_Pages = jumlah halaman yang digunakan untuk menyimpan setiap level index Num_Cindex_Pages = Num Page Clevel_0 + Num Pages Clevel_1
155
•
Clustered_Cindex_Size =menghitung ukuran dari clustered index Clustered_Cindex_Size = 8192 x Num_Cindex_Pages
d) Menghitung Space untuk Menyimpan NonClustered Index Tambahan
Nama Index
KotaN amaKo taInd Kecam atanNa maKec Ind Kelura hanNa maKel Ind Pelang ganNa maPel anggan Ind
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
1
0
1
30
1
0
1
1
0
1
0
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
34
46
168
30
3
34
46
1
30
3
34
1
30
3
34
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
18
56
139
168
18
56
46
168
18
46
168
22
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
28
5
1
0
0
1
8192
139
28
44
1
0
0
1
8192
56
139
28
274
3
1
0
4
32768
60
130
26
613
6
1
0
7
57344
156
Nama Index
Telepo nKode Pelang ganInd FaxPlg nKode Pelang ganInd Jabata nNama Jabata nInd Pegaw aiNam aPega waiInd Barang Nama Barang Ind RKDT anggal Ind
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
1
10
0
0
1
10
0
1
0
1
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
0
22
337
0
3
0
22
1
30
3
34
0
1
30
3
1
0
1
30
1
8
0
0
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
28
42
184
337
28
42
46
168
18
34
46
168
3
34
46
3
0
20
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
38
613
5
1
0
6
49152
184
38
368
3
1
0
4
32768
56
139
28
16
1
0
0
1
8192
22
60
130
26
105
2
0
0
2
16384
168
18
56
139
28
11
1
0
0
1
8192
368
22
34
224
47
29538
167
1
0
168
1376256
157
Nama Index
RKDK odeKe ndaraa nInd RKDK odeDri verInd RKDK odeHel per1In d RKDK odeHel per2In d RKDK odePe gawaiI nd BPTan ggalIn d BPKo dePela ngganI nd
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
1
0
1
8
1
10
0
1
10
1
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
12
24
311
0
3
0
22
0
0
3
0
10
0
0
3
1
10
0
0
1
8
0
1
10
0
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
22
38
202
337
22
36
22
337
22
0
22
337
3
0
22
0
3
0
0
3
0
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
42
29538
185
1
0
186
1523712
213
44
29538
175
1
0
176
1441792
36
213
44
29538
175
1
0
176
1441792
22
36
213
44
29538
175
1
0
176
1441792
337
22
36
213
44
29538
175
1
0
176
1441792
20
368
22
34
224
47
736
5
1
0
6
49152
22
337
22
36
213
44
736
5
1
0
6
49152
158
Nama Index
BPKo dePega waiInd BPDet ailKod eBPIn d BPDet ailKod eBaran gInd Jadwal Kirim HariKi rimInd Jadwal Kirim KodeB PInd Penagi hanTgl Penagi hanInd
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
1
10
0
0
1
10
0
1
6
1
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
0
22
337
0
3
0
22
0
0
3
0
0
1
6
3
1
10
0
0
1
8
0
0
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
22
36
213
337
28
42
18
404
28
10
22
337
3
0
22
3
0
20
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
44
736
5
1
0
6
49152
184
38
736
6
1
0
7
57344
38
202
42
736
5
1
0
6
49152
32
46
168
35
1226
10
1
0
11
90112
337
32
46
168
35
1226
10
1
0
11
90112
368
22
34
224
47
29844
169
1
0
170
1392640
159
Nama Index
Penagi hanTgl JatuhT empoI nd Penagi hanTgl Pemba yaranI nd Penagi hanKo deKole ktorIn d Penagi hanKo dePega waiBy rInd Penagi hanKo dePega waiTg hInd
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
3
8
0
0
1
8
0
1
10
1
1
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
0
20
368
0
3
0
20
0
0
3
0
10
0
0
3
10
0
0
3
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
22
34
224
368
22
34
22
337
22
0
22
337
0
22
337
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
47
29844
169
1
0
170
1392640
224
47
29844
169
1
0
170
1392640
36
213
44
29844
177
1
0
178
1458176
22
36
213
44
29844
177
1
0
178
1458176
22
36
213
44
29844
177
1
0
178
1458176
160
Nama Index
POTan ggalIn d POKo dePega waiInd PODet ailKod ePOIn d PODet ailKod eBaran gInd SJTan ggalIn d SJKod ePOIn d SJKod ePega waiInd
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
1
8
0
0
1
10
0
1
10
1
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
0
20
368
0
3
0
22
0
0
3
0
6
0
0
3
1
8
0
0
1
10
0
1
10
0
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
22
34
224
337
22
36
22
337
28
0
18
404
3
0
20
0
3
0
0
3
0
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
47
227340
1285
4
1
1290
10567680
213
44
227340
1346
4
1
1351
11067392
42
184
38
227340
1558
5
1
1564
12812288
28
38
202
42
227340
1421
4
1
1426
11681792
368
22
34
224
47
227340
1285
4
1
1290
10567680
22
337
22
36
213
44
227340
1346
4
1
1351
11067392
22
337
22
36
213
44
227340
1346
4
1
1351
11067392
161
Nama Index
SJKod ePenag ihanIn d SJDeta ilKode SJInd SJDeta ilKode Barang Ind BPBJT anggal Ind BPBJ KodeR KDInd BPBJ KodeP egawai Ind BPBJ Detail KodeB PBJIn d
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
1
10
0
0
1
10
0
1
6
1
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
0
22
337
0
3
0
22
0
0
3
0
8
0
0
3
1
10
0
0
1
10
0
1
10
0
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
22
36
213
337
28
42
18
404
28
0
20
368
3
0
22
0
3
0
0
3
0
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
44
227340
1346
4
1
1351
11067392
184
38
227340
1558
5
1
1564
12812288
38
202
42
227340
1421
4
1
1426
11681792
22
34
224
47
36923
209
1
0
210
1720320
337
22
36
213
44
36923
219
1
0
220
1802240
22
337
22
36
213
44
36923
219
1
0
220
1802240
22
337
28
42
184
38
36923
253
1
0
254
2080768
162
Nama Index
BPBJ Detail KodeB arangI nd BSTPJ Tangg alInd BSTPJ KodeP egawai Ind BSTPJ Detail KodeB STPJI nd BSTPJ Detail KodeB arangI nd ReturJ ualTan ggalIn d
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
1
6
0
0
1
8
0
1
9
1
Vari able key Size
NL_ In dex_ Row _ Size
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
3
0
18
404
0
3
0
20
0
0
3
0
10
0
0
3
1
6
0
0
1
8
0
0
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
28
38
202
368
22
34
21
352
22
0
22
337
3
0
18
3
0
20
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
42
36923
231
1
0
232
1900544
224
47
1477
9
1
0
10
81920
35
218
46
1477
9
1
0
10
81920
28
42
184
38
1477
11
1
0
12
98304
404
28
38
202
42
1477
10
1
0
11
90112
368
22
34
224
47
2924
17
1
0
18
147456
163
Nama Index
Num Key Cols
Fix ed key Size
Num Vari able key Cols
Max Var _ key_ Size
In dex_ Null _ Bit map
Vari able key Size
NL_ In dex_ Row _ Size
ReturJ ualKo dePela 1 10 0 0 3 0 22 ngganI nd ReturJ ualKo 1 10 0 0 3 0 22 dePega waiInd ReturJ ualDet ailKod 1 10 0 0 3 0 22 eRetur Ind ReturJ ualDet ailKod 1 6 0 0 3 0 18 eBaran gInd Total ukuran NonClustered_Index_Size (bytes)
NL_ In dex_ Rows_ Per_ Pages
Cin dex Row Size
337
In dex Row Size
In dex Rows Per Page
Free In dex Row Per Page
22
36
213
337
22
36
337
28
404
28
Num_ Rows
Num Pages Level _0
Num Pages Level _1
Num Pages Level _2
Num_ In dex_ Pages
Non ClusTer ed_ Index_ Size
44
2924
18
1
0
19
155648
213
44
2924
18
1
0
19
155648
42
184
38
2924
21
1
0
22
180224
38
202
42
2924
19
1
0
20
163840
142729216
Tabel 3.35 Perhitungan Space untuk Menyimpan Setiap NonClustered Index Tambahan Keterangan : •
Num Key Cols = banyaknya kolom pada kunci index
164
•
Fixed key Size = jumlah bytes pada semua panjang kolom kunci yang tetap
•
Num Variable key Cols = banyaknya kunci yang panjang kolomnya tidak tetap
•
Max Var_key_Size = total ukuran(bytes) maksimal kolom kunci yang panjangnya tidak tetap
•
Index_Null_Bitmap = Jika terdapat panjang kolom yang tetap pada clustered index, bagian pada baris index disiapkan untuk null bitmap. Untuk menghitung ukurannya : Cindex_Null_Bitmap = 2 + ((Num_Ckey_Cols + 7) / 8)
•
Variable key Size = jika terdapat panjang kolom pada index yang tidak tetap, tentukan berapa banyak tempat penyimpanan yang digunakan untuk menyimpan kolom dalam baris index : Variable Ckey Size = 2 + (Num Variable Ckey Cols x 2) + Max Var_Ckey_Size Jika tidak ada panjang kolom pada index yang tidak tetap, maka Variable Ckey Size menjadi 0.
•
NL_Index_Row_Size = menghitung baris index nonleaf NL_Index_Row_Size = Fixed key Size + Variable key Size + Index_Null_Bitmap + 1 + 8
•
NL_Index_Rows_Per_Pages = menghitung banyaknya baris index nonleaf per halaman NL_Index_Rows_Per_Pages = 8096 / (NL_Index_Row_Size + 2)
•
Index Row Size = menghitung ukuran kolom index
165
Index Row Size = CIndex Row Size + Fixed key Size + Variable key Size + index_Null_Bitmap + 1 •
Index Rows Per Page = menghitung jumlah baris index level leaf per halaman Index Rows Per Page = 8096 / (Index Row Size + 2)
•
Free Index Rows Per Page = menghitung jumlah baris index kosong cadangan per halaman berdasarkan pada fill factor yang ditetapkan untuk nonclustered index Free Index Rows Per Page = 8096 x ((100 – fill factor) / 100) / (Index Row Size + 2)
•
Num Pages level_0, Num Pages level_1, Num Pages level_2 = menghitung jumlah halaman yang dibutuhkan untuk menyimpan semua baris index pada tiap level index Num Pages level_0 = Num_Rows / (Index Rows Per Page - Free Index Rows Per Page) Num Pages level_1 = Num Pages level_0 / NL_Index_Rows_Per_Pages Num Pages level_2 = Num Pages level_1 / NL_Index_Rows_Per_Pages
•
Num_Index_Pages = jumlah halaman yang digunakan untuk menyimpan setiap level index Num_Index_Pages = Num Page level_0 + Num Pages level_1 + Num Pages level_2
•
NonClustered_Index_Size = menghitung ukuran nonclustered index NonClustered_Index_Size = 8192 x Num_Index_Pages
166
167
e) Menghitung Ukuran Tabel Menghitung ukuran seluruh tabel : Total seluruh tabel (bytes) = ∑ Data_Space_Used + ∑ Clustered Index Size + ∑ Non Clustered Index Size = 103473152 + 565248 + 142729216 = 246767616 Bytes = 235.34 MegaBytes
f) Perhitungan Total Kebutuhan Disk Space untuk Server Berdasarkan perhitungan tersebut, dapat disimpulkan bahwa server membutuhkan kapasitas sekitar : Kriteria DBMS (Microsoft SQL Server 2000) OS (Microsoft Windows XP Home Edition) Ukuran seluruh tabel Total
Besar Kapasitas 817 MegaBytes 1,9 GigaBytes 235,34 MegaBytes 2,93 GigaBytes
Tabel 3.36 Perhitungan Total Kebutuhan Disk Space untuk Server
3.5.6
Merancang User View Berikut ini adalah perancangan user view berdasarkan transaksi yang telah dijabarkan di atas.
168 •
Tampilkan detail dari retur jual CREATE VIEW VReturJual AS SELECT a.kodeReturJual AS [Kode Retur], tgl AS [Tanggal], a.kodePelanggan AS [Kode Pelanggan],namaPelanggan AS [Nama Pelanggan], a.kodePegawai AS [Kode Pegawai],namaPegawai AS [Nama Pegawai], kodeBarang AS [Kode Barang],qtyRetur AS [QTY Retur] FROM
ReturJual
a
INNER
JOIN
ReturJualDetail
b
ON
a.kodeReturJual = b.kodeReturJual INNER JOIN Pegawai c ON a.kodePegawai = c.kodePegawai INNER JOIN Pelanggan d ON a.kodePelanggan = d.kodePelanggan •
Tampilkan detail dari penagihan CREATE VIEW VPenagihan AS SELECT a.kodePenagihan AS [Kode Penagihan], tglPenagihan AS [Tgl Penagihan], tglJatuhTempo AS [Tgl Jatuh Tempo], jumlah AS [Jumlah Tagihan], disc AS [Discount] ,ppn AS [PPN], totalPenagihan AS
[Total
Penagihan],
statusTagih
AS
[Status
Tagih],
kodePegawaiTgh AS [Kode Pegawai Tagih], b.namaPegawai AS [Nama Pegawai Tagih], f.kodePelanggan AS [Kode Pelanggan], namaPelanggan AS [Nama Pelanggan], alamatPenagihan AS [Alamat Tagih]
169 FROM Penagihan a INNER JOIN Pegawai b ON a.kodePegawaiTgh = b.kodePegawai INNER JOIN SJ c ON a.kodePenagihan = c.kodePenagihan INNER JOIN PO d ON c.kodePO = d.kodePO INNER JOIN BP e ON d.kodeBP = e.kodeBP INNER JOIN Pelanggan f ON e.kodePelanggan = f.kodePelanggan •
Tampilkan detail dari pembayaran CREATE VIEW VPembayaran AS SELECT a.kodePenagihan AS [Kode Penagihan], tglPenagihan AS [Tgl
Penagihan],
tglJatuhTempo
AS
[Tgl
Jatuh
Tempo],
tglPembayaran AS [Tgl Pembayaran], jumlah AS [Jumlah Tagihan], disc AS [Discount] ,ppn AS [PPN], totalPenagihan AS [Total Penagihan], statusTagih AS [Status Tagih], a.kodePegawaiByr AS [Kode Pegawai Bayar],b.namaPegawai AS [Nama Pegawai Bayar], kodePegawaiTgh AS [Kode Pegawai Tagih], c.namaPegawai AS [Nama Pegawai Tagih], kodeKolektor AS [Kode Kolektor], d.namaPegawai AS [Nama Kolektor] ,h.kodePelanggan AS [Kode Pelanggan], namaPelanggan AS [Nama Pelanggan], alamatPenagihan AS [Alamat Tagih] FROM Penagihan a INNER JOIN Pegawai b ON a.kodePegawaiByr = b.kodePegawai INNER JOIN Pegawai C ON a.kodePegawaiTgh = c.kodePegawai INNER JOIN Pegawai d ON a.kodeKolektor = d.kodePegawai INNER JOIN SJ e ON a.kodePenagihan = e.kodePenagihan INNER JOIN PO f ON f.kodePO = f.kodePO
170 INNER JOIN BP g ON f.kodeBP = g.kodeBP INNER JOIN Pelanggan h ON g.kodePelanggan = h.kodePelanggan •
Tampilkan kode dan nama pelanggan berdasarkan hari kirim CREATE VIEW VJadwal AS SELECT b.kodePelanggan AS [Kode Pelanggan], namaPelanggan AS [Nama Pelanggan], hariKirim AS [Hari Kirim], a.kodeBP AS [Kode BP] FROM JadwalKirim a INNER JOIN BP b ON a.kodeBP = b.kodeBP INNER JOIN Pelanggan c ON b.kodePelanggan = c.kodePelanggan
•
Tampilkan detail dari BP CREATE VIEW VBP AS SELECT a.kodeBP AS [kodeBP], tgl AS [Tanggal], jenisPembayaran AS [Jenis Pembayaran], jmlPinjamanGalon AS [Jml Pinjaman Galon],hargaPinjamanGalon AS [Harga Pinjaman Galon], statusBP AS
[Status
BP],
a.kodePelanggan
AS
[Kode
Pelanggan],
kodePegawai AS [Kode Pegawai], b.kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang],hargaBarang AS [Harga Barang], jmlDefaultKirim AS [Jml Default Kirim] FROM BP a INNER JOIN BPDetail b ON a.kodeBP = b.kodeBP INNER JOIN Pelanggan c ON a.kodePelanggan = c.kodePelanggan INNER JOIN Barang d ON b.kodeBarang = d.kodeBarang
171 •
Tampilkan detail dari PO CREATE VIEW VPO AS SELECT a.kodePO AS [Kode PO], tgl AS [Tanggal], kodePegawai [Kode Pegawai], kodeRKD AS [Kode RKD], kodeBP AS [Kode BP], b.kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang], qtyDiminta AS [Qty Diminta] FROM PO a INNER JOIN PODetail b ON a.kodePO = b.kodePO INNER JOIN Barang c ON b.kodeBarang = c.kodeBarang
•
Tampilkan detail dari SJ CREATE VIEW VSJ AS SELECT a.kodeSJ AS [Kode SJ], tgl AS [Tanggal], totalDijual AS [Total Dijual], kodePegawai AS [Kode Pegawai], kodePO AS [Kode PO], kodePenagihan AS [Kode Penagihan], b.kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang], qtyDijual AS [QTY Dijual], jumlahDijual AS [Jumlah Dijual], Keterangan FROM SJ a INNER JOIN SJDetail b ON a.kodeSJ = b.kodeSJ INNER JOIN Barang c ON b.kodeBarang = c.kodeBarang
•
Tampilkan detail dari BPBJ CREATE VIEW VBPBJ AS
172 SELECT a.kodeBPBJ AS [Kode BPBJ], tgl AS [Tanggal], kodeRKD AS [Kode RKD], kodePegawai AS [Kode Pegawai], b.kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang], qtyDiberikan AS [Qty Diberikan], qtySisaBarang AS [Qty Sisa Barang], Keterangan FROM BPBJ a INNER JOIN BPBJDetail b ON a.kodeBPBJ = b.kodeBPBJ
INNER
JOIN
Barang
c
ON
b.kodeBarang
=
c.kodeBarang •
Tampilkan detail dari BSTPJ CREATE VIEW BSTPJ AS SELECT a.kodeBSTPJ AS [Kode BSTPJ], tgl AS [Tanggal], kodePegawai AS [Kode Pegawai], kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang], qtyMasuk AS [Qty Masuk] FROM BSTPJ a INNER JOIN BSTPJDetail b ON a.kodeBSTPJ = b.kodeBSTPJ INNER JOIN Barang c ON b.kodeBarang = c.kodeBarang
•
Tampilkan detail dari pelanggan CREATE VIEW VPelanggan AS SELECT kodePelanggan AS [Kode Plgn], namaPelanggan AS [Nama Plgn], alamatPengiriman AS [Alamat Kirim], b.namaKel AS [Kelurahan Kirim], c.namaKec AS [Kecamatan Kirim], b.kodePos
173 AS
[Kode
Pos
Kirim],
d.namaKota
AS
[Kota
Kirim],
alamatPenagihan AS [Alamat Tagih], e.namaKel AS [Kelurahan Tagih], f.namaKec AS [Kecamatan Tagih], e.kodePos AS [Kode Pos Tagih], g.namaKota AS [Kota tagih], NPWP, statusPelanggan AS [Status Plgn] FROM Pelanggan a INNER JOIN Kelurahan b ON a.kodeKelKirim = b.kodeKel INNER JOIN Kecamatan c ON b.kodeKec = c.kodeKec INNER JOIN Kota d ON b.kodeKota = d.kodeKota INNER JOIN Kelurahan e ON a.kodeKelTagih = e.kodeKel INNER JOIN Kecamatan f ON e.kodeKec = f.kodeKec INNER JOIN Kota g ON e.kodeKota = g.kodeKota •
Tampilkan nomor telepon pelanggan CREATE VIEW VTelpPlgn AS SELECT a.kodePelanggan AS [Kode Pelanggan], namaPelanggan AS [Nama Pelanggan], noTelepon AS [Nomor Telp] FROM
TeleponPlgn
a
INNER
JOIN
Pelanggan
b
ON
a.kodePelanggan = b.kodePelanggan •
Tampilkan nomor fax pelanggan CREATE VIEW vFaxPlgn AS SELECT a.kodePelanggan AS [Kode Pelanggan], namaPelanggan AS [Nama Pelanggan], noFax AS [Nomor Fax]
174 FROM FaxPlgn a INNER JOIN Pelanggan b ON a.kodePelanggan = b.kodePelanggan •
Tampilkan BPDetail CREATE VIEW VBPDetail AS SELECT a.kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang], satuan AS [Satuan], jmlDefaultKirim AS [Jml Default Kirim], hargaBarang AS [Harga Barang] FROM BPDetail a INNER JOIN Barang b ON a.kodeBarang = b.kodeBarang
•
Tampilkan PODetail CREATE VIEW VPODetail AS SELECT namaBarang AS [Nama Barang], satuan AS [Satuan], qtyDiminta AS [Qty Diminta] FROM PODetail a INNER JOIN Barang b ON a.kodeBarang = b.kodeBarang
•
Tampilkan SJDetail CREATE VIEW VSJDetail SELECT a.kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang], satuan AS [Satuan], qtyDiminta AS [Qty Diminta], hargaBarang AS [Harga Barang]
175 FROM PODetail a INNER JOIN PO b ON a.kodePO = b.kodePO INNER JOIN BP c ON b.kodeBP = c.kodeBP INNER JOIN BPDetail d ON c.kodeBP = d.kodeBP INNER JOIN Barang e ON a.kodeBarang
=
e.kodeBarang
WHERE
a.kodeBarang
=
d.kodeBarang •
Tampilkan SJ yang belum ada penagihan CREATE VIEW VTagihSJ AS SELECT b.kodeBP AS [Kode BP], kodeSJ AS [Kode SJ], totalDijual AS [Total Dijual] FROM SJ a INNER JOIN PO b ON a.kodePO = b.kodePO INNER JOIN BP c ON b.kodeBP = c.kodeBP WHERE kodePenagihan IS NULL
•
Tampilkan Barang yang ada di RKD CREATE VIEW VBrgRKD AS SELECT b.kodeBarang AS [Kode Barang], namaBarang AS [Nama Barang],
satuan
AS
[Satuan],
SUM(qtyDiminta)
AS
[QTY
Dibutuhkan] FROM PO a INNER JOIN PODetail b ON a.kodePO = b.kodePO INNER JOIN Barang c ON b.kodeBarang = c.kodeBarang GROUP BY b.kodeBarang,namaBarang,satuan
176 3.5.7
Merancang Mekanisme Keamanan Berikut ini adalah perancangan mekanisme keamanan yang meliputi nama tabel beserta hak akses yang dimiliki oleh user untuk masing – masing tabel.
Nama Tabel Pelanggan
TeleponPlgn
FaxPlgn
Jabatan
Pegawai
Barang
User Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Gudang Kasir Keuangan Penjualan Personalia Admin Distribusi Gudang Kasir Keuangan Penjualan Personalia Admin Distribusi Gudang Kasir Keuangan Penjualan
Hak Akses I R U D x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
177
Nama Tabel Kendaraan RKD BP
BPDetail
JadwalKirim
Penagihan
PO
PODetail
SJ
SJDetail
User Admin Distribusi Gudang Admin Distribusi Gudang Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Penjualan Gudang Admin Kasir Keuangan Penjualan Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Kasir Keuangan Penjualan Admin Distribusi Kasir Keuangan
Hak Akses I R U D x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
178
Nama Tabel BPBJ
BPBJDetail
BSTPJ BSTPJDetail ReturJual
ReturJualDetail
Kota Kecamatan Pos Kelurahan
User Penjualan Admin Distribusi Gudang Penjualan Admin Distribusi Gudang Penjualan Admin Gudang Admin Gudang Admin Distribusi Gudang Penjualan Admin Distribusi Gudang Penjualan Admin Penjualan Distribusi Admin Penjualan Distribusi Admin Penjualan Distribusi Admin Penjualan Distribusi
Hak Akses I R U D x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
Tabel 3.37 Merancang Mekanisme Keamanan