(kdbarang) (kdsupplier) Tabel 4.6 Dokumentasi relasi dan atribut foreign key pada tahap penurunan relasi model data logikal

128  Download (0)

Teks penuh

(1)

Foreign Key kdBarang references HargaBeli (kdBarang)

Foreign Key kdSupplier references HargaBeli (kdSupplier)

Tabel 4.6 Dokumentasi relasi dan atribut foreign key pada tahap penurunan relasi model data logikal

No. Relations

1. Pelanggan (kdPelanggan, nama, alamat, kota, telp, fax, HP, blacklist, KTP, jenisPelanggan)

Primary Key kdPelanggan

2. DetailMember (noMember, tglMasuk, tglJatuhTempo, status, kdPelanggan) Primary Key noMember

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) 3. Mobil (noPlat, tipe, warna, tahun, kilometer, status, kdPelanggan)

Primary Key noPlat

Foreign Key kdPelanggan references Pelanggan (kdPelanggan)

4. RegistrasiMember (noRegistrasi, tanggal, jmlhBayar, kdPelanggan, kdKaryawan)

Primary Key noRegistrasi

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) Foreign Key kdKaryawan references Karyawan (kdKaryawan)

(2)

No. Relations

piutang, kdPelanggan, noPlat, kdKasir, kdMontir, noDO) Primary Key noFaktur

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) Foreign Key noPlat references Mobil (noPlat)

Foreign Key kdKasir references Karyawan (kdKaryawan) Foreign Key kdMontir references Karyawan (kdKaryawan) Foreign Key noDO references DeliveryOrder (noDO) 6. DetailPenjualan (noFaktur, kdBarang, qty, hargaJual)

Primary Key noFaktur, kdBarang

Foreign Key noFaktur references FakturPenjualan (noFaktur) Foreign Key kdBarang references Barang (kdBarang)

7. DeliveryOrder (noDO, tanggal, status, kdPelanggan, kdKasir, kdGudang, kdSupir)

Primary Key noDO

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) Foreign Key kdKasir references Karyawan (kdKaryawan) Foreign Key kdGudang references Karyawan (kdKaryawan) Foreign Key kdSupir references Karyawan (kdKaryawan) 8. DetailDO (noDO, kdBarang, qty)

Primary Key noDO, kdBarang

Foreign Key noDO references DeliveryOrder (noDO) Foreign Key kdBarang references Barang (kdBarang)

(3)

No. Relations

9. Karyawan (kdKaryawan, nama, alamat, kota, telp, fax, HP, KTP, tglLahir, status, kdDivisi)

Primary Key kdKaryawan

Foreign Key kdDivisi references Divisi (kdDivisi) 10. Divisi (kdDivisi, divisi)

Primary Key kdDivisi

11. PelunasanPiutang (noPelunasan, tanggal, jmlhBayar, noFaktur, kdKaryawan) Primary Key noPelunasan

Foreign Key noFaktur references FakturPenjualan (noFaktur) Foreign Key kdKaryawan references Karyawan (kdKaryawan) 12. JenisBarang (kdJenisBarang, jenisBarang)

Primary Key kdJenisBarang

13. Barang (kdBarang, namaBarang, hargaJual, stok, stokMin, stokMax, kdJenisBarang)

Primary Key kdBarang

Foreign Key kdJenisBarang references JenisBarang (kdJenisBarang) 14. HargaBeli (kdBarang, kdSupplier, hargaBeli, kurs)

Primary Key kdBarang, kdSupplier

Foreign Key kdBarang references Barang (kdBarang) Foreign Key kdSupplier references Supplier (kdSupplier)

15. Pembelian (noPO, tanggalPO, status, kdKasirPO, kdSupplier, noFaktur, tanggalFB, kurs, total, jmlhBayar, utang, kdKasirFB)

(4)

No. Relations

Primary Key noPO

Foreign Key kdKasirPO references Karyawan (kdKaryawan) Foreign Key kdKasirFB references Karyawan (kdKaryawan) Foreign Key kdSupplier references Supplier (kdSupplier) 16. DetailPO (noPO, kdBarang, qty)

Primary Key noPO, kdBarang

Foreign Key noPO references PurchaseOrder (noPO) Foreign Key kdBarang references Barang (kdBarang)

17. DetailPembelian (noPO, kdBarang, kdSupplier, hargaBeli, qty) Primary Key noPO, kdBarang, kdSupplier

Foreign Key noPO references Pembelian (noPO)

Foreign Key kdBarang references HargaBeli (kdBarang) Foreign Key kdSupplier references HargaBeli (kdSupplier)

18. Supplier (kdSupplier, namaPerusahaan, alamat, kota, telp, fax, HP, contactPerson, status)

Primary Key kdSupplier

19. PelunasanUtang (noPelunasan, tanggal, jmlhBayar, kdKaryawan, noFaktur) Primary Key noPelunasan

Foreign Key kdKaryawan references Karyawan (kdKaryawan) Foreign Key noFaktur references Pembelian (noFaktur)

(5)
(6)

4.1.2.2. Validasi relasi menggunakan normalisasi

Tujuan normalisasi adalah memastikan tiap-tiap relasi memiliki jumlah atribut minimal yang dapat mendukung kebutuhan data perusahaan, dan memiliki redundansi data yang minimal di dalamnya. Namun perlu ditekankan bahwa redundansi yang minimal diperlukan untuk meningkatkan kinerja basisdata dalam pencarian data. Berdasarkan langkah-langkah perancangan basisdata yang telah dilakukan, mayoritas relasi-relasi yang terbentuk telah memenuhi kriteria normalisasi sampai pada tahap 3NF, namun masih ada beberapa relasi yang memerlukan validasi menggunakan normalisasi.

Pelanggan

3NF: kdPelanggan + nama + alamat + kota + telp + fax + HP + blacklist + KTP + jenisPelanggan

Ket: jenisPelanggan tidak dibedakan menjadi entitas baru, karena jumlah jenisPelanggan sedikit (4 jenis) dan tidak akan bertambah di masa yang akan datang.

DetailMember

UNF: noMember + nama + alamat + kota + telp + fax + HP + blacklist + KTP + tglMasuk + tglJatuhTempo + status

1NF: noMember + kdPelanggan + nama + alamat + kota + telp + fax + HP + blacklist + KTP + tglMasuk + status

(7)

2NF: noMember + kdPelanggan +nama + alamat + kota + telp + fax + HP + blacklist + KTP + tglMasuk + status

3NF:

DetailMember: noMember + tglMasuk + status + kdPelanggan Pelanggan: kdPelanggan + nama + alamat + kota + telp + fax + HP + blacklist + KTP + jenisPelanggan

Mobil

3NF: noPlat + tipe + warna + tahun + kilometer + status + kdPelanggan

Divisi

3NF: kdDivisi + divisi

Karyawan

3NF: kdKaryawan + nama + alamat + kota + telp + fax + HP + KTP + tglLahir + status + kdDivisi

RegistrasiMember

3NF: noRegistrasi + tanggal + jmlhBayar + kdPelanggan + kdKaryawan

JenisBarang

(8)

Barang

3NF: kdBarang + namaBarang + hargaJual + stok + stokMin + stokMax + kdJenisBarang

DeliveryOrder

3NF: noDO + tanggal + status + kdPelanggan + kdKasir + kdGudang + kdSupir

Ket: kdKasir, kdGudang, dan kdSupir merupakan referensi ke table Karyawan (kdKaryawan)

DetailDO

3NF: noDO + kdBarang + qty

FakturPenjualan

UNF: noFaktur + tanggal + nama + alamat + kota + jenisPelanggan + {namaBarang + hargaJual + qty +subtotal} + diskon + biayaServis + total + jmlhBayar + piutang + noPlat + tipe + kilometer + namaKasir + namaMontir + noDO

1NF: noFaktur + tanggal + kdPelanggan + nama + alamat + kota + jenisPelanggan + kdBarang + namaBarang + hargaJual + qty + diskon + biayaServis + jmlhBayar + piutang + noPlat + tipe + kilometer + kdKaryawan1 + nama1 + kdKaryawan2 + nama2 + noDO

(9)

FakturPenjualan: noFaktur + tanggal + kdPelanggan + nama + alamat + kota + jenisPelanggan + diskon + biayaServis + jmlhBayar + piutang + noPlat + tipe + kilometer + kdKaryawan1 + nama1 + kdKaryawan2 + nama2 + noDO

Barang: kdBarang + namaBarang

DetailPenjualan: noFaktur + kdBarang + hargaJual + qty 3NF:

FakturPenjualan: noFaktur + tanggal + diskon + biayaServis + jmlhBayar + piutang + noPlat + kdKasir + kdMontir + noDO + kdPelanggan

Pelanggan: kdPelanggan + nama + alamat + kota + jenisPelanggan

DeliveryOrder: noDO

Mobil: noPlat + tipe + kilometer Karyawan: kdKaryawan + nama

Barang: kdBarang + namaBarang + hargaJual

DetailPenjualan: noFaktur + kdBarang + hargaJual + qty Ket:

1. kdKasir dan kdMontir merupakan referensi ke tabel Karyawan (kdKaryawan)

2. Walaupun atribut piutang dapat dihitung dari total penjualan dikurangi dengan jumlah pembayaran, atribut piutang juga digunakan untuk memantau sisa piutang pelanggan. Atribut tersebut akan di-update setiap kali pelanggan melakukan

