Sebuah Pengantar SQL bagi Pemula II

Pada pembahasan sebelumnya kita telah membahas bagaimana menggunakan fungsi pengambilan data dalam SQL melalui steatment SELECT dan sekedar mengenalkan bagaimana membuat/ mendifinisikan suatu tabel. Menjadi tidak lengkap jika kita tidak lebih lanjut membahas bagaimanan kita dapat menrepresentasikan suatu objek dari analisis query kita ke dalam tabel, oleh karenanya kita akan coba saat ini untuk membahas bagaimanan suatu tabel dibuat, dimodifikasi maupun dibuang yang termasuk ke dalam pembahasan DDL (Data Definition Language). Dalam pembahasan ini kita akan menggunakan Oracle sebagai tools-nya.

Membuat Tabel

Tabel memiliki beberapa komponen penyusunnya, yaitu kolom dan baris. Baris menyatakan suatu record dari informasi tertentu dalam tabel dan kolom menyatakan suatu atribut/ karakteristik tertentu yang dimiliki oleh tabel. Setiap kolom memiliki tipe data tertentu. Tipe data ini merupakan batasan untuk masukan yang terima oleh suatu kolom. Adapun tipe data yang sering digunakan ialah:

  • CHAR(n), untuk karakter.
  • VARCHAR(n), untuk variabel karakter.
  • VARCHAR2(n), seperti varchar namun sampai 2000 karakter.
  • LONG, untuk data biner maximum 2GB dalam format internal oracle.
  • LONG RAW, untuk data biner maximum 2GB format raw.
  • DATE, untuk penanggalan.
  • NUMBER(n,p), untuk angka sebanyak n digit dengan p digit dibelakang koma.

Dibawah ini adalah format penulisan untuk membuat sebuah tabel:

CREATE TABLE namatabel (

kolom1 tipedata(digit),

kolom2 tipedata(digit),

kolom3 tipedata(digit),

kolomn tipedata(digit),

);

Untuk membiasakan, kita coba membuat sebuah tabel berdasarkan struktrur tabel berikut:

Tabel Guru

No

Nama Field

Tipe Data

Panjang

Deskripsi

1

nip

varchar

5

nomor induk pegawai

2

nama

varchar

15

nama guru bidang studi

3

alamat

varchar

50

alamat guru bidang studi

Sintaks:

CREATE TABLE guru (

nip char(5),

nama varchar(15),

alamat varchar (15)

);

Dan untuk struktur tabel yang berikut:

Tabel Mata Pelajaran

No

Nama Field

Tipe Data

Panjang

Deskripsi

1

kd_mp

varchar

5

kode mata pelajaran

2

nama_mp

varchar

15

nama mata pelajaran

CREATE TABLE mat_pel (

kode_mp char (5),

nama_mp varchar (15)

);

Setiap tabel agar memiliki keunikan informasi per recordnya, maka harus ada 1 kolom yang memiliki primary key. Agar struktur tabel diatas memiliki primary key maka setelah definisi kolom terakhir di tambahkan sintak dengan format berikut:

CONSTRAINT namaconstraint PRIMARY KEY (kolom_yang_dianggap_primary_key)

Sehingga masing-masing tabel akan memiliki sintaks berikut:

CREATE TABLE guru (

nip char(5),

nama varchar(15),

alamat varchar (15),

CONSTRAINT pk_guru PRIMARY KEY (nip)

);

CREATE TABLE mat_pel (

kode_mp char (5),

nama_mp varchar (15),

CONSTRAINT pk_matpel PRIMARY KEY (kode_mp)

);

Keberadaan tabel guru dan mata pelajaran memungkinkan terlahirnya suatu bentuk relasi yang dapat diimplementasikan ke dalam bentuk tabel.

Tabel guru bidang studi menunjukan bahwa masing-masing dari setiap guru dapat memiliki satu atau lebih mata pelajaran yang diembannya.

