Jumat, 16 Maret 2012

Laporan Pengolahan Sistem Basis Data 2

Nama : Oktava Nur Hidayat
NIM : 23100273

A. Landasan Teori

Trigger adalah suatu objek dalam basisdata yang terdapat pada bagian tabel. Trigger untuk menempatkan suatu prosedure berkaitan dengan perubahan pada isi tabel. Cara kerja trigger adalah merespon berkaitan dengan perintah DML (INSERT , UPDATE, DELETE) pada tabel.

C. Permasalahan
1. Cara membuat triger

B. Pembahasan

Pembuatan Trigger

Kita dapat membuat trigger dengan perintah CREATE TRIGGER. Berikut adalah syntax lengkapnya :

CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_body


Keterangan :
  • trigger_name : nama trigger.
  • trigger_time : kapan kita mengeksekusi trigger, apakah sebelum atau sesudah perubahan pada row data table. Jadi pilihannya adalah AFTER atau BEFORE.
  • trigger_event : merupakan event atau peristiwa yang menyebabkan trigger dilakukan. Pilihan event tersebut adalah INSERT, UPDATE, DELETE.
  • tbl_name : nama table.
  • trigger_body : statement-statement perintah SQL yang akan dilakukan. Jika perintahnya lebih dari satu maka gunakan dalam blok statement BEGIN ... END.
  • Jika DEFINER dispesifikasikan maka kita memutuskan trigger tersebut dijalankan hanya oleh user tertentu (dalam format penulisan user@host). Jika tidak dispesifikasikan, maka user yang melakukan perubahan (CURRENT_USER) adalah pilihan default.

Referensi "OLD" dan "NEW"

Karena trigger digunakan pada saat terjadi perubahan row data, maka kita perlu referensi ke row sebelum dan sesudah perubahan. Untuk ini ada dua alias yang berfungsi untuk hal tersebut yaitu OLD dan NEW.

Sesuai namanya, OLD digunakan untuk referensi sebelum perubahan dan NEW untuk referensi sesudah perubahan.

Contoh Penggunaan : Trigger After Delete

Berikut adalah contoh penggunaan trigger untuk event setelah penghapusan (AFTER DELETE) pada table "tr_penjualan" - database phi_minimart. Langkah yang akan kita lakukan adalah sebagai berikut :
  1. Kita akan membuat satu table audit dengan nama "tr_penjualan_hapus" yang berisi row-row yang dihapus dari table "tr_penjualan" dengan tambahan dua field, yaitu tanggal penghapusan (tgl_perubahan) dan user MySQL yang melakukan hal tersebut (nama_user).

    Berikut adalah perintahnya :

    USE phi_minimart;

    CREATE TABLE `tr_penjualan_hapus` LIKE `tr_penjualan`;

    ALTER TABLE `tr_penjualan_hapus` ADD
    (
    `tgl_perubahan` DATETIME,
    `nama_user` VARCHAR(200)
    );

  2. Tahap berikutnya adalah membuat trigger yang akan melakukan populasi data yang dihapus dari "tr_penjualan" ke table "tr_penjualan_hapus".

    Berikut adalah perintahnya :

    DELIMITER |

    CREATE TRIGGER hapus_tr_penjualan AFTER DELETE
    ON tr_penjualan FOR EACH ROW
    BEGIN
    INSERT INTO tr_penjualan_hapus
    ( tgl_transaksi,
    kode_cabang,
    kode_kasir,
    kode_item,
    kode_produk,
    jumlah_pembelian,
    tgl_perubahan,
    nama_user
    )
    VALUES
    ( OLD.tgl_transaksi,
    OLD.kode_cabang,
    OLD.kode_kasir,
    OLD.kode_item,
    OLD.kode_produk,
    OLD.jumlah_pembelian,
    SYSDATE(),
    CURRENT_USER
    );
    END;

    |
    DELIMITER ;

Laporan Pengolahan Sistem Basis Data 1

Nama : Oktava Nur Hidayat
NIM : 23100273

A. LANDASAN TEORI