(10)

cicilan piutang, sehingga atribut tersebut perlu dimasukkan ke dalam basisdata.

3. Atribut hargaJual dimasukkan ke dalam relasi DetailPenjualan karena harga jual suatu barang bisa berubah di masa yang akan datang.

DetailPenjualan

3NF: noFaktur + kdBarang + hargaJual + qty

PelunasanPiutang

3NF: noPelunasan + tanggal + jmlhBayar + noFaktur + kdKaryawan

Supplier

3NF: kdSupplier + namaPerusahaan + alamat + kota + telp + fax + HP + contactPerson + status

HargaBeli

3NF: kdBarang + kdSupplier + hargaBeli + kurs

Pembelian

UNF: noFaktur + tanggal + namaPerusahaan + alamat + kota + kurs + {namaBarang + hargaBeli + qty + subtotal} + total + jmlhBayar + utang + namaKasir + noPO

(11)

1NF: noFaktur + tanggal + kdSupplier1 + namaPerusahaan + alamat + kota + kurs + kdSupplier2 + kdBarang + namaBarang + hargaBeli + qty + jmlhBayar + utang + kdKaryawan + nama + noPO

Ket: kdSupplier1 berfungsi untuk menentukan perusahaan yang menjadi supplier, sedangkan kdSupplier2 berfungsi untuk menentukan hargaBeli barang.

2NF:

Pembelian: noFaktur + tanggal + noPO + kdSupplier + namaPerusahaan + alamat + kota + kurs + jmlhBayar + utang + kdKaryawan + nama

Barang: kdBarang + namaBarang

HargaBeli: kdBarang + kdSupplier + hargaBeli

DetailPembelian: noPO + kdBarang + kdSupplier + qty + hargaBeli

3NF:

Pembelian: noFaktur + tanggalFB + noPO + kurs + jmlhBayar + utang + kdKasirFB

PurchaseOrder: noPO + kdSupplier

Supplier: kdSupplier + namaPerusahaan + alamat + kota Barang: kdBarang + namaBarang

HargaBeli: kdBarang + kdSupplier + hargaBeli

DetailPembelian: noPO + kdBarang + kdSupplier + qty + hargaBeli

(12)

Karyawan: kdKaryawan + nama Ket:

1. Walaupun atribut utang dapat dihitung dari total pembelian dikurangi dengan jumlah pembayaran, atribut utang juga digunakan untuk memantau sisa utang terhadap supplier. Atribut tersebut akan di-update setiap kali perusahaan melakukan cicilan utang, sehingga atribut tersebut perlu dimasukkan ke dalam basisdata.

2. Atribut hargaBeli dimasukkan ke dalam relasi DetailPembelian karena harga beli suatu barang bisa berubah di masa yang akan datang.

DetailPO

3NF: noPO + kdBarang + qty

DetailPembelian

3NF: noPO + kdBarang + kdSupplier + hargaBeli + qty

PelunasanUtang

3NF: noPelunasan + tanggal + jmlhBayar + kdKaryawan + noFaktur

(13)

4.1.2.3. Validasi relasi terhadap transaksi user

Tujuan langkah ini adalah untuk memastikan model data logikal mendukung transaksi-transaksi yang diperlukan perusahaan. Transaksi-transaksi yang diperlukan dalam prosedur pembelian, persediaan, dan penjualan antara lain:

Data entry

Memasukkan data pelanggan baru.

Memasukkan data transaksi registrasi member baru, memasukkan detail member baru, dan update jenis pelanggan menjadi member. Memasukkan data mobil yang dimiliki pelanggan.

Memasukkan data karyawan baru. Memasukkan divisi baru.

Memasukkan data supplier baru. Memasukkan data barang baru. Memasukkan jenis barang baru.

Menambah barang yang dijual oleh suatu supplier.

Memasukkan data transaksi registrasi member seorang pelanggan yang sudah pernah menjadi member sebelumnya, mengupdate detail member, dan mengubah jenis pelanggan menjadi member. Memasukkan data delivery order.

Memasukkan data transaksi penjualan non servis, update stok barang, dan update status delivery order menjadi ‘processed’ jika faktur memiliki referensi pada suatu delivery order.

(14)

Memasukkan data transaksi penjualan servis, update stok barang, dan update atribut kilometer pada mobil yang diservis.

Memasukkan data transaksi pelunasan piutang, dan update atribut jumlah piutang pada faktur penjualan yang dilunasi.

Memasukkan data purchase order.

Memasukkan data transaksi pembelian, update stok barang, dan update status purchase order yang direferensikan menjadi ‘processed’.

Memasukkan data transaksi pelunasan utang dan update atribut jumlah utang pada faktur pembelian yang dilunasi.

Data update/ deletion

Update data pelanggan. Update data supplier. Update data karyawan. Update data mobil. Update data barang.

Update status blacklist pelanggan menjadi ‘Y’ jika pelanggan memiliki faktur penjualan yang belum dilunasi selama 1 bulan sejak tanggal pembuatan faktur.

Update status member menjadi ‘S’ jika masa jatuh tempo seorang member sudah lewat.

Update barang.

(15)

Delete data Faktur Penjualan. Update/ delete data Purchase Order.

Data queries

a. Menampilkan pelanggan-pelanggan member yang masa berlaku membernya akan habis dalam jangka waktu 1 bulan ke depan

b. Menampilkan data suatu registrasi member tertentu secara mendetail

c. Menampilkan daftar registrasi member beserta nama pelanggan yang melakukan registrasi

d. Menampilkan data delivery order tertentu

e. Menampilkan daftar delivery order beserta nama pelanggannya, diurut berdasarkan nomor DO

f. Menampilkan daftar delivery order yang memiliki status ’queue’ beserta nama pelanggannya, diurut berdasarkan nomor DO

g. Menampilkan daftar barang yang jumlah on hand stock-nya sudah mencapai jumlah stok minimum

h. Menampilkan data faktur penjualan tertentu

i. Menampilkan daftar faktur penjualan beserta nama pelanggan yang melakukan transaksi, diurut berdasarkan nomor faktur

(16)

j. Menampilkan daftar faktur penjualan yang belum lunas beserta nama pelanggannya diurut berdasarkan nomor faktur penjualan

k. Menampilkan sejarah penjualan terhadap suatu customer l. Menampilkan sejarah perbaikan terhadap suatu mobil

m. Menampilkan daftar mobil yang pernah ditangani seorang kepala montir

n. Menampilkan data purchase order tertentu

o. Menampilkan daftar purchase order beserta nama suppliernya, diurut berdasarkan nomor PO

p. Menampilkan daftar purchase order yang memiliki status ’queue’ beserta nama suppliernya, diurut berdasarkan nomor PO

q. Menampilkan data faktur pembelian tertentu

r. Menampilkan daftar faktur pembelian beserta nama suppliernya, diurut berdasarkan nomor faktur pembelian

s. Menampilkan daftar faktur pembelian yang belum lunas beserta nama suppliernya, diurut berdasarkan nomor faktur pembelian

t. Menampilkan data pelunasan piutang tertentu

u. Menampilkan daftar transaksi pelunasan piutang beserta nama pelanggan yang melakukan transaksi pelunasan, diurut berdasarkan nomor pelunasan piutang

(17)

w. Menampilkan daftar transaksi pelunasan utang beserta nama supplier yang dilunasi, diurut berdasarkan nomor pelunasan utang

x. Menampilkan barang-barang yang dijual supplier tertentu y. Menampilkan daftar mobil yang dimiliki seorang pelanggan z. Menampilkan barang berdasarkan jenis barangnya

aa. Menampilkan karyawan berdasarkan divisinya

bb. Menampilkan laporan penjualan selama periode tertentu cc. Menampilkan laporan pembelian selama periode tertentu dd. Menampilkan laporan pemasukan dan pengeluaran selama

(18)
(19)

4.1.2.4. Memeriksa integrity constraints

Tujuan langkah ini adalah untuk merepresentasikan integrity constraint pada relasi model data logikal. Ada beberapa pertimbangan dalam merepresentasikan integrity constraint, yaitu :

1. Required data: Memastikan atribut-atribut tertentu yang tidak diperbolehkan bernilai null. Batasan ini sudah dipenuhi pada langkah 4.1.1.3, yaitu tahap identifikasi dan asosiasi atribut dengan entitas atau relationship tertentu.

2. Attribute domain constraints: Menentukan domain (Nilai yang diperbolehkan) untuk tiap-tiap atribut. Batasan ini sudah dipenuhi pada langkah 4.1.1.4, yaitu tahap menentukan domain atribut.

3. Multiplicity: Merupakan batasan jumlah yang ditempatkan pada hubungan antar data di dalam basisdata. Batasan ini sudah dipenuhi pada langkah 4.1.1.2, yaitu tahap identifikasi tipe hubungan (relationship).

4. Entity Integrity: Memastikan primary key suatu entitas tidak bernilai null. Batasan ini sudah dipenuhi pada langkah 4.1.1.5, yaitu tahap menentukan atribut candidate, alternate, dan primary key.

5. Referential Integrity: Memastikan nilai yang tersimpan dalam atribut foreign key, menunjuk row tertentu pada parent entity-nya. Pelaksanaan batasan ini akan dibahas lebih lanjut.

(20)

6. General Constraints: Batasan yang berasal dari persyaratan-persyaratan bisnis perusahaan. Penanganan general constraints akan dibahas lebih lanjut.