Tabel ini merupakan tabel transaksi yaitu tabel yang lahir dari dua tabel master (guru dan mata pelajaran) atau lebih saling berelasi. Secara lojik tabel transaksi tidak memiliki primary key, setiap kolom yang ada dalam tabel ini berasal dari tabel master yang menyebabkannya. Kolom yang berasal dari primary key tabel master disebut pula dengan foreign key artinya bahwa tabel transaksi meminjam tautan terhadap primary key yang dimiliki tabel master, tabel transaksi dapat pula memiliki atribut lain yang memang perlu dimilikinya selain foreign key. Secara fisik tabel transaksi tetap di berikan primary key setidaknya berupa id, hal ini perlu untuk memudahkan teknik pengembangan kedepan.

Adapun format penulisan foreign key ialah sebagai berikut :

CONSTRAINT namaconstraint FOREIGN KEY (kolom_yang_dianggap_foreign_key) REFERENCES nama_tabel_referensi (kolom_yang_dianggap_referensi) [ON DELETE CASCADE]

Setiap data yang saling berlasi jika di hapus atau ditambah harus dilakukan secara sistematis-terintegrasi, hal ini penting untuk menghindari adanya redudansi data. Contoh untuk tabel guru dan guru bidang studi, mana mungkin ada guru bidang studi dengan nip dan nama tertentu yang memegang suatu mata pelajaran jikalau data guru tersebut tidak pernah ada dalam catatan tabel guru.

Untuk mengisi tabel guru bidang studi dengan data guru baru, maka sebelumnya data guru baru tersebut sudah terisikan ke dalam tabel guru (terurut maju), begitupun untuk mendelete data suatu guru tidak bisa langsung dilakukan di dalam tabel guru, hal ini karena adanya tabel lain yang mereferensinya, jadi hal yang perlu dilakukan terlebih dahulu ialah mendelete data guru yang bersangkutan di dalam tabel yang mereferensinya, misalnya di dalam tabel guru bidang studi yang ber nip = xxxxxx di delete dan setelah itu baru mendelete yang di tabel guru untuk guru yang ber nip = xxxxxx (terurut ke belakang).

Seperti yang dapat kita lihat diatas, format penulisan foreign key memiliki atribut optional ON DELETE CASCADE. Atribut ini berfungsi menangani penghapusan data untuk kasus diatas secara otomatis, dengan menggunakan atribut ini maka pengisian data tetap dilakukan terurut maju, hal ini logis mengingat kita tidak mungkin mengisi suatu data yang harus mereferensikan dirinya terhadap data yang lain di tabel master jikalau data tersebut tidak ada dalam tabel master.

Namun untuk mendelete data yang ada, hal pertama yang dapat terjadi dengan menggunakan ON DELETE CASCADE ini ialah bahwa jika kita menghapus data pada tabel master maka data yang ada di tabel transaksi yang mereferensikannya (memiliki foreign key terhadap primary key tabel master) akan ikut terhapus. Hal ini tidak berlaku sebaliknya, yaitu jika kita menghapus data pada tabel transaksi maka hal ini tidak akan mempengaruhi data yang direferensikan oleh tabel tersebut dalam tabel master (tidak ikut terhapus, tetap ada).

Keguanaan ON DELETE CASCADE akan lebih terlihat jika kita sudah membahas bagaimana menipulasikan suatu data dalam tabel, yaitu dengan INSERT dan DELETE suatu data dari tabel. Hal ini akan kita coba bahas pada pembahasan yang lain.

Tabel Guru Bidang Studi

No

Nama Field

Tipe Data

Panjang

Deskripsi

1

nip

varchar

5

nomor induk pegawai

3

kd_mp

varchar

5

kode mata pelajaran yang di ajarakanya

Sintaks:

CREATE TABLE guru_bs (

id number(3),

nip char(5),

kode_mp char(5),

CONSTRAINT pk_gbs PRIMARY KEY (id),

CONSTRAINT fk_gbs1 FOREIGN KEY (nip) REFERENCES guru (nip) ON DELETE CASCADE,

CONSTRAINT fk_gbs2 FOREIGN KEY (kode_mp) REFERENCES mat_pel (kode_mp) ON DELETE CASCADE

);

Sebenarnya untuk atiribut kolom, bukan hanya dimiliki oleh kolom yang di jadikan foreign key saja. Seluruh kolom yang di definisikan dapat diberikan tambahan atribut tertentu, misal untuk kolom yang tidak boleh NULL (kosong) maka di beri atribut NOT NULL, kolom yang hanya memiliki data yang unik dengan atribut UNIQUE.

