DDL (Data Definition Language) Pertemuan Minggu Ke-8
Kompetensi Khusus Mahasiswa mampu menggunakan perintah dan fungsi dasar SQL untuk membuat database menggunakan MySQL (C3)
Pengenalan SQL SQL sebagai bahasa database harus dapat memenuhi kebutuhan berikut ini: Membuat struktur database & tabel. Melakukan tugas manajemen data dasar seperti add, delete, & modify. Melakukan query rumit untuk merubah data mentah menjadi informasi berguna. Melakukan fungsi dasar dengan usaha seminimal mungkin dari user. Struktur perintah & sintaks harus mudah dipelajari. Harus portabel yaitu memenuhi standar dasar sehingga user tidak perlu mempelajari ulang dasar tersebut ketika berpindah dari 1 RDBMS ke yang lain.
Fungsi SQL terbagi atas 2 kategori utama: DDL (Data Definition Language) mencakup perintah untuk membuat objek database seperti tabel, indeks, & view, & juga perintah untuk mendefinisikan hak akses ke objek database tsb. DML (Data Manipulation Language) mencakup perintah untuk insert, update, delete, & retrieve data dalam tabel database. SQL adalah bahasa nonprosedural artinya user cukup memerintah apa yang harus dilakukan tanpa perlu khawatir bagaimana melakukannya. ANSI (American National Standards Institute) menentukan standar SQL yaitu SQL-2003. standar tsb juga diterima oleh ISO (International Organization for Standardization), konsorsium yang terdiri dari badan standar nasional di lebih dari 150 negara. Walaupun terdapat beberapa perbedaan dialek SQL pada beberapa vendor seperti Oracle, MSSQL, MySQL, DB2, Access, dll tetapi hanya perbedaan minor.
Perintah Definisi Data SQL COMMAND DESCRIPTION CREATE SCHEMA AUTHORIZATION Membuat skema database CREATE TABLE Membuat tabel baru dalam skema database user NOT NULL Kolom tidak boleh bernilai NULL UNIQUE Kolom tidak boleh memiliki nilai duplikat PRIMARY KEY Menentukan PK untuk tabel FOREIGN KEY Menentukan FK untuk tabel DEFAULT Menentukan nilai default untuk kolom (ketika tidak ada nilai yang diberikan) CHECK Memvalidasi data dalam atribut CREATE INDEX Membuat indeks untuk tabel CREATE VIEW Membuat subset dari baris & kolom dari satu atau lebih tabel
COMMAND DESCRIPTION ALTER TABLE Memodifikasi definisi tabel (menambah, mengubah, atau menghapus atribut atau constraint) CREATE TABLE AS Membuat tabel baru berdasarkan query dalam skema database user DROP TABLE Menghapus tabel & data DROP INDEX Menghapus indeks DROP VIEW Menghapus view
Membuat Database Sebelum menggunakan RDBMS baru, user harus menyelesaikan 2 tugas yaitu: Membuat struktur database Membuat tabel yang akan menampung data end-user Ketika membuat database baru, RDBMS secara otomatis membuat tabel kamus data yang menyimpan metadata & membuat administrator database. Jika menggunakan RDBMS perusahaan, user harus diotentikasi oleh RDBMS sebelum mulai membuat tabel. Otentikasi adalah proses yang digunakan DBMS untuk memverifikasi bahwa akses database hanya dilakukan oleh user yang terdaftar.
Skema Database Dalam lingkungan SQL, skema adalah kelompok objek database seperti tabel & indeks yang berhubungan satu sama lain. Biasanya, skema dimiliki oleh user atau aplikasi. Satu database dapat menampung beberapa skema yang dimiliki oleh user atau aplikasi yang berbeda. Skema berguna dalam mengelompokkan tabel berdasarkan tabel (fungsi) & memaksakan tingkat keamanan pertama dengan memperbolehkan tiap user hanya melihat tabel yang dimilikinya.
Berikut perintah SQL untuk membuat skema database: CREATE SCHEMA AUTHORIZATION {creator}; Jika pembuatnya adalah JONES, maka perintah berikut yang digunakan: CREATE SCHEMA AUTHORIZATION JONES; Perintah ini opsional untuk beberapa RDBMS.
Tipe Data Pemilihan tipe data biasanya ditentukan oleh sifat data & kegunaannya tetapi terkadang membutuhkan pertimbangan khusus. Selain itu, perhatikan juga kegunaan atribut untuk tujuan pengurutan & pengambilan data. Pada tabel berikut adalah tipe data umum yang didukung oleh kebanyakan RDBMS.
DATA TYPE FORMAT COMMENTS Numeric NUMBER (L, D) Deklarasi NUMBER (7, 2) menandakan bahwa angka akan disimpan dengan 2 desimal & memiliki panjang 7 digit, termasuk tanda & jumlah desimal (contoh, 12.32 atau -134.99). INTEGER Disingkat dengan INT. Integer adalah bilangan bulat, sehingga tidak dapat digunakan untuk menyimpan angka yang memiliki desimal. SMALLINT Seperti INTEGER tetapi terbatas pada nilai integer sampai 6 digit. Jika nilai integer relatif kecil, gunakan SMALLINT. DECIMAL (L, D) Seperti spesifikasi NUMBER, tetapi panjang penyimpanan adalah spesifikasi minimum. Artinya panjang yang lebih besar dapat diterima tetapi yang lebih kecil tidak. DECIMAL (9,2), DECIMAL (9), & DECIMAL semuanya diterima.
DATA TYPE FORMAT COMMENTS Character CHAR (L) Data karakter dengan panjang tetap sampai 255 karakter. Jika user menyimpan string yang lebih pendek dari nilai parameter CHAR, maka ruang sisanya tidak digunakan. Contoh, jika user menspesifikasi CHAR(25), string seperti Smith & Katzenjammer masing-masing disimpan sebagai 25 karakter. VARCHAR (L) or VARCHAR2(L) Data karakter dengan panjang bervariasi. Contoh, VARCHAR(25) untuk menyimpan karakter sampai 25 karakter. Akan tetapi, VARCHAR tidak akan meninggalkan ruang sisa. Oracle secara otomatis mengubah VARCHAR menjadi VARCHAR2. Date DATE Format tanggal: yyyy-mm-dd SQL juga mendukung beberapa tipe data lain, seperti TIME, TIMESTAMP, REAL, DOUBLE, & FLOAT, & interval seperti INTERVAL DAY TO HOUR. Banyak RDBMS juga memiliki tipe data lain, seperti LOGICAL, CURRENCY, AutoNumber (Access), & sequence (Oracle).
Membuat Struktur Tabel Berikut sintaks SQLnya: CREATE TABLE tablename ( column1 data type [constraint] [, column2 data type [constraint]] [, PRIMARY KEY (column1 [, column2])] [, FOREIGN KEY (column1 [, column2]) REFERENCES tablename] [, CONSTRAINT constraint]); Agar kode SQL mudah dibaca, kebanyakan programmer SQL menggunakan 1 baris per definisi kolom (atribut). Spasi digunakan untuk menambahkan karakteristik & constraint atribut.
Contoh sintaks SQL tabel vendor: CREATE TABLE VENDOR ( V_CODE INTEGER NOT NULL UNIQUE, V_NAME VARCHAR(35) NOT NULL, V_CONTACT VARCHAR(25) NOT NULL, V_AREACODE CHAR(3) NOT NULL, V_PHONE CHAR(8) NOT NULL, V_STATE CHAR(2) NOT NULL, PRIMARY KEY (V_CODE)); Dalam hubungan 1:M, sisi M selalu mereferensi ke sisi 1 sehingga tabel yang direferensi (di sisi 1) harus dibuat terlebih dahulu.
Contoh sintaks SQL tabel product: CREATE TABLE PRODUCT ( P_CODE VARCHAR(10) NOT NULL UNIQUE, P_DESCRIPT VARCHAR(35) NOT NULL, P_INDATE DATE NOT NULL, P_QOH SMALLINT NOT NULL, P_MIN SMALLINT NOT NULL, P_PRICE NUMBER(8,2) NOT NULL, P_DISCOUNT NUMBER(5,2) NOT NULL, V_CODE INTEGER, PRIMARY KEY (P_CODE), FOREIGN KEY (V_CODE) REFERENCES VENDOR ON UPDATE CASCADE);
Spesifikasi ON UPDATE CASCADE memastikan bahwa perubahan pada atribut V_CODE dari tabel VENDOR otomatis diaplikasikan ke semua referensi FK. Nama kolom tidak boleh menggunakan simbol matematika seperti +, -, dan /; gunakan underscore untuk memisahkan kata. Misalnya PER_NUM. Jangan gunakan reserved word. Reserved word adalah kata yang digunakan oleh SQL untuk melakukan fungsi tertentu.
Jika menggunakan composite PK, semua atribut PK dimasukkan ke dalam tanda kurung & dipisahkan dengan koma. Contoh: PRIMARY KEY (INV_NUMBER, LINE_NUMBER) Urutan komponen PK penting karena pengindeksan dimulai dengan atribut yang disebutkan pertama, kemudian diproses dengan atribut lain, dan seterusnya. Contohnya, line number akan diurutkan dalam tiap invoice number: INV_NUMBER LINE_NUMBER 1001 1 1001 2 1002 1 1003 1 1003 2
SQL Constraint Entity Integrity: melalui pemakaian PK Referential Integrity: melalui pemakaian FK Selain 2 constraint di atas, standar ANSI SQL juga mendefinisikan beberapa constraint sbb: NOT NULL memastikan kolom tidak menerima nilai null. UNIQUE memastikan semua nilai dalam kolom adalah unik. DEFAULT menempatkan nilai ke atribut ketika baris baru ditambahkan ke tabel & dibiarkan kosong. CHECK digunakan untuk memvalidasi data ketika nilai atribut dimasukkan apakah sesuai dengan kondisi yang ada. Perintah CREATE TABLE memperbolehkan user mendefinisikan CONSTRAINT dalam 2 posisi berbeda: Ketika membuat definisi kolom (dikenal dengan column constraint). Ketika menggunakan kata kunci CONSTRAINT (dikenal dengan table constraint).
Column constraint diaplikasikan hanya ke 1 kolom; table constraint diaplikasikan ke banyak kolom. Nilai DEFAULT hanya diaplikasikan ketika baris baru ditambahkan ke tabel dan tidak ada nilai yang diinput. Tidak berlaku ketika tabel diubah. Kondisi CHECK divalidasi ketika baris baru ditambahkan atau diubah & berlaku hanya pada atribut dalam tabel yang diperiksa. Jika user ingin memeriksa kondisi yang mencakup atribut dalam tabel lain, maka dapat menggunakan trigger. ON DELETE CASCADE direkomendasikan untuk entitas lemah untuk memastikan terhapusnya baris dalam entitas kuat secara otomatis memicu terhapusnya baris dalam entitas lemah yang bergantung padanya.
Indeks SQL Indeks digunakan untuk meningkatkan efisiensi pencarian & menghindari nilai kolom duplikat. Berikut sintaks SQL untuk membuat indeks: CREATE [UNIQUE] INDEX indexname ON tablename (column1 [, column2]) Penambahan UNIQUE digunakan untuk menghindari adanya duplikasi nilai khususnya ketika atribut indeks adalah kunci kandidat. Contoh: CREATE UNIQUE INDEX P_CODEX ON PRODUCT (P_CODE); Beberapa RDBMS secara otomatis membuat indeks unik pada atribut PK.
Praktik yang umum adalah membuat indeks pada field yang digunakan sebagai kunci pencarian, dalam operasi perbandingan dalam ekspresi kondisional, atau ketika menyusun baris. Dalam beberapa kasus, user juga dapat membuat indeks komposit, yaitu gabungan beberapa atribut yang digunakan sebagai indeks unik. Contoh: CREATE UNIQUE INDEX EMP_TESTDEX ON TEST (EMP_NUM, TEST_CODE, TEST_DATE); Untuk menghapus indeks, gunakan perintah DROP INDEX, contoh: DROP INDEX EMP_TESTDEX;
ALTER TABLE Digunakan untuk mengubah struktur tabel dengan mengubah karakteristik atribut & menambah kolom. Terdapat 3 perintah yang mengikuti perintah ALTER TABLE yaitu: ADD menambah kolom MODIFY mengubah karakteristik kolom DROP menghapus kolom dari tabel Kebanyakan RDBMS tidak mengizinkan user untuk menghapus kolom kecuali kolomnya kosong; karena dapat menyebabkan penghapusan data penting yang digunakan oleh tabel lain. Berikut sintaks untuk menambah atau mengubah kolom: ALTER TABLE tablename {ADD | MODIFY} (columnname datatype [ {ADD | MODIFY} columname datatype ]);
Perintah ALTER TABLE juga dapat digunakan untuk menambah batasan tabel, berikut sintaksnya: ALTER TABLE tablename ADD CONSTRAINT [ ADD constraint ]; Perintah ALTER TABLE juga dapat digunakan untuk menghapus kolom atau batasan tabel, berikut sintaksnya: DROP { PRIMARY KEY | COLUMN columnname | CONSTRAINT constraintname };
Mengubah Tipe Data Kolom Contoh mengubah V_CODE dalam tabel PRODUCT yang bertipe integer menjadi karakter: ALTER TABLE PRODUCT MODIFY (V_CODE CHAR(5)); Beberapa RDBMS, seperti Oracle, tidak mengizinkan user untuk mengubah tipe data kecuali kolomnya kosong.
Mengubah Karakteristik Data Kolom Jika kolom sudah berisi data, user dapat mengubah karakteristik kolom jika perubahan tersebut tidak mengubah tipe data. Contoh mengubah panjang kolom P_PRICE menjadi 9 digit: ALTER TABLE PRODUCT MODIFY (P_PRICE DECIMAL(9,2));
Menambah Kolom User dapat mengubah tabel yang sudah ada dengan menambah satu atau lebih kolom. Contoh menambah kolom P_SALECODE ke tabel PRODUCT: ALTER TABLE PRODUCT ADD (P_SALECODE CHAR(1)); Ketika menambahkan kolom, jangan menuliskan NOT NULL untuk kolom baru karena akan menyebabkan pesan kesalahan. Jika user menambah kolom baru ke tabel yang telah memiliki baris, maka kolom baru akan diberikan nilai NULL, sehingga tidak mungkin menambahkan NOT NULL untuk kolom baru ini. NOT NULL dapat ditambahkan kemudian jika semua baris dari kolom baru ini sudah terisi.
Menghapus Kolom Contoh menghapus atribut V_ORDER dari tabel VENDOR: ALTER TABLE VENDOR DROP COLUMN V_ORDER; Beberapa RDBMS melarang penghapusan atribut terutama atribut yang menjadi FK, & atribut satu-satunya dalam tabel.
Menambah PK & FK Berikut perintah untuk menambah PK di tabel: ALTER TABLE PART ADD PRIMARY KEY (PART_CODE); Berikut perintah untuk menambah FK: ADD FOREIGN KEY (V_CODE) REFERENCES VENDOR;
Review Materi Mahasiswa mempraktikkan DDL di MySQL.