Ada dua hal mengenai foreign key yang perlu diperhatikan. Hal pertama adalah kemungkinan foreign key bernilai null. Hal ini ditentukan oleh batasan partisipasi foreign key tersebut, apakah bersifat mandatory atau optional. Dalam kasus ini, ditemukan empat foreign key yang bersifat optional, yaitu kdGudang pada entitas DeliveryOrder, kdSupir pada entitas DeliveryOrder, NoPlat pada entitas FakturPenjualan, dan noDO pada entitas FakturPenjualan. Maka, keempat foreign key tersebut bisa bernilai null.

Hal kedua adalah bagaimana menjamin referential integrity. Yaitu dengan membuat existence constraints, yang menentukan tindakan apa yang diambil saat suatu baris di parent entity yang menjadi referensi untuk foreign key di entitas lain mengalami update atau delete. Tabel relasi berikut menggambarkan referential integrity pada relasi-relasi yang telah terbentuk:

(21)

Tabel 4.7 Tabel relasi dengan referential integrity No. Relations

1. Pelanggan (kdPelanggan, nama, alamat, kota, telp, fax, HP, blacklist, KTP, jenisPelanggan)

Primary Key kdPelanggan

2. DetailMember (noMember, tglMasuk, tglJatuhTempo, status, kdPelanggan) Primary Key noMember

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION

3. Mobil (noPlat, tipe, warna, tahun, kilometer, status, kdPelanggan) Primary Key noPlat

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION

4. RegistrasiMember (noRegistrasi, tanggal, jmlhBayar, kdPelanggan, kdKaryawan)

Primary Key noRegistrasi

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdKaryawan references Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION

5. FakturPenjualan (noFaktur, tanggal, diskon, biayaServis, total, jmlhBayar, piutang, kdPelanggan, noPlat, kdKasir, kdMontir, noDO)

(22)

No. Relations

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key noPlat references Mobil (noPlat)

Foreign Key kdKasir references Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdMontir references Karyawan (kdKaryawan Foreign Key noDO references DeliveryOrder (noDO) 6. DetailPenjualan (noFaktur, kdBarang, qty, hargaJual)

Primary Key noFaktur, kdBarang

Foreign Key noFaktur references FakturPenjualan (noFaktur) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdBarang references Barang (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION

7. DeliveryOrder (noDO, tanggal, status, kdPelanggan, kdKasir, kdGudang, kdSupir)

Primary Key noDO

Foreign Key kdPelanggan references Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdKasir references Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdGudang references Karyawan (kdKaryawan) Foreign Key kdSupir references Karyawan (kdKaryawan)

(23)

No. Relations

8. DetailDO (noDO, kdBarang, qty) Primary Key noDO, kdBarang

Foreign Key noDO references DeliveryOrder (noDO) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdBarang references Barang (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION

9. Karyawan (kdKaryawan, nama, alamat, kota, telp, fax, HP, KTP, tglLahir, status, kdDivisi)

Primary Key kdKaryawan

Foreign Key kdDivisi references Divisi (kdDivisi) ON UPDATE CASCADE ON DELETE NO ACTION

10. Divisi (kdDivisi, divisi) Primary Key kdDivisi

11. PelunasanPiutang (noPelunasan, tanggal, jmlhBayar, noFaktur, kdKaryawan) Primary Key noPelunasan

Foreign Key noFaktur references FakturPenjualan (noFaktur) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdKaryawan references Karyawan (kdKaryawan) 12. JenisBarang (kdJenisBarang, jenisBarang)

Primary Key kdJenisBarang

13. Barang (kdBarang, namaBarang, hargaJual, stok, stokMin, stokMax, kdJenisBarang)

(24)

No. Relations

Primary Key kdBarang

Foreign Key kdJenisBarang references JenisBarang (kdJenisBarang) ON UPDATE CASCADE ON DELETE NO ACTION

14. HargaBeli (kdBarang, kdSupplier, hargaBeli, kurs) Primary Key kdBarang, kdSupplier

Foreign Key kdBarang references Barang (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdSupplier references Supplier (kdSupplier) ON UPDATE CASCADE ON DELETE NO ACTION

15. Pembelian (noPO, tanggalPO, status, kdKasirPO, kdSupplier, noFaktur, tanggalFB, kurs, total, jmlhBayar, utang, kdKasirFB)

Primary Key noPO

Foreign Key kdKasirPO references Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdKasirFB references Karyawan (kdKaryawan)

Foreign Key kdSupplier references Supplier (kdSupplier) ON UPDATE CASCADE ON DELETE NO ACTION

16. DetailPO (noPO, kdBarang, qty) Primary Key noPO, kdBarang

Foreign Key noPO references PurchaseOrder (noPO) ON UPDATE CASCADE ON DELETE NO ACTION

(25)

No. Relations

CASCADE ON DELETE NO ACTION

17. DetailPembelian (noPO, kdBarang, kdSupplier, hargaBeli, qty) Primary Key noPO, kdBarang, kdSupplier

Foreign Key noPO references Pembelian (noPO) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdBarang references HargaBeli (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key kdSupplier references HargaBeli (kdSupplier) ON UPDATE CASCADE ON DELETE NO ACTION

18. Supplier (kdSupplier, namaPerusahaan, alamat, kota, telp, fax, HP, contactPerson, status)

Primary Key kdSupplier

19. PelunasanUtang (noPelunasan, tanggal, jmlhBayar, kdKaryawan, noFaktur) Primary Key noPelunasan

Foreign Key kdKaryawan references Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION

Foreign Key noFaktur references Pembelian (noFaktur)

4.1.2.5. Melakukan review model data logikal dengan user

Untuk menyelesaikan tahap ini, perlu dilakukan review model data logikal yang telah dibuat dengan pengguna untuk memastikan bahwa model data logikal yang dibuat telah

(26)

memenuhi semua persyaratan data pengguna. Untuk itu, maka dilakukan diskusi dengan perwakilan perusahaan dan telah disetujui bahwa model data logikal telah memenuhi semua persyaratan yang diperlukan oleh perusahaan, mulai dari proses pembelian, proses persediaan, dan proses penjualan.

4.1.2.6. Mempertimbangkan perkembangan di masa depan

Tujuan dari langkah ini adalah untuk menentukan apakah ada terjadi perubahan yang signifikan di masa yang akan datang, dan apakah model data logikal sudah bisa mengakomodasi perubahan tersebut. Dengan melakukan diskusi dengan perwakilan perusahaan, telah disetujui bahwa model data logikal telah dapat mengakomodasi perubahan-perubahan yang mungkin terjadi di masa depan, yaitu kemungkinan adanya penambahan divisi, penambahan jenis barang, dan kemungkinan adanya kebutuhan akan laporan penjualan atau pembelian berdasarkan kriteria tertentu.

4.1.2.7. Pemilihan Database Management System (DBMS)

Untuk pemilihan DBMS diperlukan beberapa pertimbangan. Berikut ini akan dibandingkan antara penggunaan SQL Server 2000, Oracle 9i, dan MySQL v4.1. Tabel berikut adalah tabel perbandingan dalam hal spesifikasi perangkat keras yang diperlukan SQL Server 2000, Oracle 9i, dan MySQL v4.1.

(27)

Tabel 4.8 Spesifikasi perangkat keras SQL Server 2000 (sumber : www.mssqlcity.com)

Hardware Requirements Processor Pentium 166MHz or higher

Memory 32MB RAM (Minimum) 64MB RAM

128MB RAM or more recommended Hardisk Space 270MB (Full installation)

250MB (Typical) 95MB (Minimum) Desktop engine : 44MB

Analysis services : 50MB (Minimum) 130MB (Typical)

English query : 80MB

Tabel 4.9 Spesifikasi perangkat keras Oracle 9i (sumber : www.mssqlcity.com)

Hardware Requirements Processor Pentium 166MHz or higher

Memory RAM : 128MB (256 recommended)

Virtual memory : Initial size 200MB, maximum size 400MB

Hardisk Space 140MB on the system drive

Plus 4.5GB for Oracle Home Drive (FAT) or 2.8GB for Oracle Home Drive (NTFS)

(28)

Tabel 4.10 Spesifikasi perangkat keras MySQL v4.1 (sumber : www.mssqlcity.com)

Hardware Requirements Processor Pentium 166MHz or higher

Memory RAM : 32MB Hardisk Space 60MB

Performa dari basisdata bergantung dari pengguna basisdata, pengembang basisdata, dan administrator basisdata. Bukan dari penyedia DBMS. Baik SQL Server 2000, Oracle 9i, dan MySQL v4.1, ketiganya dapat digunakan untuk membuat suatu basisdata yang stabil dan efisien. Tabel berikut akan menjelaskan fitur-fitur yang terdapat pada SQL Server 2000, Oracle 9i, dan MySQL v4.1. Dialek SQL yang didukung oleh Microsoft SQL Server 2000 dinamakan T-SQL, sedangkan dialek SQL yang didukung oleh Oracle 9i dinamakan PL/ SQL, dan dialek SQL yang didukung oleh MySQL v4.1 dinamakan MySQL dialect.

Tabel 4.11 Fitur-fitur SQL Server 2000 dan Oracle 9i (sumber : www.mssqlcity.com)

Feature T-SQL PL/ SQL

Index B-Tree Indexes B-Tree Indexes, Bitmap Indexes, Partitioned Indexes, Function-based Indexes, Domain Indexes

(29)

Partitioned tables Object tables, Temporary tables, Partitioned tables, External tables, Index organized tables Triggers AFTER triggers,

INSTEAD OF triggers

BEFORE triggers, AFTER triggers, INSTEAD OF triggers, Database Event triggers Procedures T-SQL Statements PL/ SQL Statements,

Java methods,

3rd Generation Language (3GL) routines

Arrays Not supported Supported

Tabel 4.12 Fitur-fitur SQL Server 2000 dan MySQL v4.1 (sumber : www.mssqlcity.com)

Feature T-SQL MySQL dialect

Views General Views, Indexed Views, Distributed Partitioned Views

Not supported

Triggers AFTER triggers, INSTEAD OF triggers

Not supported

Procedures T-SQL Statements Not supported User-defined functions Scalar functions, Inline table-valued functions, Multistatement table-valued functions C, C++ external libraries

(30)

Foreign Keys Supported Supported for only InnoDB tables

Cursors Supported Not supported Arrays Not supported Supported

Tabel 4.13 Limit dari SQL Server 2000 dan Oracle 9i (sumber : www.mssqlcity.com)

Feature SQL Server 2000 Oracle 9i Database name length

Column name length Index name length Table name length View name length

Stored procedure name length Max columns per index Max char() size

Max varchar() size Max columns per table Max table row length Max query size Recursive subqueries 128 128 128 128 128 128 16 8000 8000 1024 8036 16777216 40 8 30 30 30 30 30 32 2000 4000 1000 255000 16777216 64

Tabel 4.14 Limit dari SQL Server 2000 dan MySQL v4.1 (sumber : www.mssqlcity.com)

Feature SQL Server 2000 MySQL v4.1 Column name length

Index name length Table name length Max indexes per table Index length 128 128 128 250 900 64 64 64 32 1024

(31)

Max index column length Column per index

Max char() size Max varchar() size Max blob size

Max columns per table Max table row length Longest SQL statement 900 16 8000 8000 2147483647 1024 8036 16777216 255 16 1048543 1048543 1048543 2599 65534 1048574

Tabel 4.15 Perbandingan harga SQL Server 2000 dan Oracle 9i (sumber : www.mssqlcity.com)

Number of CPU’s SQL Server 2000 Oracle 1 2 4 8 16 32 $4,999 $9,998 $19,996 $39,992 $79,984 $159,968 $15,000 $30,000 $60,000 $120,000 $240,000 $480,000

Sedangkan MySQL v4.1 merupakan software Open Source/ produk free software, dibawah persetujuan GNU General Public License.

Dari beberapa perbandingan diatas dapat ditarik kesimpulan yaitu dengan menggunakan SQL Server 2000 maka biaya yang dikeluarkan lebih murah dibanding menggunakan Oracle 9i; SQL Server 2000 juga mudah di install dan mudah digunakan;

(32)

sedangkan apabila dibandingkan dengan MySQL v4.1, T-SQL memiliki kemampuan yang lebih baik daripada MySQL dialect.

Keuntungan Oracle 9i yaitu dapat berjalan di semua platform, dan dilihat dari dialek SQL yang didukung Oracle 9i yaitu PL/ SQL yang memiliki kemampuan lebih baik daripada dialek SQL yang didukung Microsoft SQL Server 2000 yaitu T-SQL.

Sedangkan keuntungan MySQL v4.1 yaitu dapat berjalan di semua platform, kebutuhan kapasitas hardware yang lebih rendah daripada SQL Server 2000, dapat digunakan tanpa perlu membayar (free software).

Maka dari kesimpulan diatas, dipilihlah Microsoft SQL Server 2000 sebagai DBMS untuk penulisan skripsi ini.

4.1.3. Perancangan Basisdata Fisikal

Perancangan basisdata fisikal merupakan proses pembuatan deskripsi implementasi basisdata pada secondary storage, mencakup relasi-relasi dasar, organisasi file, dan index yang digunakan untuk mencapai akses data yang efisien, beserta semua integrity constraints, dan langkah-langkah yang dilakukan untuk menjamin keamanan data. Perancangan basisdata fisikal terdiri dari beberapa langkah, yaitu :

1. Menerjemahkan model data logikal untuk DBMS yang digunakan a. Merancang relasi dasar

(33)

c. Merancang general constraints 2. Merancang organisasi file dan index

a. Menganalisa transaksi b. Memilih organisasi file c. Memilih index

d. Memperkirakan kebutuhan disk space 3. Merancang view pengguna

4. Merancang mekanisme keamanan

4.1.3.1. Menerjemahkan model data logikal untuk DBMS yang digunakan

Tujuan langkah ini adalah untuk menghasilkan skema basisdata relasional dari model data logikal yang dapat diterapkan pada DBMS yang akan digunakan.

4.1.3.1.1. Merancang relasi dasar

Tujuan langkah ini adalah untuk menentukan bagaimana representasi relasi dasar, yang telah diidentifikasi pada model data logikal, di dalam DBMS yang akan digunakan. Berikut ini adalah Database Definition Language (DBDL) untuk masing-masing relasi dengan dasar penggunaan SQL Server 2000 sebagai DBMS.

(34)

Tabel 4.16 Database Definition Language untuk relasi dasar Domain KodeMaster : integer with identity function

Domain NomorMember : fixed length character string, length 9 Domain KodeTransaksi : fixed length character string, length 10 Domain KodeForeign : integer

Domain Nama : variable length character string, length 25 Domain NamaPerusahaan : variable length character string, length 50 Domain NamaBarang : variable length character string, length 300 Domain Jenis : variable length character string, length 40 Domain Alamat : variable length character string, length 100 Domain Kota : variable length character string, length 15 Domain NomorTelepon : variable length character string, length 15 Domain NomorPlat : variable length character string, length 10 Domain WarnaMobil : variable length character string, length 15 Domain TipeMobil : variable length character string, length 20 Domain KilometerMobil : integer

Domain JumlahBarang : small integer

Domain StatusBlacklist : single character, must be one of ‘Y’ or ‘N’ Domain Status : single character, must be one of ‘A’ or ‘S’ Domain StatusProses : single character, must be one of ‘Q’ or ‘P’ Domain NomorKTP : variable length character string, length 20 Domain Tanggal : datetime

(35)

Domain Uang : monetary value

Domain Kurs : fixed length character string, length 3 must be one of ‘IDR’ or ‘USD’

1. Pelanggan (

kdPelanggan KodeMaster NOT NULL,

nama Nama NOT NULL,

alamat Alamat ,

kota Kota,

telp NomorTelepon,

fax NomorTelepon,

HP NomorTelepon,

blacklist StatusBlacklist NOT NULL DEFAULT ‘N’,

KTP NomorKTP,

jenisPelanggan Jenis NOT NULL, PRIMARY KEY (kdPelanggan) );

2. DetailMember (

noMember NomorMember NOT NULL,

tglMasuk Tanggal NOT NULL,

tglJatuhTempo Tanggal NOT NULL,

status Status NOT NULL DEFAULT ‘A’, kdPelanggan KodeForeign NOT NULL,

(36)

FOREIGN KEY (kdPelanggan) REFERENCES Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION );

3. Mobil (

noPlat NomorPlat NOT NULL,

tipe TipeMobil NOT NULL,

warna WarnaMobil,

tahun Tahun,

kilometer KilometerMobil,

status Status NOT NULL DEFAULT ‘A’, kdPelanggan KodeForeign NOT NULL,

PRIMARY KEY (noPlat),

FOREIGN KEY (kdPelanggan) references Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION );

4. Divisi (

kdDivisi KodeMaster NOT NULL,

divisi Jenis NOT NULL,

PRIMARY KEY (kdDivisi) );

5. Karyawan (

kdKaryawan KodeMaster NOT NULL,

nama Nama NOT NULL,

(37)

kota Kota,

telp NomorTelepon,

fax Nomor Telepon,

HP Nomor Telepon,

KTP NomorKTP,

tglLahir Tanggal,

status Status NOT NULL DEFAULT ‘A’, kdDivisi KodeForeign NOT NULL,

PRIMARY KEY (kdKaryawan),

FOREIGN KEY (kdDivisi) REFERENCES Divisi (kdDivisi) ON UPDATE CASCADE ON DELETE NO ACTION );

6. RegistrasiMember (

noRegistrasi KodeTransaksi NOT NULL,

tanggal Tanggal NOT NULL,

jmlhBayar Uang NOT NULL,

kdPelanggan KodeForeign NOT NULL, kdKaryawan KodeForeign NOT NULL, PRIMARY KEY (noRegistrasi),

FOREIGN KEY (kdPelanggan) REFERENCES Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdKaryawan) REFERENCES Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION );

(38)

7. JenisBarang (

kdJenisBarang KodeMaster NOT NULL, jenisBarang Jenis NOT NULL, PRIMARY KEY (kdJenisBarang) );

8. Barang (

kdBarang KodeMaster NOT NULL, namaBarang NamaBarang NOT NULL, hargaJual Uang,

stok JumlahBarang NOT NULL, stokMin JumlahBarang,

stokMax JumlahBarang,

kdJenisBarang KodeForeign NOT NULL, PRIMARY KEY (kdBarang),

FOREIGN KEY (kdJenisBarang) REFERENCES JenisBarang (kdJenisBarang) ON UPDATE CASCADE ON DELETE NO ACTION );

9. DeliveryOrder (

noDO KodeTransaksi NOT NULL,

tanggal Tanggal NOT NULL,

status StatusProses NOT NULL DEFAULT ‘Q’, kdPelanggan KodeForeign NOT NULL,

kdKasir KodeForeign NOT NULL, kdGudang KodeForeign,

(39)

kdSupir KodeForeign, PRIMARY KEY (noDO),

FOREIGN KEY (kdPelanggan) REFERENCES Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdKasir) REFERENCES Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdGudang) REFERENCES Karyawan (kdKaryawan), FOREIGN KEY (kdSupir) REFERENCES Karyawan (kdKaryawan) );

10. DetailDO (

noDO KodeTransaksi NOT NULL, kdBarang KodeForeign NOT NULL, qty JumlahBarang NOT NULL, PRIMARY KEY (noDO, kdBarang),

FOREIGN KEY (noDO) REFERENCES DeliveryOrder (noDO) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdBarang) REFERENCES Barang (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION );

11. FakturPenjualan (

noFaktur KodeTransaksi NOT NULL,

tanggal Tanggal NOT NULL,

diskon Uang NOT NULL DEFAULT 0, biayaServis Uang NOT NULL DEFAULT 0,

(40)

total Uang NOT NULL,

jmlhBayar Uang NOT NULL,

piutang Uang NOT NULL DEFAULT 0, kdPelanggan KodeForeign NOT NULL,

noPlat NomorPlat,

kdKasir KodeForeign NOT NULL, kdMontir KodeForeign,

noDO KodeTransaksi, PRIMARY KEY (noFaktur),

FOREIGN KEY (kdPelanggan) REFERENCES Pelanggan (kdPelanggan) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (noPlat) REFERENCES Mobil (noPlat),

FOREIGN KEY (kdKasir) REFERENCES Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdMontir) REFERENCES Karyawan (kdKaryawan), FOREIGN KEY (noDO) REFERENCES DeliveryOrder (noDO) );

12. DetailPenjualan (

noFaktur KodeTransaksi NOT NULL, kdBarang KodeForeign NOT NULL, qty JumlahBarang NOT NULL,

hargaJual Uang NOT NULL,

(41)

FOREIGN KEY (noFaktur) REFERENCES FakturPenjualan (noFaktur) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdBarang) REFERENCES Barang (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION );

13. PelunasanPiutang (

noPelunasan KodeTransaksi NOT NULL,

tanggal Tanggal NOT NULL,

jmlhBayar Uang NOT NULL,

noFaktur KodeTransaksi NOT NULL, kdKaryawan KodeForeign NOT NULL, PRIMARY KEY (noPelunasan),

FOREIGN KEY (noFaktur) REFERENCES FakturPenjualan (noFaktur) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdKaryawan) REFERENCES Karyawan (kdKaryawan) );

14. Supplier (

kdSupplier KodeMaster NOT NULL, namaPerusahaan NamaPerusahaan NOT NULL, alamat Alamat ,

kota Kota,

telp NomorTelepon,

fax NomorTelepon,

(42)

contactPerson Nama,

status Status NOT NULL DEFAULT ‘A’, PRIMARY KEY (kdSupplier) );

15. HargaBeli (

kdBarang KodeForeign NOT NULL, kdSupplier KodeForeign NOT NULL,

hargaBeli Uang NOT NULL,

kurs Kurs NOT NULL DEFAULT ‘IDR’, PRIMARY KEY (kdBarang, kdSupplier),

FOREIGN KEY (kdBarang) REFERENCES Barang (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdSupplier) REFERENCES Supplier (kdSupplier) ON UPDATE CASCADE ON DELETE NO ACTION );

16. Pembelian (

noPO KodeTransaksi NOT NULL, tanggal PO Tanggal NOT NULL,

status StatusProses NOT NULL DEFAULT ‘Q’, kdKasirPO KodeForeign NOT NULL,

kdSupplier KodeForeign NOT NULL, noFaktur KodeTransaksi NOT NULL, tanggalFB Tanggal NOT NULL,

(43)

total Uang NOT NULL,

jmlhBayar Uang NOT NULL,

utang Uang NOT NULL DEFAULT 0, kdKasirFB KodeForeign NOT NULL,

PRIMARY KEY (noPO),

FOREIGN KEY (kdKasirPO) REFERENCES Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdKasirFB) REFERENCES Karyawan (kdKaryawan), FOREIGN KEY (kdSupplier) REFERENCES Supplier (kdSupplier) ON UPDATE CASCADE ON DELETE NO ACTION );

17. DetailPO (

noPO KodeTransaksi NOT NULL, kdBarang KodeForeign NOT NULL, qty JumlahBarang NOT NULL, PRIMARY KEY (noPO, kdBarang),

FOREIGN KEY (noPO) REFERENCES PurchaseOrder (noPO) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (kdBarang) REFERENCES Barang (kdBarang) ON UPDATE CASCADE ON DELETE NO ACTION );

18. DetailPembelian (

noPO KodeTransaksi NOT NULL, kdBarang KodeForeign NOT NULL,

(44)

kdSupplier KodeForeign NOT NULL, qty JumlahBarang NOT NULL,

hargaBeli Uang NOT NULL DEFAULT 0, Primary Key (noPO, kdBarang, kdSupplier),

Foreign Key (noPO) references Pembelian (noPO) ON UPDATE CASCADE ON DELETE NO ACTION,

Foreign Key (kdBarang, kdSupplier) references HargaBeli (kdBarang, kdSupplier) ON UPDATE CASCADE ON DELETE NO ACTION );

19. PelunasanUtang (

noPelunasan KodeTransaksi NOT NULL,

tanggal Tanggal NOT NULL,

jmlhBayar Uang NOT NULL,

kdKaryawan KodeForeign NOT NULL, noFaktur KodeTransaksi NOT NULL, PRIMARY KEY (noPelunasan),

FOREIGN KEY (kdKaryawan) REFERENCES Karyawan (kdKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION,

FOREIGN KEY (noFaktur) REFERENCES Pembelian (noFaktur) );

4.1.3.1.2. Merancang representasi derived data

Tujuan langkah ini adalah untuk memutuskan bagaimana representasi derived data yang terdapat pada model data logikal, di dalam DBMS yang akan

(45)

digunakan. Atribut-atribut derived yang dimasukkan ke dalam relasi model data logikal yaitu :

a. Atribut tglJatuhTempo pada relasi DetailMember. Atribut tglJatuhTempo dapat diperoleh dengan cara menambah 1 tahun pada tanggal registrasi member terakhir pelanggan tertentu. Atribut ini digunakan untuk transaksi “Menampilkan pelanggan-pelanggan member yang masa berlaku membernya akan habis dalam jangka waktu 1 bulan ke depan”. Dengan menempatkan atribut tglJatuhTempo di dalam DetailMember, akan menghemat waktu proses query pencarian dan pengolahan tanggal registrasi di tabel RegistrasiMember yang harus di-join kembali dengan tabel Pelanggan.

b. Atribut total pada relasi FakturPenjualan, dapat diperoleh dengan melakukan penjumlahan (hargaJual * qty) pada relasi DetailPenjualan untuk suatu faktur penjualan tertentu. Atribut total pada FakturPenjualan digunakan pada banyak transaksi, salah satunya untuk menghasilkan laporan keuangan bulanan. Dengan menempatkan atribut total di dalam relasi FakturPenjualan, akan menghemat waktu proses pencarian dan

(46)

pengolahan data DetailPenjualan, yang harus dilakukan perhari dalam satu bulan.

c. Atribut total pada relasi Pembelian, dapat diperoleh dengan melakukan penjumlahan (hargaBeli * qty) pada relasi DetailPembelian untuk suatu faktur pembelian tertentu. Atribut total pada Pembelian digunakan pada banyak transaksi, salah satunya untuk menghasilkan laporan pemasukan/ pengeluaran bulanan. Dengan menempatkan atribut total di dalam relasi Pembelian, akan menghemat waktu proses pencarian dan pengolahan data DetailPembelian, yang harus dilakukan perhari dalam satu bulan.

4.1.3.1.3. Merancang general constraints

Tujuan langkah ini adalah untuk merancang general constraints perusahaan untuk diterapkan pada DBMS yang akan digunakan. Beberapa general constraints yang ditemukan pada prosedur pembelian, persediaan, dan penjualan adalah :

a. Masing-masing faktur penjualan bisa memiliki nol atau satu referensi terhadap satu delivery order, dan masing-masing DO hanya bisa direferensikan terhadap satu faktur penjualan. Batasan ini

(47)

diterapkan dengan membuat trigger yang akan memeriksa status DO yang direferensikan saat dilakukan insert pada tabel FakturPenjualan.

CREATE TRIGGER cekDO ON FakturPenjualan FOR insert AS

DECLARE @noDO char(10), @status char SELECT @noDO = noDO FROM inserted IF @noDO is not null

BEGIN

SELECT @status = status FROM DeliveryOrder WHERE noDO = @noDO IF @status = 'Q'

BEGIN

PRINT 'Insert Berhasil.' COMMIT TRANSACTION END

ELSE BEGIN

PRINT 'Purchase Order tersebut sudah diproses. Insert gagal.'

ROLLBACK TRANSACTION END

END

(48)

b. Pemesanan atau pembelian barang melalui purchase order atau faktur pembelian tidak boleh melampaui batasan stok maksimum suatu barang. Batasan ini diterapkan dengan membuat trigger yang akan memeriksa apakah jumlah stok ditambah jumlah barang yang dipesan akan melebih jumlah stok maksimum saat dilakukan insert pada tabel DetailPembelian dan DetailPO.

CREATE TRIGGER cekstokDB ON DetailPembelian FOR insert AS

DECLARE @kodebrg int, @stok smallint, @stokmax smallint, @qty smallint

SELECT @kodebrg = kdbarang, @qty = qty FROM inserted

SELECT @stok = stok, @stokmax = stokmax FROM Barang WHERE kdbarang = @kodebrg IF (@stok + @qty) > @stokmax

BEGIN

PRINT 'Pembelian Barang Melampaui Stok Maksimum'

ROLLBACK TRANSACTION END

ELSE BEGIN

(49)

PRINT 'Insert Berhasil'

COMMIT TRANSACTION

END

CREATE TRIGGER cekstokDP ON DetailPO FOR insert

AS

DECLARE @kodebrg int, @stok smallint, @stokmax smallint, @qty smallint

SELECT @kodebrg = kdbarang, @qty = qty FROM inserted

SELECT @stok = stok, @stokmax = stokmax FROM Barang WHERE kdbarang = @kodebrg IF (@stok + @qty) > @stokmax

BEGIN

PRINT 'Pembelian Barang Melampaui Stok Maksimum'

ROLLBACK TRANSACTION END

ELSE BEGIN

PRINT 'Insert Berhasil'

COMMIT TRANSACTION

(50)

c. Pengiriman atau penjualan barang melalui delivery order atau faktur penjualan tidak boleh dilakukan jika akan mengakibatkan stok barang menjadi minus. Batasan ini diterapkan dengan membuat trigger yang akan memeriksa apakah jumlah stok mencukupi jumlah barang yang akan dijual saat dilakukan insert pada tabel DetailPenjualan dan DetailDO.

CREATE TRIGGER cekstokDJ ON DetailPenjualan FOR insert AS

DECLARE @kodebrg int, @stok smallint, @qty smallint

SELECT @kodebrg = kdbarang, @qty = qty FROM inserted

SELECT @stok = stok FROM Barang WHERE kdbarang = @kodebrg

IF @qty > @stok BEGIN

PRINT 'Stok Barang Tidak Cukup' ROLLBACK TRANSACTION END

ELSE BEGIN

(51)

COMMIT TRANSACTION END

CREATE TRIGGER cekstokDD ON DetailDO FOR insert

AS

DECLARE @kodebrg int, @stok smallint, @qty smallint

SELECT @kodebrg = kdbarang, @qty = qty FROM inserted

SELECT @stok = stok FROM Barang WHERE kdbarang = @kodebrg

IF @qty > @stok BEGIN

PRINT 'Stok Barang Tidak Cukup' ROLLBACK TRANSACTION END

ELSE BEGIN

PRINT 'Insert Berhasil'

COMMIT TRANSACTION

END

d. Format nomor member pada detail member berupa ’MBXXXXXXX’ di mana X mewakili karakter berupa digit 0-9. Batasan ini diterapkan

(52)

dengan menambah constraint di dalam tabel DetailMember.

CONSTRAINT formatnomember

CHECK (noMember like ‘MB[0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

e. Format nomor faktur pada faktur penjualan berupa ’FJXXXXXXXX’ di mana X mewakili karakter berupa digit 0-9. Batasan ini diterapkan dengan menambah constraint di dalam tabel FakturPenjualan.

CONSTRAINT formatnofakturjual

CHECK (noFaktur like ’FJ[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

g. Format nomor DO pada delivery order berupa ’DOXXXXXXXX’ di mana X mewakili karakter berupa digit 0-9. Batasan ini diterapkan dengan menambah constraint di dalam tabel DeliveryOrder.

CONSTRAINT formatnoDO

CHECK (noDO like ‘DO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

h. Format nomor pelunasan pada pelunasan piutang berupa ’PPXXXXXXXX’ di mana X mewakili karakter berupa digit 0-9. Batasan ini diterapkan

(53)

dengan menambah constraint di dalam tabel PelunasanPiutang.

CONSTRAINT formatnopiutang

CHECK (noPelunasan like ‘PP[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

i. Format nomor PO pada purchase order berupa ‘POXXXXXXXX’ di mana X mewakili karakter berupa digit 0-9. Batasan ini diterapkan dengan menambah constraint di dalam tabel Pembelian. CONSTRAINT formatnoPO

CHECK (noPO like ‘PO[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

j. Format nomor faktur pada faktur pembelian berupa ’FBXXXXXXXX’ di mana X mewakili karakter berupa digit 0-9. Batasan ini diterapkan dengan menambah constraint di dalam tabel Pembelian.

CONSTRAINT formatnofakturbeli

CHECK (noFaktur like ‘FB[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

k. Format nomor pelunasan pada pelunasan utang berupa ’PUXXXXXXXX’ di mana XX mewakili karakter berupa digit 0-9. Batasan ini diterapkan

(54)

dengan menambah constraint di dalam tabel PelunasanUtang.

CONSTRAINT formatnoutang

CHECK (noPelunasan like ’PU[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

l. Format nomor registrasi pada registrasi member berupa ’RMXXXXXXXX’ di mana XX mewakili karakter berupa digit 0-9. Batasan ini diterapkan dengan menambah constraint di dalam tabel RegistrasiMember.

CONSTRAINT formatnoregistrasi

CHECK (noRegistrasi like ’RM[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’)

m. Memastikan stok ter-update saat dilakukan transaksi penjualan dan kilometer mobil ter-update jika ada mobil yang diservis. Batasan ini diterapkan dengan membuat Stored Procedure yang akan mengurangi stok saat DetailPenjualan terisi.

CREATE PROC updatestok @nofaktur char(10), @kdbarang int, @hargajual varchar(15), @qty smallint, @kilo int, @noPlat varchar(15) AS

(55)

INSERT INTO DetailPenjualan VALUES (@nofaktur, @kdbarang, @qty, CAST(@hargajual AS money));

UPDATE Barang SET stok = stok - @qty WHERE kdbarang = @kdbarang;

IF @kilo <> -1 AND @noPlat <> '-' BEGIN

UPDATE Mobil SET kilometer = @kilo WHERE noPlat = @noPlat

END END

n. Secara otomatis mengubah status blacklist seorang pelanggan menjadi ’Y’ untuk Yes jika pelanggan tersebut memiliki faktur penjualan yang belum lunas saat 1 bulan sejak faktur dibuat. Batasan ini ditangani dengan pembuatan Stored Procedure. CREATE PROC set_blacklist @tgl varchar(15) AS

BEGIN

DECLARE cursor1 cursor

FOR SELECT kdpelanggan FROM view_penjualan WHERE DATEDIFF (day,CONVERT(datetime, tanggal,105), @tgl) >= 30 and piutang > 0

(56)

OPEN cursor1

DECLARE @kode int

FETCH NEXT FROM cursor1 INTO @kode WHILE @@FETCH_STATUS = 0

BEGIN

UPDATE pelanggan SET blacklist = 'Y' WHERE kdpelanggan = @kode

FETCH NEXT FROM cursor1 INTO @kode END

CLOSE cursor1

DEALLOCATE cursor1 END

o. Secara otomatis mengubah status member seorang pelanggan menjadi ’S’ untuk Suspended jika tanggal saat ini sudah melewati masa berlaku member tersebut. Batasan ini ditangani dengan pembuatan Stored Procedure.

CREATE PROC unreg_member @tgl varchar(15) AS

BEGIN

DECLARE cursor1 cursor

FOR SELECT kdpelanggan FROM detailmember WHERE @tgl > tglJatuhTempo OPEN cursor1

(57)

DECLARE @kode int

FETCH NEXT FROM cursor1 INTO @kode WHILE @@FETCH_STATUS = 0

BEGIN

UPDATE detailmember SET status = 'S' WHERE kdpelanggan = @kode

UPDATE pelanggan SET jenispelanggan = 'Biasa' WHERE kdpelanggan = @kode

FETCH NEXT FROM cursor1 INTO @kode END

CLOSE cursor1

DEALLOCATE cursor1 END

p. Secara otomatis mengubah status member pelanggan dan tanggal jatuh temponya jika pelanggan tersebut melakukan registrasi member atau membuat nomor member baru jika pelanggan baru pertama kali melakukan registrasi member. Batasan ini ditangani dengan pembuatan Stored Procedure.

CREATE PROC register_member @noReg varchar(10), @tgl varchar(15), @kode int, @bayar varchar(20), @kasir int AS

(58)

INSERT INTO registrasimember VALUES (@noReg, CONVERT(datetime,@tgl,103), CAST(@bayar AS money), @kode, @kasir) IF EXISTS (SELECT * FROM detailmember WHERE kdpelanggan = @kode)

BEGIN

UPDATE detailmember SET tglJatuhTempo = DATEADD(year,1,CONVERT(datetime,@tgl,10 3)) WHERE kdpelanggan = @kode

UPDATE detailmember SET status = 'A' WHERE kdpelanggan = @kode

UPDATE pelanggan SET jenisPelanggan = 'Member' WHERE kdpelanggan = @kode

END

ELSE BEGIN

DECLARE @no varchar(10) DECLARE @tgl2 datetime

SET @tgl2 = (CONVERT(datetime, @tgl, 103)) IF EXISTS (SELECT * FROM detailmember WHERE MONTH(tglMasuk) = MONTH(@tgl2) AND YEAR(tglMasuk) = YEAR(@tgl2))

BEGIN

SET @no = (SELECT 'MB' + CAST (MONTH(@tgl2) AS varchar) + SUBSTRING

(59)

(CAST (YEAR (@tgl2) AS varchar),3,2) + RIGHT('00' + CAST (CAST (MAX (RIGHT (nomember, 3)) AS integer) + 1 AS varchar),3) FROM detailmember WHERE MONTH (tglMasuk) = MONTH (@tgl2) AND YEAR (tglMasuk) = YEAR (@tgl2))

END

ELSE BEGIN SET @no = 'MB' + CAST (MONTH(@tgl2) AS varchar) + SUBSTRING(CAST(YEAR(@tgl2) AS varchar),3,2) + '001' END

INSERT INTO detailmember VALUES (@no, @tgl2, CAST (DATEADD (year,1,@tgl2) AS varchar), 'A', @kode)

UPDATE pelanggan SET jenisPelanggan = 'Member' WHERE kdpelanggan = @kode

END END

4.1.3.2. Merancang Organisasi File dan Index

Tujuan langkah ini adalah untuk menentukan pilihan organisasi file yang optimal untuk menyimpan relasi-relasi dasar dan index yang diperlukan untuk mencapai kinerja yang

(60)

memuaskan, atau dengan kata lain, bagaimana relasi dan record akan disimpan di dalam secondary storage.

4.1.3.2.1. Menganalisa transaksi

Tujuan langkah ini adalah untuk memahami fungsionalitas transaksi yang akan berjalan di dalam basisdata dan menganalisa transaksi-transaksi yang penting. Transaksi-transaksi yang akan berjalan di dalam basisdata yaitu :

Data entry

A. Memasukkan data pelanggan baru.

B. Memasukkan data transaksi registrasi member baru, memasukkan detail member baru, dan update jenis pelanggan menjadi member.

C. Memasukkan data mobil yang dimiliki pelanggan. D. Memasukkan data karyawan baru.

E. Memasukkan divisi baru.

F. Memasukkan data supplier baru. G. Memasukkan data barang baru. H. Memasukkan jenis barang baru.

I. Menambah barang yang dijual oleh suatu supplier. J. Memasukkan data transaksi registrasi member seorang

(61)

sebelumnya, meng-update detail member, dan mengubah jenis pelanggan menjadi member.

K. Memasukkan data delivery order.

L. Memasukkan data transaksi penjualan non servis, update stok barang, dan update status delivery order menjadi ‘processed’ jika faktur memiliki referensi pada suatu delivery order.

M. Memasukkan data transaksi penjualan servis, update stok barang, dan update atribut kilometer pada mobil yang diservis.

N. Memasukkan data transaksi pelunasan piutang, dan update atribut jumlah piutang pada faktur penjualan yang dilunasi.

O. Memasukkan data purchase order.

P. Memasukkan data transaksi pembelian, update stok barang, dan update status purchase order yang direferensikan menjadi ‘processed’.

Q. Memasukkan data transaksi pelunasan utang dan update atribut jumlah utang pada faktur pembelian yang dilunasi.

Data update/ deletion

R. Update data pelanggan. S. Update data supplier.

(62)

T. Update data karyawan. U. Update data mobil. V. Update data barang.

W. Update status blacklist pelanggan menjadi ‘Y’ jika pelanggan memiliki faktur penjualan yang belum dilunasi selama 1 bulan sejak tanggal pembuatan faktur.

X. Update status member menjadi ‘S’ jika masa jatuh tempo seorang member sudah lewat.

Y. Update barang

Z. Update/ Delete data Delivery Order AA. Delete data Faktur Penjualan BB. Update/ Delete data Purchase Order

Data queries

CC. Menampilkan pelanggan-pelanggan member yang masa berlaku membernya akan habis dalam jangka waktu 1 bulan ke depan

DD. Menampilkan data suatu registrasi member tertentu secara mendetail

EE. Menampilkan daftar registrasi member beserta nama pelanggan yang melakukan registrasi

(63)

GG. Menampilkan daftar delivery order beserta nama pelanggannya, diurut berdasarkan nomor DO

HH. Menampilkan daftar delivery order yang memiliki status ’queue’ beserta nama pelanggannya, diurut berdasarkan nomor DO

II. Menampilkan daftar barang yang jumlah on hand stock-nya sudah mencapai jumlah stok minimum

JJ. Menampilkan data faktur penjualan tertentu

KK. Menampilkan daftar faktur penjualan beserta nama pelanggan yang melakukan transaksi, diurut berdasarkan nomor faktur

LL. Menampilkan daftar faktur penjualan yang belum lunas beserta nama pelanggannya diurut berdasarkan nomor faktur penjualan

MM. Menampilkan sejarah penjualan terhadap suatu customer

NN. Menampilkan sejarah perbaikan terhadap suatu mobil OO. Menampilkan daftar mobil yang pernah ditangani

seorang kepala montir

PP. Menampilkan data purchase order tertentu

QQ. Menampilkan daftar purchase order beserta nama suppliernya, diurut berdasarkan nomor PO

(64)

RR. Menampilkan daftar purchase order yang memiliki status ’queue’ beserta nama suppliernya, diurut berdasarkan nomor PO

SS. Menampilkan data faktur pembelian tertentu

TT. Menampilkan daftar faktur pembelian beserta nama suppliernya, diurut berdasarkan nomor faktur pembelian

UU. Menampilkan daftar faktur pembelian yang belum lunas beserta nama suppliernya, diurut berdasarkan nomor faktur pembelian

VV. Menampilkan data pelunasan piutang tertentu

WW. Menampilkan daftar transaksi pelunasan piutang beserta nama pelanggan yang melakukan transaksi pelunasan, diurut berdasarkan nomor pelunasan piutang

XX. Menampilkan data pelunasan utang tertentu

YY. Menampilkan daftar transaksi pelunasan utang beserta nama supplier yang dilunasi, diurut berdasarkan nomor pelunasan utang

ZZ. Menampilkan barang-barang yang dijual supplier tertentu

AB. Menampilkan daftar mobil yang dimiliki seorang pelanggan

(65)

AD. Menampilkan karyawan berdasarkan divisinya

AE. Menampilkan laporan penjualan selama periode tertentu

AF. Menampilkan laporan pembelian selama periode tertentu

AG. Menampilkan laporan pemasukan dan pengeluaran selama periode tertentu

(66)

Tabel 4.17 Analisis transaksi (A) (B) (C) (D) (E) (F) (G) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X X X Detail_Member X Mobil X Divisi X X Karyawan X Registrasi_ Member X JenisBarang X Barang X Delivery_Order DetailDO Faktur_ Penjualan Detail_ Penjualan Pelunasan_ Piutang Supplier X HargaBeli Pembelian DetailPO Detail_ Pembelian Pelunasan_ Utang

(67)

Tabel 4.17 Analisis transaksi (lanj.) (H) (I) (J) (K) (L) (M) (N) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X X X X Detail_Member X X X X Mobil X X Divisi Karyawan X X X X Registrasi_ Member X JenisBarang X Barang X X X X X X Delivery_Order X X DetailDO X Faktur_ Penjualan X X X X Detail_ Penjualan X X Pelunasan_ Piutang X Supplier X HargaBeli X Pembelian DetailPO Detail_ Pembelian Pelunasan_ Utang

(68)

Tabel 4.17 Analisis transaksi (lanj.) (O) (P) (Q) (R) (S) (T) (U) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X Detail_Member Mobil X Divisi X Karyawan X X X X Registrasi_ Member JenisBarang Barang X X X Delivery_Order DetailDO Faktur_ Penjualan Detail_ Penjualan Pelunasan_ Piutang Supplier X X X HargaBeli X Pembelian X X X X X X DetailPO X Detail_ Pembelian X Pelunasan_ Utang X

(69)

Tabel 4.17 Analisis transaksi (lanj.) (V) (W) (X) (Y) (Z) (AA) (BB) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X Detail_Member X X Mobil Divisi Karyawan Registrasi_ Member JenisBarang X Barang X X X Delivery_Order X X X DetailDO X Faktur_ Penjualan X X Detail_ Penjualan X Pelunasan_ Piutang Supplier X HargaBeli Pembelian X X DetailPO X Detail_ Pembelian Pelunasan_ Utang

(70)

Tabel 4.17 Analisis transaksi (lanj.) (CC) (DD) (EE) (FF) (GG) (HH) (II) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X X X X X Detail_Member X X Mobil Divisi Karyawan X X Registrasi_ Member X X JenisBarang Barang X Delivery_Order X X X DetailDO X Faktur_ Penjualan Detail_ Penjualan Pelunasan_ Piutang Supplier HargaBeli Pembelian DetailPO Detail_ Pembelian Pelunasan_ Utang

(71)

Tabel 4.17 Analisis transaksi (lanj.) (JJ) (KK) (LL) (MM) (NN) (OO) (PP) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X X X X X Detail_Member X Mobil X X X Divisi Karyawan X X X Registrasi_ Member JenisBarang Barang X X X X X Delivery_Order DetailDO Faktur_ Penjualan X X X X X X Detail_ Penjualan X X X X Pelunasan_ Piutang Supplier X HargaBeli Pembelian X DetailPO X Detail_ Pembelian Pelunasan_ Utang

(72)

Tabel 4.17 Analisis transaksi (lanj.) (QQ) (RR) (SS) (TT) (UU) (VV) (WW) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X Detail_Member Mobil Divisi Karyawan X X Registrasi_ Member JenisBarang Barang X Delivery_Order DetailDO Faktur_ Penjualan X X Detail_ Penjualan Pelunasan_ Piutang X X Supplier X X X X X HargaBeli X Pembelian X X X X X DetailPO Detail_ Pembelian X Pelunasan_ Utang

(73)

Tabel 4.17 Analisis transaksi (lanj.)

(XX) (YY) (ZZ) (AB) (AC) (AD) (AE) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X Detail_Member Mobil X Divisi X Karyawan X X Registrasi_ Member JenisBarang X Barang X X Delivery_Order DetailDO Faktur_ Penjualan X Detail_ Penjualan Pelunasan_ Piutang Supplier X X X X HargaBeli X X Pembelian X X DetailPO Detail_ Pembelian Pelunasan_ Utang X X

(74)

Tabel 4.17 Analisis transaksi (lanj.) (AF) (AG) Transaction/ Relation I R U D I R U D Pelanggan X Detail_Member Mobil Divisi Karyawan Registrasi_ Member X JenisBarang Barang Delivery_Order DetailDO Faktur_ Penjualan X Detail_ Penjualan Pelunasan_ Piutang Supplier X X HargaBeli Pembelian X X DetailPO Detail_ Pembelian Pelunasan_ Utang

(75)

Berdasarkan matriks korelasi transaksi/ relasi di atas, dapat disimpulkan bahwa transaksi-transaksi yang banyak melakukan akses terhadap relasi adalah :

K. Memasukkan data delivery order.

L. Memasukkan data transaksi penjualan non servis, update stok barang, dan update status delivery order menjadi ‘processed’ jika faktur memiliki referensi pada suatu delivery order.

M. Memasukkan data transaksi penjualan servis, update stok barang, dan update atribut kilometer pada mobil yang diservis.

O. Memasukkan data purchase order.

P. Memasukkan data transaksi pembelian, update stok barang, dan update status purchase order yang direferensikan menjadi ‘processed’.

FF. Menampilkan data faktur penjualan tertentu. OO. Menampilkan data faktur pembelian tertentu.

Dan relasi-relasi yang banyak diakses adalah: • Pelanggan • Karyawan • Barang • FakturPenjualan • Supplier • Pembelian

(76)

4.1.3.2.2. Memilih organisasi file (Opsional)

Tujuan langkah ini adalah menentukan organisasi file yang efisien untuk tiap-tiap relasi dasar jika diperbolehkan oleh DBMS yang akan digunakan. Dalam banyak kasus, DBMS relasional memberikan sedikit atau tidak ada pilihan untuk memilih organisasi file. Dalam kasus ini, DBMS yang digunakan adalah SQL Server 2000 dan organisasi file yang digunakan telah ditentukan oleh SQL Server 2000.

4.1.3.2.3. Memilih index

Tujuan langkah ini adalah memutuskan apakah penambahan index akan meningkatkan kinerja sistem basisdata.

Tabel 4.18 Pemilihan index

No. Relasi Clustered Index Nonclustered Index

1. Pelanggan kdPelanggan -

2. DetailMember noMember tglJatuhTempo, kdPelanggan

3. Mobil noPlat kdPelanggan

4. Divisi kdDivisi -

5. Karyawan kdKaryawan kdDivisi

6. RegistrasiMember noRegistrasi tanggal, kdPelanggan

7. JenisBarang kdJenisBarang -

Figur

Tabel 4.6 Dokumentasi relasi dan atribut foreign key pada tahap penurunan  relasi model data logikal

Tabel 4.6

Dokumentasi relasi dan atribut foreign key pada tahap penurunan relasi model data logikal p.1
Tabel 4.7 Tabel relasi dengan referential integrity  No.  Relations

Tabel 4.7

Tabel relasi dengan referential integrity No. Relations p.21
Tabel 4.8 Spesifikasi perangkat keras SQL Server 2000  (sumber : www.mssqlcity.com)

Tabel 4.8

Spesifikasi perangkat keras SQL Server 2000 (sumber : www.mssqlcity.com) p.27
Tabel 4.11 Fitur-fitur SQL Server 2000 dan Oracle 9i  (sumber : www.mssqlcity.com)

Tabel 4.11

Fitur-fitur SQL Server 2000 dan Oracle 9i (sumber : www.mssqlcity.com) p.28
Tabel 4.12 Fitur-fitur SQL Server 2000 dan MySQL v4.1  (sumber : www.mssqlcity.com)

Tabel 4.12

Fitur-fitur SQL Server 2000 dan MySQL v4.1 (sumber : www.mssqlcity.com) p.29
Tabel 4.14 Limit dari SQL Server 2000 dan MySQL v4.1  (sumber : www.mssqlcity.com)

Tabel 4.14

Limit dari SQL Server 2000 dan MySQL v4.1 (sumber : www.mssqlcity.com) p.30
Tabel 4.16 Database Definition Language untuk relasi dasar  Domain KodeMaster :             integer with identity function

Tabel 4.16

Database Definition Language untuk relasi dasar Domain KodeMaster : integer with identity function p.34
Tabel 4.17 Analisis transaksi  (A) (B) (C) (D) (E) (F) (G) Transaction/  Relation  I  R  U  D I  R U D I  R U D I  R U  D I  R U D I  R U D I  R U D Pelanggan  X  X X X Detail_Member  X Mobil  X Divisi  X X Karyawan  X Registrasi_  Member  X JenisBarang  X Barang  X Delivery_Order  DetailDO  Faktur_  Penjualan  Detail_  Penjualan  Pelunasan_  Piutang  Supplier  X HargaBeli  Pembelian  DetailPO  Detail_  Pembelian  Pelunasan_  Utang

Tabel 4.17

Analisis transaksi (A) (B) (C) (D) (E) (F) (G) Transaction/ Relation I R U D I R U D I R U D I R U D I R U D I R U D I R U D Pelanggan X X X X Detail_Member X Mobil X Divisi X X Karyawan X Registrasi_ Member X JenisBarang X Barang X Delivery_Order DetailDO Faktur_ Penjualan Detail_ Penjualan Pelunasan_ Piutang Supplier X HargaBeli Pembelian DetailPO Detail_ Pembelian Pelunasan_ Utang p.66
Tabel 4.19 Perkiraan Jumlah Baris Tiap Tabel  Nama Tabel  Jumlah baris saat ini Pertumbuhan baris

Tabel 4.19

Perkiraan Jumlah Baris Tiap Tabel Nama Tabel Jumlah baris saat ini Pertumbuhan baris p.79
Tabel 4.38 PelunasanUtang

Tabel 4.38

PelunasanUtang p.85
Gambar 4.38 Rancangan layar Utama

Gambar 4.38

Rancangan layar Utama p.101
Gambar 4.40 Rancangan layar Master Pelanggan

Gambar 4.40

Rancangan layar Master Pelanggan p.102
Gambar 4.43 Rancangan layar Master Karyawan

Gambar 4.43

Rancangan layar Master Karyawan p.103
Gambar 4.42 Rancangan layar Tambah Suspended Car

Gambar 4.42

Rancangan layar Tambah Suspended Car p.103
Gambar 4.45 Rancangan layar Tambah Barang Rutin

Gambar 4.45

Rancangan layar Tambah Barang Rutin p.104
Gambar 4.47 Rancangan layar Tambah Barang Second

Gambar 4.47

Rancangan layar Tambah Barang Second p.105
Gambar 4.49 Rancangan layar Delivery Order

Gambar 4.49

Rancangan layar Delivery Order p.106
Gambar 4.48 Rancangan layar Master Barang

Gambar 4.48

Rancangan layar Master Barang p.106
Gambar 4.52 Rancangan layar Faktur Penjualan dengan Service

Gambar 4.52

Rancangan layar Faktur Penjualan dengan Service p.108
Gambar 4.54 Rancangan layar List Faktur Penjualan

Gambar 4.54

Rancangan layar List Faktur Penjualan p.110
Gambar 4.57 Rancangan layar Form Registrasi Member

Gambar 4.57

Rancangan layar Form Registrasi Member p.112
Gambar 4.61 Rancangan layar Purchase Order

Gambar 4.61

Rancangan layar Purchase Order p.115
Gambar 4.64 Rancangan layar List Purchase Order

Gambar 4.64

Rancangan layar List Purchase Order p.117
Gambar 4.68 Rancangan layar Stok Barang

Gambar 4.68

Rancangan layar Stok Barang p.120
Gambar 4.71 Rancangan layar Member Warning

Gambar 4.71

Rancangan layar Member Warning p.122
Gambar 4.75 Rancangan output Laporan Penjualan

Gambar 4.75

Rancangan output Laporan Penjualan p.123
Gambar 4.76 Rancangan output Laporan Pembelian

Gambar 4.76

Rancangan output Laporan Pembelian p.124
Gambar 4.78 Rancangan output Delivery Order

Gambar 4.78

Rancangan output Delivery Order p.125
Gambar 4.80 Rancangan output Faktur Penjualan dengan Service

Gambar 4.80

Rancangan output Faktur Penjualan dengan Service p.126
Gambar 4.83 Rancangan output Faktur Pembelian

Gambar 4.83

Rancangan output Faktur Pembelian p.128

Referensi

Memperbarui...

Related subjects :