nip CHAR(5) NOT NULL UNIQUE,

kode_mp VARCHAR(30) NOT NULL UNIQUE,

artinya bahwa nip dan kode mata pelajaran harus lah ada dan bersifat unik.

nip char(5) NOT NULL UNIQUE,

nama varchar(15) NOT NULL UNIQUE,

alamat varchar (25) NOT NULL,

telepon varchar (15) UNIQUE

artinya bahwa nip dan nama haruslah ada dan unik namun untuk alamat tetap wajib ada tapi boleh sama, karena satu rumah dapat dihuni oleh beberapa orang. Untuk telepon, karena tidak setiap orang mempunyai maka boleh tidak ada namun jika ada haruslah unik.

Untuk kolom yang dijadikan primary key, maka secara otomatis kolom tersebut dianggap NOT NULL dan UNIQUE, karena primary key tidak boleh kosong dan sama.

Memodifikasi Tabel

Modifikasi tabel memiliki arti melakukan perubahan pada struktur tabel, misal: menambah kolom, menghapus kolom, menambahkan index, me-rename tabel, memperbesar space kolom dsb.

Sintaks yang digunakan adalah

ALTER TABLE namatable ADD|MODIFY namakolom tipekolom(digit);

ALTER TABLE namatable RENAME namatabelyangbaru

Contoh: diinginkan untuk menambahkan kolom telepon pada tabel guru dengan tipe data variabel karakter maksimum 15 karakter, maka:

ALTER TABLE guru ADD telepon varchar(15);

Untuk mengubah kolom yang sudah ada, misal nama guru yang semula maksimum hanya 15, ingin diubah menjadi 35, maka:

ALTER TABLE guru MODIFY nama varchar(35);

Atau ingin mengubah nama tabel,

ALTER TABLE guru RENAME guru_data_master;

Menghapus Tabel

Jika sebuah tabel secara keseluruhan tidak diperlukan lagi (bukan sekedar data-data yang ada di dalamnya), atau bermasalah maka besar kemungkinan tabel tersebut dihapus. Untuk menghapus tabel digunakan sintaks:

DROP TABLE namatabel

Perintah diatas ialah untuk menghapus tabel, misal menghapus tabel guru bidang studi.

DROP TABLE guru_bs;

Untuk dapat menghapus tabel master sedangkan sebelumnya sudah ada tabel yang mereferensikannya, maka mungkin akan ada sedikit kesulitan dalam penghapusan tabel tersebut. Hal ini terjadi karena system dalam RDBMS ORA menjaga dari adanya redudansi objek (tabel). System akan menjadi cacat jika ada suatu tabel yang mereferensikan dirinya terhadap tabel yang lain namun tabel yang direferensikan tersebut tidak ada ?.

Misal untuk dapat menghapus tabel guru maka yang pertama kali kita hapus ialah tabel guru bidang studi terlebih dahulu baru tabel guru:

DROP TABLE guru_bs;

DROP TABEL guru;

Selain cara diatas, kita dapat menggunakan atribut optional CASCADE CONSTRAINT pada perintah DROP TABLE. Sebagaimana fungsi dari ON DELETE CASCADE pada penghapusan data yang berelasi pada tabel, CASCADE CONSTRAINT dapat membantu kita menghapus tabel yang saling berelasi.

DROP TABLE namatabel [CASCADE CONSTRAINT]

Berbeda dengan ON DELETE CASCADE, dimana fungsi ini memanfaatkan relation dari kedua data untuk dapat menghapus data dari tabel master dengan tabel yang merujuknya secara serentak. CASCADE CONSTRAINT pada penghapusan tabel justru berfungsi sebaliknya, yaitu menganggap tidak adanya suatu relasi yang terjalin diantara kedua tabel sebelum dilakukannya eksekusi penghapusan tabel. Contoh :

DROP TABLE guru CASCADE CONSTRAINT;

DROP TABEL guru_bs CASCADE CONSTRAINT;

Tabel guru sebagai tabel master yang dirujuk oleh tabel guru bidang studi dapat kita hapus tanpa menghiraukan ada atau tidaknya suatu tabel yang merujuk.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: