08 R2 (Express
Edition) yang dapat diunduh secara gratis melalui situs resmi Microsoft
Corp., tepatnya di tautan: http://www.microsoft.com/en-
us/download/search.aspx?q=sql+server+2008+r2.
Gambar 4.1: Beberapa versi Ms. SQL Server 2008
4.1 Kebutuhan Sistem
Sebelum melakukan instalasi, perlu diketahui spesifikasi
sistemoperasi dan perangkat keras (hardware) minimal yang diperlukan
oleh SQL Server sehingga proses instalasi bisa berhasil.
Untuk sistem operasi, SQL Server 2008 Express Edition
mendukung beberapa versi Windows, yaitu: Windows 7, Windows
Server 2003, Windows Server 2008, Windows Server 2008 R2, dan
Windows Vista.
SQL Server R2 ini merupakan SQL Server versi ringkas, sehingga
memiliki berbagai keterbatasan jika dibandingkan dengan versi
lengkapnya. Salah satu keterbatasan yang penulis temukan saat
memakai SQL Server versi ini yaitu hanya bisa mengeksekusi
paket data kurang dari 10 GB (sepuluh giga byte). Namun demikian, SQL
Server Express Edition lebih dari memadai untuk dipakai sebagai
sistem basis data untuk aplikasi yang cukup kompleks namun tidak
begitu memerlukan tingkat keamanan yang tinggi.
Karena versi ringkas, tentunya kebutuhan perangkat keras tidak
sama dengan versi lengkapnya. Berikut yaitu spesifikasi perangkat
keras minimal yang diperlukan untuk bisa melakukan instalasi SQL
Server 2008 R2.
Prosesor : Pentium III atau prosesor setara lainnya dengan
kecepatan 1 GHz atau lebih tinggi.
Memori: Minimal 500 MB untuk SQL Server Express dengan
Tools dan Advanced Services, dan 4 GB untuk SQL Server dengan
Reporting Services.
Harddisk : 2.2 GB, belum termasuk space untuk sistem operasi
dan database aplikasi yang akan Anda kembangkan
memakai SQL Server.
4.2 Instalasi SQL Server 2008 R2
SQL Server 2008 ini berjalan di atas framework .NET 3.5 (baca:
dot NET versi 3.5),. Oleh karena itu, sebelum melakukan instalasi SQL
Server, Anda harus menginstal framework ini . File installer
framework .NET dapat diunduh dengan bebas di situs resminya
Microsoft. Selanjutnya, berikut yaitu langkah-langkah instalasi SQL
Server 2008.
1) Klik ganda (double clicked) file installer SQL Server, jangan lupa
sesuaikan dengan Windows Anda. Jika Windows OS Anda 32bit,
gunakan file ...x86.exe, dan ...x64.exe jika 64bit.
Gambar 4.2: File installer SQL Server untin Windows 32Bit dan 64Bit
2) Maka akan muncul jendela progress ekstraksi file installer.
Tunggu saja sampai muncul jendela SQL Server Installation
Center.
3) Klik menu Installation pada sebelah kiri jendela untuk melihat
beberapa opsi instalasi, kemudian klik opsi New installation or
add features to an existing installation.
Gambar 4.3: Jendela SQL Server Intallation Center
4) Tunggu lagi beberapa saat sampai muncul jendela Setup
Support Rules, klik tombol [OK]. Jika tombol [Show details]
diklik, maka akan muncul seperti Gambar 4.4 berikut.
Gambar 4.4: Jendela Setup Support Rules
5) Klik menu Installation Type yang ada di sebelah kiri jendela, pilih
opsi New installation or add shared features dan klik tombol
[Next]. INGAT! Selama proses instalasi, jendela SQL Server
Intallation Center jangan ditutup.
Gambar 4.5: Jendela Installtion Type
6) Jendela berikutnya yaitu License terms. Beri tanda centang
opsi I accept the license terms dan klik tombol [Next].
7) Pada jendela Setup Support Rules mungkin Anda akan
menemukan sepasang peringatan (warning) seperti yang
ditunjukkan Gambar 4.6.
Peringatan aplikasi .NET menunjukkan bahwa komputer
Anda tidak terhubung ke internet. Ini bukan masalah, jadi
bisa diabaikan.
Selanjutnya, peringatan Windows Firewall menunjukkan
bahwa perlu dilakukan pengaturan firewall sebelum
dilakukan instalasi SQL Server. Peringatan ini juga bisa
diabaikan.
Gambar 4.6: Sepasang peringatan pada jendela Setup Support Rules
8) Klik saja tombol [Next] untuk menuju ke jendela Feature
Selection.
9) Pada jendela Feature Selection, Anda bisa memilih semua fitur
atau hanya memberi tanda centang fitur apa saja yang ingin
diinstal. Tentunya, semakin banyak fitur yang diinstal akan
membutuhkan lebih banyak ruang penyimpanan. Namun
demikian, fitur SQL Server Management Tool harus dipilih.
10) Tentukan juga alamat direktori (path) fitur yang di-share melalui
kolom Shared feature directory. Anda bisa membiarkan default
path, atau menentukan drive yang diinginkan, pada contoh ini
dipakai drive “E”.
Gambar 4.7: Jendela Feature Selection
11) Klik tombol [Next], maka akan ditampilkan jendela Installation
Rules.
Gambar 4.8: Jendela Installation Rules
12) Pada jendela ini, Anda bisa mengklik tombol [Show details]
untuk melihat berbagai status rule yang diinstal atau langsung
mengklik tombol [Next] untuk melanjutkan.
13) Jendela berikutnya yang muncul yaitu Instance Configuration.
Pada sesi ini, Anda diminta untuk menentukan nama instance
serta root directory-nya. Anda dapat memilih opsi Default
instance jika Anda ingin tidak banyak melakukan konfigurai, atau
menentukan sesuai keinginan, seperti yang dicontohkan pada
buku ini. Jika Anda menentukan nama instance sendiri, harus
mengikuti aturan bahwa nama instance TIDAK BOLEH lebih dari
15 (lima belas) karakter.
14) Di bagian tengah yang ditandai dengan tanda kotak
menunjukkan direktori SQL Server dan Reporting Service hasil
penentuan nama instance dan root directory-nya.
Gambar 4.9: Jendela Instance Configuration
15) Klik tombol [Next], maka akan ditampilkan jendela Disk Space
Requirements.
Gambar 4.10: Jendela Disk Space Requirements
16) Pada jendela ini tidak ada konfigurasi apapun, langsung saja klik
tombol [Next] untuk menuju ke jendela Server Configuration.
Gambar 4.11: Jendela Server Configuration
17) Beberapa hal yang perlu dilakukan konfigurasi yaitu sebagai
berikut.
Jika remote SQL Server jalan di bawah akun Network
Service atau akun domain, maka Anda harus membuat
sebuah Service Principal Name (SPN) untuk layanan SQL
sebagaimana dideskripsikan di dalam artikel Microsoft
Knowledge Base, tepatnya di tautan
http://support.microsoft.com/default.aspx?scid=kb;en-
us;811889.
Di tab Service Account, ubah Startup Type untuk layanan
SQL Server Agent menjadi “Automatic”. Agent ini
dipakai untuk proses backup.
Jika diinginkan memakai akun yang sama untuk seluruh
layanan, klik tombol [Use the same account for all SQL
Server services]. Setelah muncul kotak dialog Use the same
account for all SQL Server 2008 R2 services, pada kolom
Account Name pilih “NT/AUTHORITY \SYSTEM”, kemudian
klik tombol [OK].
Pada tab Collation, biarkan apa adanya (default).
18) Klik tombol [Next] untuk menuju ke jendela Database Engine
Configuration.
Gambar 4.12: Tab Account Provisioning
pada Jendela Databse Engine Configuration
19) Beberapa hal yang perlu dilakukan pada jendela ini yaitu
sebagai berikut.
Pada tab Account Provisioning, Anda bisa memilih opsi
Windows authentication mode tanpa menentukan
password, atau memilih opsi Mixed Mode (SQL Server
authentication and Windows authemtication) dan
masukkan password untuk akun “sa”. Akun “sa” merupakan
akun administrator internal SQL Server.
Anda juga bisa menambahkan daftar user yang diinginkan
ke dalam kolom Specify SQL Server administrators dengan
mengklik tombol [Add Current User].
Pada tab Data Directories, Anda dapat mengubah lokasi
penyimpanan data SQL Server. Direkomendasikan untuk
TIDAK menyimpan data SQL Server di drive “C”. Pada
contoh in, folder “SQLData” yang sebelumnya telah dibuat
di drive “E” dipakai sebagai lokasi menyimpan Data root
directory. Folder “SQLData\Data” untuk User database
directory dan User database log directory, serta folder
“SQLData\Backup” untuk Backup directory.
Khusus untuk Temp DB directory dan Temp DB log
directory dibiarkan default.
Gambar 4.13: Tab Data Directories
pada Jendela Databse Engine Configuration
20) Pada tab FILESTREAM tidak perlu dilakukan konfigurasi dan
langsung klik tombol [Next] untuk menuju ke jendela Reporting
Service Configuration.
Gambar 4.14: Jendela Reporting Service Configuration
21) Pilih opsi Install the native mode default configuration dan klik
tombol [Next] untuk menuju ke jendela Error Reporting.
Gambar 4.15: Jendela Error Reporting
PERANCANGAN DATA BASE SISTEM INFORMASI MANAJEMEN PENDIDIKAN
DENGAN DBMS MICROSOFT (ACCES DAN SQL SERVER))
84
22) Jika tidak ditemukan kesalahan, langsung klik tombol [Next]
untuk menuju ke jendela Installation Configuration Rules.
Gambar 4.16: Jendela Installation Configuration Rules
23) Klik tombol [Show details] untuk melihat status instalasi rule
dan klik tombol [Next] sampai muncul jendela Ready to Install.
Gambar 4.17: Jendela Ready to Install
24) Klik tombol [Install] untuk melanjutkan proses instalasi. Jika
berhasil, maka akan muncul jendela Complete yang lebih kurang
seperti yang ditunjukkan Gambar 4.18.
Gambar 4.18: Jendela Complete
25) Proses instalasi SQL Server 2008 R2 selesai.
5
Administrasi Database
Microsoft SQL Server
Mengingat SQL Server tergolong RDBMS (relational database
management system) yang cukup besar dan kompleks, membahas fitur-
fiturnya secara lengkap tidak akan cukup dituangkan di dalam sebuah
buku, apalagi hanya satu bab. Oleh karena itu, pembahasan pada bab ini
hanya sebatas tentang langkah-langkah membuat database dan
komponennya (table, view, stored procedure, dan trigger), membuat
berbagai perintah query yang sering dipakai , dan proses administrasi
lain dianggap perlu dilakukan oleh seorang database enginer. Hal ini
dimaksudkan untuk menjembatani pembaca pemula yang mungkin
mengalami kesulitan dalam melakukan hal-hal dasar ini atau yang
kurang terbiasa dengan query di SQL Server. Bagi pembaca tingkat mahir
bisa mengabaikan bab ini dan langsung fokus ke bab selanjutnya yang
diinginkan.
Sebagai bahan latihan, pada bab ini akan dibahas rancangan
database untuk penjualan sederhana. Database ini akan diberi nama
“db_commerce” dan di dalamnya akan dibuat enam buah tabel, yaitu:
“dbo.products”, “dbo.orderdetail”, “dbo.orders”, “dbo.customer”,
“dbo.supply”, dan “dbo.supplier”.
5.1 Membuat Database
Untuk membuat database di SQL Server dapat dipakai dua
cara, yaitu dengan mengetik perintah SQL langsung melalui jendela
Query Editor yang tersedia atau dengan SSMS berbasis GUI. Berikut
yaitu perintah SQL yang dipakai untuk membuat database baru
lengkap dengan berbagai pengaturannya.
USE [master]
GO
/****** Object: Database [db_commerce]
Script Date: 12/24/2013 20:23:30 ******/
CREATE DATABASE [db_commerce] ON PRIMARY
( NAME = N'db_commerce', FILENAME = N'C:\Program Files\Microsoft
SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db_commerce.mdf' ,
SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'db_commerce_log', FILENAME = N'C:\Program
Files\Microsoft SQL
Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\db_commerce_log.ldf' ,
SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [db_commerce] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [db_commerce].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [db_commerce] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [db_commerce] SET ANSI_NULLS OFF
GO
ALTER DATABASE [db_commerce] SET ANSI_PADDING OFF
GO
ALTER DATABASE [db_commerce] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [db_commerce] SET ARITHABORT OFF
GO
ALTER DATABASE [db_commerce] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [db_commerce] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [db_commerce] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [db_commerce] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [db_commerce] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [db_commerce] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [db_commerce] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [db_commerce] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [db_commerce] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [db_commerce] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [db_commerce] SET DISABLE_BROKER
GO
ALTER DATABASE [db_commerce] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
PERANCANGAN DATA BASE SISTEM INFORMASI MANAJEMEN PENDIDIKAN
DENGAN DBMS MICROSOFT (ACCES DAN SQL SERVER))
88
ALTER DATABASE [db_commerce] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [db_commerce] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [db_commerce] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [db_commerce] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [db_commerce] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [db_commerce] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [db_commerce] SET READ_WRITE
GO
ALTER DATABASE [db_commerce] SET RECOVERY SIMPLE
GO
ALTER DATABASE [db_commerce] SET MULTI_USER
GO
ALTER DATABASE [db_commerce] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [db_commerce] SET DB_CHAINING OFF
GO
Sedangkan, berikut ini merupakan langkah-langkah yang perlu
dilakukan dalam membuat sebuah database baru memakai aplikasi
wizard berbasis GUI dengan SSMS.
1) Setelah berhasil masuk ke aplikas SSMS, pada bagian Object
Explorer, klik kanan Databases » New Database....
2) Setelah muncul jendela New Database, ketik “db_commerce”
pada kolom Database name.
3) Klik tombol telusur (browse – tombol dengan label tiga titik “...”)
yang ada di sebelah kanan kolom Owner, seperti Gambar 5.1.
Gambar 5.1: Bagian Object Explorer dan jendela New Database
4) Sampai muncul jendela Select Database Owner, klik tombol
[Browse...].
5) Pada jendela Browse for Objects, beri tanda centang objek [sa]
pada daftar Matching object dan klik tombol [OK], maka akan
dibawa kembali ke jendela Select Database Owner, klik tombol
[OK] lagi.
6) Apabila pada kolom Owner sudah berisi objek [sa], berarti sudah
benar.
Gambar 5.2: Proses memasukkan objek Owner
7) Setelah kembali ke jendela New Database (Gambar 5.1), klik
tombol [OK]. Jika berhasil, maka database “db_commerce” akan
muncul di bagian Object Explorer, tepatnya di dalam grup
Databases seperti Gambar 5.3.
Gambar 5.3: Database “db_commerce” yang baru dibuat
5.2 Membuat Tabel
Setelah membuat database, langkah berikutnya yaitu
membuat tabel. Tabel merupakan komponen utama database relasional
yang dipakai untuk menyimpan data dalam bentuk kolom (field) dan
baris (record).
5.2.1 Tabel [dbo].[products]
Tabel pertama yang akan dibuat yaitu “dbo.products”. Tabel
ini dipakai untuk menyimpan data produk atau komoditas jual.
Keterangan dari tabel “dbo.products” dituangkan dalam Tabel 5.1.
Tabel 5.1: Keterangan Tabel “dbo.products”
No. Nama Kolom Keterangan
1. serial dipakai untuk menyimpan data ID-Produk.
Kolom ini merupakan kunci primer (primary key)
pada tabel products. Bertipe data int dengan
atribut Is Identify=Yes, sehingga tanpa harus
menentukan nilai (value), kolom ini akan terisi
secara otomatis dengan nilai lebih besar satu
angka dari baris data sebelumnya.
2. name dipakai untuk menyimpan data nama
produk.
3. description dipakai untuk menyimpan data deskripsi
suatu produk, mulai dari merk, spesifikasi,
garansi, dan keterangan lain yang dianggap
perlu ditambahkan.
4. price dipakai untuk menyimpan data harga jual
suatu produk.
5. picture dipakai untuk menyimpan data lokasi file
(path) gambar suatu produk disimpan.
6. stock dipakai untuk menyimpan data stok suatu
produk.
Adapun langkah-langkah membuat tabel “dbo.products”
memakai SSMS yaitu sebagai berikut.
1) Pilih database “db_commerce”, kemudian klik kanan (right
clicked) objek Tables » New Table....
Gambar 5.4: Proses membuat tabel baru
2) Ketik nama kolom (field) yang diperlukan melalui bagian Column
Name, tentukan tipe data kolom melalui bagian Data Type, dan
status boleh kosong (null) suatu kolom melalui bagian Allow
Nulls seperti Gambar 5.5 berikut ini.
Gambar 5.5: Proses pembuatan tabel [dbo].[products]
3) Khusus untuk kolom serial, karena akan dibuat auto-number
atau auto-increment, maka perlu dilakukan pengaturan lebih
lanjut, yaitu dengan mengatur atribut Is Identity dengan nilai
“Yes” dan Identity Increment dengan nilai “1”.
Gambar 5.6 Properti untuk kolom serial pada tabel [dbo].[products]
4) Simpan tabel dengan mengklik ikon disket (tombol simpan) yang
ada di bagian toolbar SSMS dan beri nama “products”, maka
secara otomatis akan bernama “dbo.products”.
Gambar 5.7: Struktur akhir tabel [dbo].[products]
5.2.2 Tabel [dbo].[orderdetail]
Tabel “dbo.orderdetail” dipakai untuk menyimpan detail
order atau pemesanan terhadap suatu produk. Tabel 5.2 menunjukkan
keterangan dari tabel “dbo.orderdetail”.
Tabel 5.2: Keterangan Tabel “dbo.orderdetail”
No. Nama Kolom Keterangan
1. orderid dipakai untuk menyimpan data ID-Order. Kolom ini
merupakan kunci asing (foreign key) yang mengacu
pada kolom serial pada tabel “dbo.orders”. Kolom ini
bertipe data bigint, karena setiap kali order bisa lebih
dari satu produk, sehingga di tabel “dbo.orderdetail”
dimungkinkan akan menyimpan banyak record.
2. productid dipakai untuk menyimpan data ID-Produk yang
diorder. Kolom ini juga merupakan kunci asing (foreign
key) yang mengacu pada kolom serial di tabel
“dbo.products”.
3. quantity dipakai untuk menyimpan data kuantitas order
suatu produk yang yang diorder.
4. price dipakai untuk menyimpan data nilai order yang di
dapat dari harga jual (orderrdetail.price) dikalikan
dengan kuantitas (orderdetail.quantity). Kolom
orderdetail.price ini bisa mempunyai nilai (value) yang
sama dengan kolom products.price, namun juga bisa
mempunyai nilai yang berbeda. Sama jika nilai yang
tersimpan di kolom products.price belum mengalami
perubahan (naik atau turun) sejak pertama kali dientri
dan orderdetail.quantity bernilai satu, demikian
sebaliknya.
Adapun struktur tabel “dbo.orderdetail” hasil pembuatan
memakai SSMS ditunjukkan pada Gambar 5.8 berikut ini.
Gambar 5.8: Struktur tabel “dbo.orderdetail”
5.2.3 Tabel [dbo].[orders]
Tabel “dbo.orders” dipakai untuk menyimpan data order dari
konsumen tertentu. Jika tabel “dbo.orderdetail” berhubungan dengan
detail produk yang diorder, tabel “dbo.orders” berhubungan dengan
data konsumen yang melakukan order. Secara teknis “dbo.orderdetail”
merupakan tabel detail dari tabel “dbo.orders”. Keterangan tabel
“dbo.orders” ditunjukkan pada Tabel 5.3.
Tabel 5.3: Keterangan Tabel “dbo.orders”
No. Nama Kolom Keterangan
1. serial dipakai untuk menyimpan data ID-Order.
Kolom ini merupakan kunci primer (primary key)
pada tabel ini. Kolom ini bertipe data bigint
dengan atribut Is Identify=Yes.
2. date dipakai untuk menyimpan data tanggal
seorang konsumen melakukan order.
3. customerid dipakai untuk menyimpan data ID-Konsumen
yang melakukan order.
Sruktur tabel “dbo.orders” hasil pembuatan memakai SSMS
ditunjukkan pada Gambar 5.9.
Gambar 5.9: Struktur tabel “dbo.orderdetail”
5.2.4 Tabel [dbo].[customer]
Table “dbo.customer” dipakai untuk menyimpan data
konsumen yang pernah melakukan order. Keterangan dari tabel
“dbo.customer” dituangkan dalam Tabel 5.4.
Tabel 5.4: Keterangan Tabel “dbo.customer”
No. Nama Kolom Keterangan
1. serial dipakai untuk menyimpan data ID-Konsumen.
Kolom ini merupakan kunci primer (primary key).
Kolom ini juga bertipe data bigint dengan atribut
Is Identify=Yes.
2. name dipakai untuk menyimpan data nama
konsumen.
3. email dipakai untuk menyimpan data e-mail
konsumen.
4. address dipakai untuk menyimpan data alamat
konsumen, yang selanjutnya dipakai sebagai
alamat pengiriman barang yang diorder,
tentunya setelah konsumen mentransfer
sejumlah uang sesuai nilai ordernya.
5. phone dipakai untuk menyimpan data no. telepon
konsumen.
Gambar 5.10 berikut ini menunjukkan struktur tabel
“dbo.customer” hasil pembuatan memakai SSMS.
Gambar 5.10: Struktur tabel “dbo.customer”
5.2.5 Tabel [dbo].[supply]
Tabel “dbo.supply” dipakai untuk menyimpan data
pembelian/kulakan suatu produk. Keterangan dari tabel “dbo.supply”
dituangkan dalam Tabel 5.5.
Tabel 5.5: Keterangan Tabel “dbo.supply”
No. Nama Kolom Keterangan
1. serial dipakai untuk menyimpan data ID-Pembelian.
Kolom ini merupakan kunci primer (primary key).
Kolom ini juga bertipe data bigint dengan atribut
Is Identify=Yes.
2. productid dipakai untuk menyimpan data ID-Produk
yang diorder. Kolom ini merupakan kunci asing
(foreign key) yang mengacu pada kolom serial di
tabel “dbo.products”.
3. quantity dipakai untuk menyimpan data kuantitas
produk yang dibeli.
4. price dipakai untuk menyimpan data harga satuan
pembelian sutu produk.
5. supplierid dipakai untuk menyimpan data ID-Supplier
yang mnyuplai barang. Kolom ini juga
merupakan kunci asing (foreign key) yang
mengacu pada kolom serial di tabel
“dbo.supplier”.
6. date dipakai untuk menyimpan data tanggal
pembelian produk tertentu.
Gambar 5.11 berikut ini menunjukkan struktur tabel
“dbo.supply” hasil pembuatan memakai SSMS.
Gambar 5.11: Struktur tabel “dbo.supply”
5.2.6 Tabel [dbo].[supplier]
Tabel “dbo.supplier” dipakai untuk menyimpan data
penyedia produk (supplier). Keterangan dari tabel “dbo.supplier”
dituangkan dalam Tabel 5.6 berikut ini.
Tabel 5.6: Keterangan Tabel “dbo.supplier”
No. Nama Kolom Keterangan
1. serial dipakai untuk menyimpan data ID-Supplier.
Kolom ini merupakan kunci primer (primary key).
Kolom ini juga bertipe data int dengan atribut Is
Identify=Yes.
2. name dipakai untuk menyimpan data nama supplier
yang menyediakan produk tertentu.
3. address dipakai untuk menyimpan data alamat
supplier.
4. phone dipakai untuk menyimpan data no. Telepon
atau HP supplier tertentu.
5. contact dipakai untuk menyimpan data kontak person
supplier tertentu.
Gambar 5.12 berikut ini menunjukkan struktur tabel
“dbo.supplier” hasil pembuatan memakai SSMS.
Gambar 5.12: Struktur tabel “dbo.supplier”
5.3 Membuat Diagram Database
Diagram database dipakai untuk menampilkan relasi antar
tabel yang ada di dalam suatu database. Dengan adanya diagram ini,
informasi dependensi antara data di satu tabel dengan tabel lainnya
akan semakin jelas. Diagram ini juga sangat bermanfaat dalam membuat
view kategori kompleks, perancang database akan dengan mudah
melibatkan tabel mana saja dalam membuat sebuah view. Tentunya,
masih banyak lagi manfaat yang diperoleh dengan adanya sebuah
diagram database. Berikut ini disajikan langkah-langkah membuat
diagram database memakai SSMS.
1) Pada bagian Object Explorer, pilih Database Diagram, kemudian
pilih menu New Database Diagram.
Gambar 5.13: Proses pembuatan diagram database
2) Setelah muncul jendela Add Table, pilih semua tabel yang ada,
kemudian klik tombol [Add].
Gambar 5.14: Jendela Add table
3) Jika tidak terjadi kesalahan, maka keempat tabel yang dipilih tadi
akan muncul ke dalam kanvas Database Diagram.
Gambar 5.15: Proses merelasikan tabel products dengan orderdetail
4) Untuk merelasikan antara tabel satu dengan lainnya, cukup
drag-and-drop (klik tahan dan geser) kolom yang menjadi
primary key ke kolom pada tabel lain yang menjadi foreign key–
nya.
5) Setelah muncul jendela Tables and Columns, tentukan nama
relasi melalui kolom Relationship name, nama tabel dan primary
key-nya (sebelah kiri), serta nama tabel yang akan direlasikan
dan foreign key-nya (sebelah kanan), kemudian klik tombol [OK].
Gambar 5.16: Proses penentuan nama dan kunci relasinya
6) Jendela berikutnya yaitu Foreign Key Relationship. Pada
jendela ini, Anda diminta untuk menentukan aturan-aturan
mengenai tabel yang mempunyai foreign key (tabel orderdetail).
Gambar 5.17: Jendela Foreign Key Relationship
7) Aturan-aturan yang dimaksud diantaranya yaitu INSERT and
UPDATE Specification. Pada aturan ini, baik Delete Rule maupun
Update Rule sama-sama mempunyai empat opsi, yaitu:
No Action. Jika terjadi proses update atau delete pada data
di tabel yang mempunyai primary key (tabel products),
maka data-data yang bersesuaian di tabel yang mempunyai
foreign key (tabel orderdetail) tidak akan terjadi apap-apa.
Cascade. Jika terjadi proses update atau delete pada data di
tabel products, maka data-data yang bersesuaian di tabel
orderdetail juga akan terbarui (updated) atau terhapus
(deleted).
Set Null. Jika terjadi proses update atau delete pada data di
tabel products, maka data-data yang bersesuaian di tabel
orderdetail akan di set menjadi kosong (bernilai null).
Set Default. Jika terjadi proses update atau delete pada
data di tabel products, maka data-data yang bersesuaian di
tabel orderdetail akan dikembalikan ke nilai default yang
ditentukan saat pembuatan tabel.
8) Dengan cara yang sama, relasikan supplier.serial dengan
supply.supplierid, products.serial dengan supply.productid,
products.serial dengan orderdetail.productid, orders.serial
dengan orderdetail.orderid, dan yang terakhir customer.serial
dengan orders.customerid. Gambar 5.18 berikut merupakan
diagram database yang telah dibuat.
Gambar 5.18: Diagram relasi antar tabel dalam database db_commerce
Dari diagram database di atas dapat disimpulkan beberapa
hubungan dependensi sebagai berikut.
Tabel supply tergantung (depend) pada tabel supplier dan tabel
products.
Tabel orderdetail tergantung pada tabel orders dan tabel
products, sedangkan tabel orders tergantung pada tabel
customer. Hubungan dependensi antar tabel ini ditunjukkan
pada Gambar 5.19.
Gambar 5.19: Hubungan dependensi antar tabel dalam database
db_commerce
5.4 Persiapan Data
Persiapan data merupakan proses memasukkan data ke dalam
sebuah tabel sehingga tabel ini mempunyai data awal. Tujuannya
agar efeknya lebih representatif ketika sebuah tabel tadi dikenai suatu
perintah SQL. Berikut ini disajikan beberapa perintah SQL untuk
menyisipkan (insert) dan menampilkan (select) data ke/dari dalam
sebuah tabel.
Menyisipkan tujuh data ke dalam tabel products.
Gambar 5.20: Proses insert data ke dalam tabel dbo.products
Dengan perintah SQL serupa Anda dapat bereksperimen sendiri
untuk menyisipkan data ke dalam tabel customer, orders dan
orderdetail.
Menampilkan seluruh data yang ada dalam tabel products.
Gambar 5.21: Proses menampilkan data pada tabel dbo.products
Menampilkan seluruh data yang ada dalam tabel customer.
Gambar 5.22: Proses menampilkan data pada tabel dbo.customer
Menampilkan seluruh data yang ada dalam tabel orders.
Gambar 5.23: Proses menampilkan data pada tabel dbo.orders
Menampilkan seluruh data yang ada dalam tabel orderdetail.
Gambar 5.24: Proses menampilkan data pada tabel dbo.orderdetail
Menampilkan seluruh data yang ada dalam tabel supplier.
Gambar 5.25: Proses menampilkan data pada tabel dbo.supplier
Menampilkan seluruh data yang ada dalam tabel supply.
Gambar 5.26: Proses menampilkan data pada tabel dbo.supply
5.5 Membuat View
View juga termasuk dalam komponen database. Secara default,
view baru dibuat ke dalam database yang diaktifkan. Untuk membuat
secara eksplisit di dalam suatu database tertentu, maka buatlah nama
view dengan sintaks: db_name.view_name.
Untuk membuat view, Anda bisa memakai dua cara, yaitu:
memakai WIZARD dan CODING (mengetik langsung) ke editor
query. Pada bab ini akan dibahas pembuatan view memakai
WIZARD karena untuk membuat view melalui CODING, Anda cukup
mengetikkan perintah SQL ke dalam editor query kemudian
mengeksekusinya.
1) Pilih database “db_commerce”, klik kanan Views » New View....
Gambar 5.27: Proses pembuatan view baru
2) Setelah muncul kotak dialog Add Table, pilih tabel apa saja yang
ingin dilibatkan, kemudian klik tombol [Add].
Gambar 5.28: Kotak dialog Add table
3) Anda akan dibawa ke halaman utama pembuatan view. Halaman
utama view ditunjukkan pada Gambar 5.29.
Gambar 5.29: Proses pembuatan view
Keterangan:
[1] Daftar tabel yang ditambahkan ke dalam pembuatan view.
[2] View worksheet yang dipakai untuk menentukan kolom,
alias, nama tabel, status sebagai output, tipe pengurutan, status
pengurutan, status pengegrupan, filterisasi dan lainnya.
[3] Kode hasil generate dari view worksheet.
[4] Hasil eksekusi view berdasar atribut yang ditentukan di
view worksheet.
4) Untuk menampilkan hasil dari view yang dibuat, klik tombol
(tanda seru) yang ada di toolbar.
5) Untuk menyimpan, klik tombol disket yang ada di toolbar,
setelah muncul kotak dialog Choose Name, klik tombol [OK].
Gambar 5.30: Proses penyimpanan view
6) Dengan cara yang sama, buat view satu lagi dengan deskripsi
yang ditunjukkan pada Gambar 5.31 dan simpan dengan nama
“vdetail_order”.
Gambar 5.31: Proses pembuatan view “vdetail_order”
7) Jika tidak ada kesalahan, maka di dalam daftar view akan muncul
nama “vdetail_order” seperti Gambar 5.32 berikut ini.
Gambar 5.32: Daftar view yang telah dibuat
5.6 Membuat Stored Procedure
Stored Procedure merupakan kumpulan perintah SQL yang
didefinisikan oleh pengguna dan disimpan dengan nama tertentu di
dalam server database. Stored Procedure biasanya berisi perintah-
perintah umum yang berhubungan dengan database, baik perintah DDL
(data definition language) maupun DML (data manipulation language).
Berikut ini disajikan beberapa contoh pembuatan stored procedure
untuk menampilkan (select), menyisipkan (insert), memperbarui
(update) dan menghapus (delete) data. Secara umum sintaks Stored
Procedure sebagai berikut.
CREATE PROCEDURE [schema_name.][Procedure_Name]
<@Param_1> <Datatype_For_Param_1> =
<Default_Value_For_Param_1>,
<@Param_2> <Datatype_For_Param_2> =
<Default_Value_For_Param_2>,
...
<@Param_n> <Datatype_For_Param_n> =
<Default_Value_For_Param_n>
AS
SQL_STATEMENT;
Tabel 5.7: Keterangan sintaks stored procedure
Argumen Keterangan
[schema_name.][Procedure_Name] Mendeskripsikan nama skema
dan nama stored procedure.
<Param> <Datatype_For_Param> =
<Default_Value_For_Param>
Mendeskripsikan nama
parameter, tipe data parameter,
dan nilai default untuk
parameter. Nama parameter
harus diawali dengan tanda “@”.
Parameter ini bersifat opsional,
bisa terdiri satu atau lebih
parameter, namun juga tidak harus
ada.
SQL_STATEMENT Merupakan isi dari stored
procedure yang berisi kumpulan
perintah SQL.
Mungkin Anda bertanya, mengapa diperlukan stored procedure?
Berikut disajikan kelebihan dan kekurangan penerapan stored procedure
dalam sistem database. Terdapat banyak kelebihan diterapkan stored
procedure, diantaranya yaitu sebagai berikut.
Karena bisa menerapkan parameter, stored procedure lebih
fleksibel dalam melakukan berbagai operasi data.
Proses eksekusi stored procedure dilakukan di server database
sehingga prosesnya menjadi lebih cepat.
Lebih singkat kode program dalam mengembangan aplikasi,
karena aplikasi cukup memanggil stored procedure dan
mengirim parameter yang diperlukan sesuai dengan format
store procedure yang akan dieksekusi.
Bisa dipakai untuk membagi beban kerja antara server dan
klien saat aplikasi di jalankan. Jika semua query dibuat dan
dijalankan sisi klien (program aplikasi atau front end), maka
sumber daya yang terpakai pada sisi klien ini akan besar,
dengan adanya stored procedure sebagian beban kerja klien bisa
dialihkan ke server.
Stored procedure hanya ditulis sekali, namun bisa diakses oleh
banyak aplikasi.
Stored procedure berparameter yang memvalidasi seluruh input
user dapat dipakai untuk mencegah terjadinya SQL injection.
Jika Anda memakai perintah SQL dinamis, pastikan perintah
Anda berparameter, dan jangan pernah memasukkan nilai
parameter secara langsung ke dalam perintah query.
Stored procedure dapat mereduksi lalu lintas jaringan, yaitu
dengan mengombinasikan banyak operasi data ke dalam satu
pemanggilan procedure.
Sedangkan, kekurangan dalam penerapan stored procedure
diantaranya yaitu sebagai berikut.
Apabila semua permintaan operasi data ditangani oleh server
database memakai stored procedure, jika jumlah kliennya
sangat banyak, maka beban server akan sangat besar.
Kesulitan dalam melakukan migrasi server database, misalkan
dari SQL Server ke Oracle, SQL Server ke MySQL, atau
sebaliknya. Karena sintaks stored procedure pada umumnya
berbeda pada masing-masing DBMS..
5.6.1 Stored Procedure untuk Menampilkan Data
Berikut ini disajikan contoh stored procedure untuk
menampilkan data pada tabel dbo.products dengan kriteria tertentu.
Gambar 5.33: Stored procedure “getProducts”
Stored procedure “getProducts” dipakai untuk menampilkan
jumlah data (hasilnya ditampilkan dalam kolom “Total”) pada tabel
dbo.products dengan kriteria nama produk (kolom “name”)
mengandung kata dalam varibel @Kata.
Gambar 5.34: Proses dan hasil eksekusi procedure “getProducts”
Jika stored procedure “getProducts” menampilkan data dari
tabel, berikut ini disajikan contoh satu lagi stored procedure untuk
menampilkan data dari view.
CREATE PROCEDURE getDetailOrder (
@id bigint
) AS
SELECT * FROM vdetail_order WHERE orderid=@id;
Stored procedure “getDetailOrder” dipakai untuk
menampilkan data dari view “vdetail_order” dengan kriteria ID-Order
(kolom “orderid”) bernilai varibel @id.
Gambar 5.35: Proses dan hasil eksekusi procedure “getDetailOrder”
5.6.2 Stored Procedure untuk Menyisipkan Data
Berikut ini disajikan contoh stored procedure untuk menyisipkan
data ke dalam tabel dbo.products.
Gambar 5.36: Stored procedure “insProducts”
Stored procedure “insProducts” dipakai untuk menyisipkan
data melalui empat variabel input, yaitu: @vname (untuk kolom
“name”), @vdesc (untuk kolom “description”), @vprice (untuk kolom
“price”), dan @vpic (untuk kolom “picture”). Kolom dbo.products.serial
sengaja tidak didefinisikan karena sudah bertipe data IDENTIFY (1,1),
sehingga dapat terisi secara otomatis oleh sistem.
Gambar 5.37: Proses dan hasil eksekusi procedure “insProducts”
5.6.3 Stored Procedure untuk Memperbarui Data
Berikut ini disajikan contoh stored procedure untuk
memperbarui data pada tabel dbo.products.
Gambar 5.38: Stored procedure “updProducts”
Stored procedure “updProducts” dipakai untuk memperbarui
data melalui empat variabel edit dan satu variabel kondisi. Empat
variabel edit yang dimaksud yaitu @vname (untuk kolom “name”),
@vdesc (untuk kolom “description”), @vprice (untuk kolom “price”),
dan @vpic (untuk kolom “picture”). Sedangkan variabel kondisnya @id
(untuk kolom “serial”).
Gambar 5.39: Proses dan hasil eksekusi procedure “updProducts”
5.6.4 Stored Procedure untuk Menghapus Data
Berikut ini disajikan contoh stored procedure untuk menghapus
data dari tabel dbo.products.
Gambar 5.40: Stored procedure “delProducts”
Stored procedure “delProducts” dipakai untuk menghapus
data dengan satu variabel kondisi, yaitu @id (untuk kolom “serial”).
Gambar 5.41: Proses dan hasil eksekusi procedure “delProducts”
Dengan cara yang sama, ketik dan eksekusi skrip berikut ini
untuk membuat stored procedure pada tabel dbo.customer.
-- INSERT DATA
CREATE PROCEDURE insCust(
@vname nvarchar(30),
@vmail nvarchar(50),
@vaddr nvarchar(50),
@vphone nvarchar(20)
) AS
INSERT INTO dbo.customer(name, email, address, phone)
VALUES (@vname, @vmail, @vaddr, @vphone);
GO
-- UPDATE DATA
CREATE PROCEDURE updCust(
@id int,
@vname nvarchar(30),
@vmail nvarchar(50),
@vaddr nvarchar(50),
@vphone nvarchar(20)
) AS
UPDATE dbo.customer SET name=@vname, email=@vmail, address=@vaddr,
phone=@vphone
WHERE serial=@id;
GO
-- DELETE DATA
CREATE PROCEDURE delCust(
@id int
) AS
DELETE FROM dbo.customer WHERE serial=@id;
GO
Selanjutnya, ketik dan eksekusi skrip berikut ini untuk membuat
stored procedure pada tabel dbo.orders.
-- INSERT DATA
CREATE PROCEDURE insOrders(
@vdate date,
@vcust int
) AS
INSERT INTO dbo.orders (date, customerid) VALUES (@vdate,
@vcust);
GO
-- UPDATE DATA
CREATE PROCEDURE updOrders(
@id bigint,
@vdate date,
@vcust int
) AS
UPDATE dbo.orders SET date=@vdate, customerid=@vcust
WHERE serial=@id;
GO
-- DELETE DATA
CREATE PROCEDURE delOrders(
@id int
) AS
DELETE FROM dbo.orders WHERE serial=@id;
GO
Terakhir, ketik dan eksekusi skrip berikut ini untuk membuat
stored procedure pada tabel dbo.orderdetail.
-- INSERT DATA
CREATE PROCEDURE insOrderDetail(
@vorderid bigint,
@vproid int,
@vqty int,
@vprice float
) AS
INSERT INTO dbo.orderdetail(orderid, productid, quantity,
price)
VALUES (@vorderid, @vproid, @vqty, @vprice);
GO
-- UPDATE DATA
CREATE PROCEDURE updOrderDetail(
@vorderid bigint,
@vproid int,
@vqty int,
@vprice float
) AS
UPDATE dbo.orderdetail SET quantity=@vqty, price=@vprice
WHERE orderid=@vorderid AND productid=@vproid;
GO
-- DELETE DATA
CREATE PROCEDURE delOrderDetail(
@vorderid bigint,
@vproid int
) AS
DELETE FROM dbo.orderdetail
WHERE orderid=@vorderid AND productid=@vproid;
GO
Gambar 5.42 berikut ini menunjukkan daftar stored procedure
yang telah dibuat pada database “db_commerce”.
Gambar 5.42: Daftar stored procedure pada database “db_commerce”
5.7 Membuat UDF
Mungkin Anda sering melihat fungsi-fungsi SQL siap pakai
bawaan sistem, seperti MAX() untuk menampilkan data terbesar
(khusus untuk tipe DATE akan menampilkan data tanggal termuda) pada
kolom tertentu, SUM() untuk menampilkan jumlah seluruh data pada
kolom tertentu, AVG() untuk menampilkan rata-rata data yang ada di
kolom tertentu, demikian fungsi-fungsi bawaan lainnya. Dengan UDF
(user defined function – sering disebut Function saja), Anda dapat
mendefinisikan sendiri fungsi-fungsi sesuai selera sehingga bisa
dipakai selayaknya fungsi bawaan ini .
Pada SQL Server 2008 R2, UDF dikategorikan menjadi tiga, yaitu:
Inline Table-Valued Function, Scalar-Valued Function, dan Multi-
Statement Table-Valued Function.
5.7.1 Inline Table-Valued Function
Inline table-valued function (disingkat ITVF) merupakan bagian
dari UDF yang mengembalikan tipe data table. ITVF dapat dipakai
untuk meningkatkan fungsionalitas view yang berparameter. Berikut ini
yaitu aturan-aturan dalam ITVF:
Klausa RETURN hanya terdiri dari kata kunci table. Anda tidak
harus mendefinisikan format dari variabel return, karena
variabel ini diset oleh format result set yang dihasilkan dari
statemen SELECT dalam klausa RETURN.
TIDAK ADA function body yang diapit dengan BEGIN dan END.
Klausa RETURN berisi sebuah statemen SELECT tunggal yang
diapit tanda kurung. Result set yang dihasilkan oleh statemen
SELECT membentuk table yang dikembalikan oleh fungsi.
Statemen SELECT dipakai dalam sebuah fungsi inline
mengikuti aturan statemen SELECT yang dipakai dalam view.
ITVF hanya menerima konstanta atau argumen @local_variable.
Skrip berikut ini merupakan sintaks umum dari ITVF.
CREATE FUNCTION <Inline_Function_Name, sysname,
FunctionName>
(
-- Add the parameters for the function here
<@param1, sysname, @p1> <Data_Type_For_Param1, ,
int>,
<@param2, sysname, @p2> <Data_Type_For_Param2, ,
char>
)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references
here
SELECT 0
)
Pada contoh kali ini akan dibuat ITVF untuk menampilkan
seluruh data yang ada pada tabel tertentu namun hanya kolom-kolom
tertentu.
Gambar 5.43: Fungsi “allProduct”
Fungsi allProduct() di atas dipakai untuk menampilkan
seluruh data yang ada di kolom serial, name, description, dan price yang
ada di tabel dbo.products. sebagaimana aturan tentang ITVF variabel
return hanya berupa tipe data TABLE.
Gambar 5.44: Proses dan hasil eksekusi fungsi “allProduct”
Perintah SQL di atas merupakan contoh eksekusi ITVF yang telah
dibuat, yaitu fungsi allProdutc(). Karena pemanggilan fungsinya
ditambahkan klausa WHERE name LIKE ‘%LG%’ maka hasil yang
dikembalikan berupa data produk yang mengandung kata “LG”.
5.7.2 Scalar-Valued Function
Scalar-Valued function (disingkat SVF) bisa dibuat dengan atau
tanpa parameter. SVF dapat dipakai untuk mengoperasikan kolom-
kolom suatu tabel atau view. Operasi yang dimaksud dapat berupa
operasi matematika, penggabungan string, pencarian, dan operasi
sejenis lainnya. Adapun sintaks umum dari SVF yaitu sebagai berikut.
CREATE FUNCTION <Scalar_Function_Name, sysname,
FunctionName>
(
-- Add the parameters for the function here
<@Param1, sysname, @p1> <Data_Type_For_Param1, , int>
)
RETURNS <Function_Data_Type, ,int>
AS
BEGIN
-- Declare the return variable here
DECLARE <@ResultVar, sysname, @Result>
<Function_Data_Type, ,int>
-- Add the T-SQL statements to compute the return
value here
SELECT <@ResultVar, sysname, @Result> = <@Param1,
sysname, @p1>
-- Return the result of the function
RETURN <@ResultVar, sysname, @Result>
END
Pada contoh kali ini akan dibuat SVF untuk mendapatkan nilai
pada kolom (field) baru yang dihasilkan dari perkalian dua kolom. Dua
kolom ini dapat ditentukan secara langsung saat eksekusi SVF.
Gambar 5.45: Fungsi subtotal()
Fungsi subtotal() di atas dipakai untuk menampilkan hasil kali
dua kolom yang di-parsing melalui parameter @qty dan @price. Fungsi
ini mengembalikan nilai bertipe data float.
Gambar 5.46: Proses dan hasil eksekusi fungsi subtotal()
Perintah SQL di atas merupakan contoh eksekusi SVF yang telah
dibuat, yaitu fungsi subtotal(). Karena pemanggilan fungsinya
subtotal(quantity, price) maka hasil yang dikembalikan berupa hasil
perkalian dari kolom quantity dan price.
5.7.3 Multi-Statement Table-Valued Function
Secara umum multi-statement table-valued function (disingkat
MTVF) mirip dengan inline table-valued function (ITVF), perbedaanya
hanya pada poin-poin berikut ini.
Variabel table yang akan dikembalikan oleh fungsi harus
didefinisikan di awal fungsi.
MTVF harus mempunyai blok BEGIN/END.
Di dalam blok BEGIN/END harus ada kode yang menghasilkan
variabel table.
MTVF harus mengembalikan nilai.
ITVF hanya mengembalikan statemen SELECT, tidak ada variabel
table di dalamnya, tidak ada statemen INSERT, dan tidak ada
blok kode. Skrip berikut ini merupakan sintaks umum MTVF.
CREATE FUNCTION <Table_Function_Name, sysname, FunctionName>
(
-- Add the parameters for the function here
<@param1, sysname, @p1> <data_type_for_param1, ,
int>,
<@param2, sysname, @p2> <data_type_for_param2, ,
char>
)
RETURNS
<@Table_Variable_Name, sysname, @Table_Var> TABLE
(
-- Add the column definitions for the TABLE variable
here
<Column_1, sysname, c1> <Data_Type_For_Column1, ,
int>,
<Column_2, sysname, c2> <Data_Type_For_Column2, ,
int>
)
AS
BEGIN
-- Fill the table variable with the rows for your
result set
RETURN
END
Untuk contoh MTVF akan dipakai contoh yang telah dibahas
pada ITVF dengan sedikit modifikasi.
Gambar 5.47: Fungsi insCrossTable()
Fungsi insCrossTable() di atas dipakai untuk menampilkan
data dari tabel dbo.products untuk selanjutnya data hasil SELECT
ini disisipkan (insert) ke dalam tabel baru.
Gambar 5.48: Proses dan hasil eksekusi fungsi insCrossTable()
Perintah SQL di atas merupakan contoh eksekusi MTVF yang
telah dibuat, yaitu fungsi insCrossTable(). Karena pemanggilan fungsinya
ditambahkan klausa WHERE nama LIKE ‘%LG%’ maka hasil yang
dikembalikan berupa data produk yang mengandung kata “LG”. Data
yang dikembalikan oleh fungsi insCrossTable() ini selanjutnya disisipkan
ke dalam tabel baru dengan nama produkLG. Gambar 5.48 (kanan)
menunjukkan terciptanya tabel baru dengan nama dbo.produkLG hasil
eksekusi fungsi insCrossTable().
5.8 Membuat Trigger
Trigger merupakan sebuah bentuk khusus dari stored procedure
yang secara otomatis melakukan eksekusi ketika sebuah event terjadi di
dalam server database. Trigger dapat mencegah akses terhadap data
yang spesifik, melakukan logging atau melakukan audit perubahan data.
Berikut yaitu beberapa manfaat penggunaan trigger:
Sebagai salah satu mekanisme alternatif untuk menjalankan
aturan bisnis dan menjaga integritas data dalam sebuah
database. Mekanisme yang lainnya yaitu penggunaan
constraint.
Dapat mengevaluasi status dari sebuah tabel sebelum dan
sesudah terjadi perubahan data dan melakukan aksinya sesuai
perbedaan yang terjadi.
Dapat melakukan perubahan secara cascade melalui relasi tabel
pada database, akan namun perubahan ini akan lebih efisien jika
dieksekusi memakai referential integrity constraints.
Dapat melakukan pencegahan akses atas data yang kompleks
dibanding dengan memakai check constraint.
Dapat mereferensikan kolom (field) dalam tabel yang berbeda.
Pada SQL Server 2008 R2, trigger dikelompokkan menjadi tiga,
yaitu: Trigger DML (data manipulation language), Trigger DDL (data
definition language), dan Trigger LOGON.
5.8.1 Trigger DML
Trigger DML melakukan eksekusi ketika ada user mencoba
melakukan modifikasi data yang behubungan dengan DML. Kejadian
(event) DML dalam hal ini yaitu statemen INSERT, UPDATE, dan
DELETE data pada sebuah tabel atau view. Namun demikian, trigger
tidak dapat dipakai dalam kejadian yang dihasilkan oleh statemen
SELECT. Trigger-trigger ini aktif ketika ada satu lebih valid event
diaktifkan, terlepas dari ada tidaknya baris data dalam tabel yang
terpengaruh (affected). Berikut ini merupakan sintaks umum pembuatan
trigger DML.
Trigger on an INSERT, UPDATE, or DELETE statement to a table
or view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name
ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method
specifier [ ; ] > }
<dml_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
Tabel 5.8: Keterangan sintaks Trigger DML
Argumen Deskripsi
[schema_name.]trigger_na
me
Mendeskripsikan nama skema dan trigger
DML.
{table|view} Nama tabel atau view dimana trigger
DML akan diterapkan.
<dml_trigger_option>[,..
.n]
Menentukan opsi trigger DML, termasuk
klausa ENCRYPTION dan EXECUTE AS.
{[INSERT][,][UPDATE][,][
DELETE]}
Opsi event untuk trigger DML. Untuk
menentukan pada event apakah (bisa
lebih dari satu) trigger DML dieksekusi.
[NOT FOR REPLICATION] Menentukan apakah trigger akan
dieksekusi saat proses replikasi pada
tabel yang bersangkutan terjadi.
{sql_statement[;][,...n]
| EXTERNAL NAME <method
specifier [;]>}
Perintah-perintah SQL yang akan
dieksekusi saat terjadi operasi DML.
5.8.1.1 Trigger untuk Logging
Contoh pertama trigger DML kali ini yaitu membuat
pencatatan (logging) terhadap aktifitas tabel “dbo.products”. Hasil
pencatatan ini nantinya disimpan ke dalam tabel “dbo.log_products”
dengan struktur sebagai berikut.
Gambar 5.49: Struktur tabel “dbo.log_products”
Selanjutnya, buat trigger DML dengan nama “logInsProduct”
dengan kode seperti berikut.
Gambar 5.50: Proses pembuatan trigger “logInsProducts”
Trigger “logInsProducts” ini akan terpicu (menjalankan aksi) jika
pada tabel “dbo.products” dikenai kejadian insert atau update. Untuk
menguji apakah trigger “logInsProducts” berjalan sebagaimana
mestinya, akan dibuat perintah SQL untuk menyisipkan (insert) data ke
dalam tabel “dbo.products” seperti berikut.
Gambar 5.51: Pengujian trigger “logInsProducts” untuk kejadian insert
Gambar 5.51 menunjukkan bahwa trigger “logInsProducts”
terpicu setelah kejadian insert dikenakan pada tabel “dbo.products”.
Bukti trigger “logInsProducts” telah terpicu yaitu berhasil
disisipkannya sebuah record ke dalam tabel “dbo.log_products”.
Selanjutnya, trigger “logInsProducts” akan diuji dengan kejadian update
dengan memberikan perintah SQL berikut ini.
Gambar 5.52: Pengujian trigger “logInsProducts” untuk kejadian update
Gambar 5.52 menunjukkan bahwa trigger “logInsProducts” juga
terpicu setelah kejadian update dikenakan pada tabel “dbo.products”.
Bukti trigger “logInsProducts” telah terpicu yaitu berhasil
disisipkannya lagi sebuah record dengan keterangan “Insert/update
data…” ke dalam tabel “dbo.log_products”.
Setelah membuat trigger DML untuk kejadian insert dan update,
sekarang akan diberikan contoh pembuatan trigger untuk kejadian
delete dengan nama “logDelProducts” seperti berikut ini.
Gambar 5.53: Proses pembuatan trigger “logDelProducts”
Trigger “logDelProducts” ini akan terpicu jika pada tabel
“dbo.products” dikenai kejadian delete. Untuk menguji apakah trigger
“logInsProducts” berjalan sebagaimana mestinya, akan dibuat perintah
SQL untuk menghapus (delete) data dari dalam tabel “dbo.products”
seperti berikut.
Gambar 5.54: Pengujian trigger “logDelProducts” untuk kejadian delete
Gambar 5.54 menunjukkan bahwa trigger “logDelProducts” juga
terpicu setelah kejadian delete dikenakan pada tabel “dbo.products”.
Bukti trigger “logDelProducts” telah terpicu yaitu berhasil
disisipkannya lagi sebuah record dengan keterangan “Delete data…” ke
dalam tabel “dbo.log_products”.
5.8.1.2 Trigger untuk Perbaruan Data
Selanjutnya akan diberikan contoh trigger DML dengan operasi
yang sedikit lebih kompleks dari sekadar logging, yaitu perbaruan data
antar tabel yang terrelasi. Contoh trigger kali ini diberi nama
“tambahStokProduk” pada kejadian insert data.
Gambar 5.55: Pembuatan trigger “tambahStokProduk”
Trigger “tambahStokProduk” ini dipicu saat ada proses sisip
(insert) data ke dalam tabel “dbo.supply”. Adapun aksi yang dijalankan
oleh trigger ini yaitu memperbarui data “stock” dan “price” yang ada
di tabel “dbo.products”. Data “stock” akan diperbarui dengan nilai stok
lama ditambah kuantitas pembelian baru (kolom “dbo.supply.qty”),
sedangkan data “price” diperbarui dengan nilai harga pembelian baru
ditambah 10%-nya. Untuk lebih jelasnya, perhatikan proses sisip data ke
dalam tabel “dbo.supply” berikut ini.
Gambar 5.56: Proses sisip data ke dalam tabel “dbo.supply”
Sekarang, perhatikan perubahan data yang terjadi pada tabel
“dbo.products” berikut ini.
Gambar 5.57 Hasil eksekusi trigger “tambahStokProduk”
(a) Tabel “dbo.supply” (b) Tabel “dbo.products” sebelum perubahan;
(c) Tabel “dbo.products” setelah perubahan.
Perhatikan perubahan yang terjadi pada tabel “dbo.products” di
atas. Untuk data produk dengan ID=31 (Astech Mouse), data stok (stock)
menjadi 105 (seratus lima) dan data harga (price) menjadi 68750 (enam
puluh delapan ribu tujuh ratus lima puluh). Data stok 105 didapatkan
dari 100 (stok lama) ditambah dengan 5 (kuantitas pembelian baru),
sedangkan 68750 didapat dari 62500 (harga baru) ditambah dengan
6250 (atau 10% dari harga baru ini ). Berikut ini disajikan contoh
terakhir untuk trigger DML, yaitu “ubahStokProduk”.
Gambar 5.58: Pembuatan trigger “ubahStokProduk”
Trigger “ubahStokProduk” ini akan dipicu saat terjadi proses
penghapusan (deleting) data produk tertentu pada tabel “dbo.supply”.
Aksi yang dilakukan trigger ini yaitu mengurangi stok yang ada di
dalam tabel “dbo.products” sebesar kuantitas data produk yang dihapus
pada tabel “dbo.supply”. Untuk lebih jelasnya, perhatikan proses hapus
data dari dalam tabel “dbo.supply” berikut ini.
Gambar 5.59: Proses hapus data pada tabel “dbo.supply”
Perhatikan perubahan yang terjadi pada tabel “dbo.products” di
atas. Untuk data produk dengan ID=31 (Astech Mouse), data stok (stock)
menjadi 100 (seratus lima). Data stok 100 didapatkan dari 105 (stok
lama) dikurangi dengan 5 (kuantitas data pada tabel “dbo.supply”).
5.8.2 Trigger DDL
Trigger DDL melakukan eksekusi dalam menanggapi berbagai
event DDL. Event-event yang tergolong DDL yaitu statemen CREATE,
ALTER, dan DROP, termasuk stored procedure bawaan sistem yang
melakukan operasi sejenis DDL. Berikut ini merupakan sintaks umum
pembuatan trigger DDL.
Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or
UPDATE STATISTICS statement (DDL Trigger)
CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method
specifier > [ ; ] }
<ddl_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
Di bawah ini diberikan contoh pembuatan trigger DDL dengan
“log” yang akan dipakai untuk melakukan pencatatan (log) terhadap
seluruh kejadian DDL (DDL event), seperti pembuatan (create),
perbaruan struktur (alter) dan penghapusan (drop) seluruh tabel yang
ada di dalam database “db_commerce”. Pertama, dibuat sebuah tabel
“ddl_log” untuk menyimpan pencatatan yang dihasilkan trigger “log”.
Selanjutnya, perhatikan kode SQL pembuatan trigger “log” berikut ini.
Gambar 5.60: Proses pembuatan trigger “log”
Untuk melihat hasil pencatatan yang dihasilkan trigger “log”,
berikut diberikan contoh kode SQL untuk membuat (create) dan
menghapus (drop) sebuah tabel dengan nama “TestTable” di dalam
database “db_commerce”.
Gambar 5.61: Proses pengujian (testing) trigger “log”
Pada Gambar 5.61 di atas menunjukkan bahwa seluruh event
DDL yang terjadi pada seluruh komponen database “db_commerce”,
baik berupa tabel atau view, maka trigger “log” akan terpicu dan
melakukan pencatatan sesuai event yang terjadi.
5.8.3 Trigger LOGON
Trigger LOGON melakukan eksekusi stored procedure (bawaan
sistem) dalam menanggapi event LOGON yang dibangkitkan ketika
sebuah sesi pengguna (user session) berhasil dibentuk dengan sebuah
instan dari SQL Server. Trigger LOGON aktif setelah fase otentikasi login
dalam tahap akhir, namun sebelum sesi pengguna benar-benar
terbentuk. Oleh karena itu, semua pesan yang dihasilkan oleh trigger
yang biasanya sampai ke pengguna, seperti pesan error dan pesan dari
statemen PRINT, dialihkan ke catatan kesalahan (error log) SQL Server.
Trigger LOGON tidak aktif jika otentikasi gagal.
Anda dapat memakai trigger LOGON untuk mengaudit dan
mengontrol sesi server, seperti penulusuran aktifitas login, membatasi
login ke SQL Server, atau pembatasan jumlah sesi untuk login tertentu.
Berikut ini merupakan sintaks umum pembuatan trigger LOGON.
Trigger on a LOGON event (Logon Trigger)
CREATE TRIGGER trigger_name
ON ALL SERVER
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR| AFTER } LOGON
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method
specifier > [ ; ] }
<logon_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
Untuk contoh kali ini akan dibuat sebuah trigger untuk
membatasi waktu login user tertentu. Batasan yang dimaksud yaitu
jam login, misalkan user tertentu, anggap saja “TestUser”, bisa login ke
SQL Server hanya pada pukul 10:00 WIB sampai dengan 18:00 WIB.
Pertama kali yang perlu dibuat yaitu membuat login (user)
baru yang akan dibatasi jam loginnya. Ada 2 cara untuk membuat login
baru, yaitu: dengan dengan mengetikkan baris perintah SQL langsung
melalui query editor yang tersedia atau memakai wizard melalui
aplikasi GUI. Berikut yaitu perintah SQL untuk membuat login baru
dengan nama “TestUser”.
USE [master]
GO
--Create the login on your servel called "TestUser"
CREATE LOGIN [TestUser] WITH PASSWORD=N'Admin2345'
,DEFAULT_DATABASE=[master]
,DEFAULT_LANGUAGE=[us_english]
,CHECK_EXPIRATION=OFF
,CHECK_POLICY=OFF
GO
Adapun dengan wizard melalui aplikasi GUI langkah-langkahnya
yaitu sebagai berikut.
1) Setelah berhasil masuk ke SQL Server, klik kanan submenu
Security » Logins, pilih New Login....
Gambar 5.62: Proses membuat login baru
2) Setelah muncul jendela Login – New, ketik “TestUser” pada
kolom Login name.
Gambar 5.63: Jendela Login - New
3) Pilih opsi SQL Server authentication dan tentukan kata sandinya
melalui kolom Password dan Confirm password, misalkan
“Admin2345” (tanpa tanda kutip).
4) Hilangkan tanda (uncheck) pada opsi Enforce password
expiration.
5) Tentukan nama default database untuk user “TestUser” melalui
kolom Default database, misalkan “master”.
6) Klik tombol [OK], jika tidak muncul pesan kesalahan, berarti
proses pembuatan login baru berhasil.
Langkah selanjutnya yaitu memutuskan koneksi dari SQL
Server dan mencoba login lagi memakai user baru yang telah
dibuat, yaitu: “TestUser”.
1) Klik tombol (disconnect) untuk memutuskan koneksi dengan
SQL Server.
2) Setelah muncul jendela Connect to Server, pilih nama server
melalui kolom Server name.
3) Pilih opsi SQL Server Authentication pada kolom
Authentication.
4) Pilih TestUser pada kolom Login dan masukkan password
“Admin2345” sebagaimana yang telah dibuat sebelumnya.
Gambar 5.64: Jendela Connect to Server
5) Mestinya Anda akan berhasil masuk ke SQL Server dan dibawa
ke halaman utama SSMS dengan bagian Object Explorer
menampilkan daftar database yang ada di dalamnya seperti
Gambar 5.65 berikut ini.
Gambar 5.65: Bagian Object Explorer pada halaman utama SSMS
Sekarang saatnya membuat trigger untuk membatasi jam
koneksi, misalkan diberi nama “connection_limit_trigger”, dengan kode
SQL seperti berikut ini.
Gambar 5.66: Proses pembuatan trigger “connection_limit_trigger”
Untuk mengujinya, putuskan koneksi SQL Server dan coba lagi
login memakai “TestUser” sebagaimana yang diilustrasikan pada
Gambar 5.64. Jika Anda melakukan login tidak di antara pukul 10:00WIB
dan 18:00WIB, maka akan muncul pesan kesalahan seperti berikut ini.
Gambar 5.67: Pesan kesalahan yang dihasilkan oleh
trigger “connection_limit_trigger”
Selanjutnya, Anda coba lagi login memakai user lain yang
tidak dibatasi jam loginnya, misal “sa”. Setelah berhasil masuk ke SQL
Server, coba akses menu Management yang ada pada Object Explorer,
kemudian klik catatan (log) terakhir yang ada dalam menu SQL Server
Log.
Gambar 5.68: Submenu SQL Server Log pada Object Explorer
Gambar 5.69 berikut ini menunjukkan catatan yang dihasilkan
oleh trigger “connection_limit_trigger”.
Gambar 5.69: Catatan yang dihasilkan oleh
trigger “connection_limit_trigger”
Perhatikan baris paling bawah pada Gambar 5.67, pesan yang
ditampilkan yaitu “Tidak diijinkan login dengan “TestUser” di luar jam
kerja...”, pesan ini sebagaimana yang telah didefinisikan saat pembuatan
trigger “connection_limit_trigger”.
Kesimpulan yang dapat diambil tentang trigger Logon yaitu
trigger Logon sangat berguna untuk melacak dan mengendalikan
aktivitas login SQL Server. Informasi yang ditangkap oleh trigger Logon
membantu kita mengidentifikasi dan mencegah akses yang tidak sah dari
SQL Server.
5.9 Backup Database
Biasanya backup database dilakukan sebagai tindakan antisipatif
agar aman dari kerusakan atau kehilangan data (termasuk fisik
servernya), baik yang diakibatkan oleh manusia (seperti: cracking,
pencurian, dan tindakan sabotase) maupun alam (seperti: banjir,
kebakaran, dan bencana alam lainnya). Backup database dapat
dilakukan secara langsung atau periodik. Berikut ini yaitu langkah-
langkah untuk melakukan backup database melalui SSMS.
1) Pada bagian Object Explorer, klik kanan nama database yang
akan di-backup, kemudian akses menu Tasks » Back Up....
Gambar 5.70: Menu Tasks » Back Up...
2) Setelah muncul jendela Back Up Database, tentukan nama
database yang akan di-backup, misal “db_commerce” pada
kolom Database dan pada kolom Backup type, pilih opsi “Full”
jika diinginkan backup keseluruhan.
Gambar 5.71: Jendela Back Up Database
3) Klik tombol [Add...] untuk menentukan nama file tujuan (hasil
backup) dan alamat (path) file hasil backup ini akan
disimpan.
4) Setelah muncul jendela Select Backup Destination, klik tombol
[...] (baca: browse) sampai muncul jendela Locate Database
Files, tentukan direktori penyimpanan (misal: “I:\backup-
commerce”) dan nama file hasil backup yang diinginkan (misal:
“commerce-05012014.bak”), klik tombol [OK].
Gambar 5.72: Jendela Select Back Up Destination
dan Locate Database Files
5) Setelah kembali ke jendela Select Backup Destination dan Back
Up Database (Gambar 5.71) klik tombol [OK]. Jika berhasil, maka
akan muncul pesan sukses seperti Gambar 5.73.
Gambar 5.73: Pesan sukses backup database
6) Gambar 5.74 berikut ini merupakan file hasil backup database
yang berekstensi *.bak.
Gambar 5.74: File hasil backup database
5.10 Restore Database
Restore database merupakan tindakan mengembalikan seluruh
komponen database melalui file hasil proses backup, tujuannya agar
konten database sama dengan data yang ada di dalam file hasil backup.
Berikut yaitu langkah melakukan restore database melalui SSMS.
1) Pada bagian Object Explorer, klik kanan nama database yang
akan di-backup, kemudian akses menu Restore Database....
Gambar 5.75: Menu Restore Database
2) Setelah muncul jendela Restore Database, pada bagian Source
to restore pilih opsi From device dan klik tombol telusur (tiga
titik).
Gambar 5.76: Jendela Restore Database
3) Pada jendela Specify Backup, klik tombol Add. Setelah muncul
jendela Locate Backup File, tentukan file backup yang akan di-
restore, klik tombol [OK]. Setelah kembali ke jendela Specify
Backup, klik tombol [OK].
4) Pada jendela Restore Database, pada bagian Destination to
restore, pilih “db_commerce” yang muncul pada kolom To
database.
Gambar 5.77: Bagian Destination for restore pada jendela Restore
Database
5) Jangan lupa beri tanda centang file backup pada bagian Select
the backup sets to restore, klik tombol [OK]. Jika berhasil, maka
akan muncul pesan sukses seperti Gambar 5.78.
Gambar 5.78: Pesan sukses restore database
5.11 Generate Skrip
Generate skrip dapat dikatakan sebagai proses backup dalam
format *.SQL, sehingga file hasil generate ini mudah dibaca dan
dipahami isinya karena berupa kumpulan perintah-perintah SQL.
Keuntungan lain dari proses ini yaitu dapat melakukan backup
berdasar komponen database tertentu, misalkan tabel, trigger, atau
stored procedure tertentu saja. Untuk lebih jelasnya, perhatikan langkah-
langkahnya berikut ini.
1) Pada bagian Object Explorer, klik kanan nama database yang
akan di-generate, kemudian akses menu Tasks » Generate
Scripts....
Gambar 5.79: Proses generate skrip
2) Setelah muncul jendela Generate and Publish Scripts (disingkat
GPS) - Introduction, klik tombol [Next].
3) Pada jendela GPS – Choose Objects, pilih objek database mana
saja yang ingin di-generate skripnya, kemudian klik tombol
[Next].
Gambar 5.80: Jendela GPS Introduction dan GPS Choose Objects
4) Pada jendela GPS – Set Scripting Options, pilih opsi Save to file.
Klik tombol [Advanced] untuk melakukan pengaturan tingkat
lanjut.
Gambar 5.81: Jendela GPS Set Scripting Options
5) Setelah muncul jendela Advanced Scripting Options, lakukan
pengaturan yang dianggap perlu, misalkan pengaturan untuk
opsi Type of data to script diset dengan Schema and data. Jika
selesai, klik tombol [OK].
Gambar 5.82: Jendela Advanced Scripting Options
6) Pada jendela GPS - Summary, langsung klik saja tombol [Next],
sampai muncul jendela GPS – Save or Publish Scripts klik tombol
[Finish].
Gambar 5.83: Jendela GPS – Summary dan GPS – Save and Publish
Scripts
7) Jika berhasil, maka file “scrrip.sql” akan terbentuk di dalam
direktori yang ditentukan.
Gambar 5.84: File hasil generate skrip
Demikian sedikit tentang administrasi database Ms. SQL Server, Anda
dapat mencari informasi dari internet atau media lain untuk membantu
Anda memperdalam bahasan materi pada bab ini.



0 Komentar