BASIS DATA (Bahasa Inggris: database), atau sering pula dieja basisdata, adalah kumpulan informasi yang disimpan di dalam komputer secara sistematik sehingga dapat diperiksa menggunakan suatu program komputer untuk memperoleh informasi dari basis data tersebut. Perangkat lunak yang digunakan untuk mengelola dan memanggil kueri (query) basis data disebut sistem manajemen basis data (database management system, DBMS). Sistem basis data dipelajari dalam ilmu informasi. Istilah "basis data" berawal dari ilmu komputer. Meskipun kemudian artinya semakin luas, memasukkan hal-hal di luar bidang elektronika, artikel ini mengenai basis data komputer

Dalam database (mysql) dikenal beberapa istilah yaitu primary key, foreign key, unique dan index. Menurut Om Wiki, Primary Key atau Unique Key merupakan kunci yang secara unik mengidentifikasi baris pada tabel. Primary Key atau Unique Key dapat diterapkan pada satu atau lebih field. Apabila primary key / unique key diterapkan pada satu atau lebih field maka pada field tersebut tidak boleh bernilai sama untuk seluruh baris pada tabel. Kemudian yang membedakan primary key dan unique key adalah setiap kita memberikan constraint primary key pada field maka constraint NOT NULL akan diberikan pada field tersebut secara otomatis, sedangkan pada unique key tidak.

Selain kedua istilah diatas, terdapat juga istilah foreign key. Dengan adanya foreign key dapat terlihat adanya hubungan antara satu tabel dengan tabel lain. Foreign key mengidentifikasi satu atau lebih kolom pada satu tabel (tabel referensi) mengarah dari satu atau lebih tabel lainnya (tabel induk). Dengan adanya constraint foreign key pada satu kolom maka data pada kolom tabel referensi harus terdapat pada tabel induk. Pada mysql 5.0, foreign key hanya dapat diterapkan pada tabel dengan type InnoDB namun pada versi selanjutnya dapat diterapkan juga pada MyIsam. Kemudian field dengan tipe BLOB atau TEXT tidak dapat diberikan contraint foreign key.

Untuk mengoptimasi database kita dapat menggunakan index, karena index mampu meningkatkan kecepatan operasi pada suatu tabel (terutama operasi SELECT). Pada mysql, index dan data dari suatu tabel tersimpan secara terpisah, dengan kata lain membutuhkan ruang penyimpanan yang lebih banyak, kesalahan pemberian index pada suatu kolom dapat memperlambat operasi pada suatu tabel, karena index dibaca terlebih dahulu untuk mendapatkan data. Gunakan foreign key pada kolom yang sering digunakan untuk pencarian data.

B. PERMASALAHAN
1. Membuat tabel akun, barang, jenisbarang, beli, detailbeli, jual, detailjual, jurnal, detailjurnal, pelanggan, suplier
2. Membuat relasi antar tabel
3. Membuat Index
4. Membuat Foreignkey

C. PEMBAHASAN

-- --------------------------------------------------------

--
-- Table structure for table `akun`
--

CREATE TABLE `akun` (
`kodeakun` varchar(6) NOT NULL,
`namaakun` varchar(50) default NULL,
`saldonormal` enum('D','K') default NULL,
`jenisrekening` enum('Real','Nominal') default NULL,
`kodeparent` varchar(6) default NULL,
`kelompokrekening` enum('AKTIVA','HUTANG','MODAL','PENDAPATAN','BIAYA') default NULL,
PRIMARY KEY (`kodeakun`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `akun`
--


-- --------------------------------------------------------

--
-- Table structure for table `barang`
--

CREATE TABLE `barang` (
`kodebarang` varchar(10) NOT NULL,
`kodejenis` smallint(6) NOT NULL,
`barcode` varchar(20) NOT NULL,
`namabarang` varchar(50) NOT NULL,
`hargajual` double NOT NULL,
`hargabeli` double NOT NULL,
`diskon` double NOT NULL,
PRIMARY KEY (`kodebarang`),
KEY `kodejenis` (`kodejenis`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `barang`
--


-- --------------------------------------------------------

--
-- Table structure for table `beli`
--

CREATE TABLE `beli` (
`nomorbeli` int(10) NOT NULL auto_increment,
`tanggal` date NOT NULL,
`carapembayaran` varchar(10) NOT NULL,
`statusbayar` varchar(10) NOT NULL,
`diskon` double NOT NULL,
`kodesupply` int(10) NOT NULL,
PRIMARY KEY (`nomorbeli`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `beli`
--


-- --------------------------------------------------------

--
-- Table structure for table `detailbeli`
--

CREATE TABLE `detailbeli` (
`nomorbeli` int(10) NOT NULL,
`kodebarang` varchar(20) NOT NULL,
`harga` double NOT NULL,
`qty` int(2) NOT NULL,
`diskon` double NOT NULL,
KEY `nomorbeli` (`nomorbeli`),
KEY `kodebarang` (`kodebarang`),
KEY `nomorbeli_2` (`nomorbeli`),
KEY `kodebarang_2` (`kodebarang`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `detailbeli`
--


-- --------------------------------------------------------

--
-- Table structure for table `detailjual`
--

CREATE TABLE `detailjual` (
`nomorjual` int(10) NOT NULL,
`kodebarang` varchar(10) NOT NULL,
`harga` double NOT NULL,
`qty` int(2) NOT NULL,
`diskon` double NOT NULL,
KEY `kodebarang` (`kodebarang`),
KEY `nomorjual` (`nomorjual`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `detailjual`
--


-- --------------------------------------------------------

--
-- Table structure for table `detjurnal`
--

CREATE TABLE `detailjurnal` (
`nojurnal` int(11) NOT NULL default '0',
`kodeakun` varchar(6) NOT NULL,
`dk` enum('D','K') default NULL,
`jumlah` int(11) default NULL,
PRIMARY KEY (`nojurnal`,`kodeakun`),
KEY `kodeakun` (`kodeakun`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `detjurnal`
--


-- --------------------------------------------------------

--
-- Table structure for table `jenisbarang`
--

CREATE TABLE `jenisbarang` (
`kodejenis` smallint(6) NOT NULL auto_increment,
`namajenis` varchar(30) NOT NULL,
`keterangan` varchar(256) NOT NULL,
PRIMARY KEY (`kodejenis`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `jenisbarang`
--

INSERT INTO `jenisbarang` (`kodejenis`, `namajenis`, `keterangan`) VALUES
(1, 'alat', 'kjokhki');

-- --------------------------------------------------------

--
-- Table structure for table `jual`
--

CREATE TABLE `jual` (
`nomorjual` int(10) NOT NULL,
`tanggal` date NOT NULL,
`carapembayaran` varchar(10) NOT NULL,
`statusbayar` varchar(10) NOT NULL,
`diskon` double NOT NULL,
`kodepelanggan` varchar(10) NOT NULL,
PRIMARY KEY (`nomorjual`),
KEY `nomorjual` (`nomorjual`),
KEY `kodepelanggan` (`kodepelanggan`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `jual`
--

INSERT INTO `jual` (`nomorjual`, `tanggal`, `carapembayaran`, `statusbayar`, `diskon`, `kodepelanggan`) VALUES
(0, '2012-02-28', 'tunai', 'sd', 0, 'P001');

-- --------------------------------------------------------

--
-- Table structure for table `jurnal`
--

CREATE TABLE `jurnal` (
`nojurnal` int(11) NOT NULL,
`keterangan` varchar(255) default NULL,
`notransaksi` int(11) default NULL,
`nobukti` varchar(20) default NULL,
`jenistransaksi` enum('Jual','Beli') default NULL,
PRIMARY KEY (`nojurnal`),
KEY `notransaksi` (`notransaksi`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `jurnal`
--


-- --------------------------------------------------------

--
-- Table structure for table `pelanggan`
--

CREATE TABLE `pelanggan` (
`kodepelanggan` varchar(10) NOT NULL,
`namapelanggan` varchar(50) NOT NULL,
`alamat` text NOT NULL,
`notelp` varchar(15) NOT NULL,
`jenispelanggan` int(11) NOT NULL,
PRIMARY KEY (`kodepelanggan`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `pelanggan`
--

INSERT INTO `pelanggan` (`kodepelanggan`, `namapelanggan`, `alamat`, `notelp`, `jenispelanggan`) VALUES
('P001', 'Adi', 'Jogja', '97587436', 0);

-- --------------------------------------------------------

--
-- Table structure for table `suplier`
--

CREATE TABLE `suplier` (
`kodesupply` int(10) NOT NULL auto_increment,
`namasupply` varchar(50) NOT NULL,
`alamat` text NOT NULL,
`notelp` varchar(15) NOT NULL,
PRIMARY KEY (`kodesupply`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;