2014
2
Basis Data Pusat Bahan Ajar dan eLearningSasaran Dalam DDL
Tipe data yang didukung oleh SQL standard.
Kegunaan dari integrity enhancement feature pada SQL. Bagaimana menetapkanbatasan integritas menggunakan SQL.
Bagaimana menggunakan integrity enhancement feature dalam perintah CREATE dan ALTER TABLE.
Integrity Enhancement Feature
Data yang dibutuhkan (Required data) Batasan domain (Domain constraints) Integritas entitas (Entity integrity)
Integritas referensial (Referential integrity) Batasan enterprise (Enterprise constraints)
IEF-Required Data
Beberapa kolom field harus memiliki nilai yang pasti (tidak diperkenankan bernilai NULL).
NULL digunakan untuk merepresentasikan data yang tidak ada/ tidak tersedia, hilang atau tidak disertakan.
Standar ISO menetapkan keyword NOT NULL untuk mengatasi hal tersebut. Contoh format deklarasi :
2014
3
Basis Data Pusat Bahan Ajar dan eLearningTim Dosen http://www.mercubuana.ac.id
IEF-Domain Constraints
Setiap kolom mempunyai domain, atau dengan kata lain himpunan dari nilai-nilai yang benar.
Misalkan dalam tabel Staff terdapat kolom Sex yang berisi nilai karakter tunggal ‘M’ atau ‘F’, maka dapat dideklarasikan CHECK (Search Condition);
sehingga :
sex CHAR NOT NULL
CHECK (sex IN (‘M’, ‘F’));
atau dieklarasikan secara eksplisit :
CREATE DOMAIN DomainName [AS] dataType [DEFAULT defaultOption]
[CHECK (searchCondition)]
Sehingga :
CREATE DOMAIN SexType AS CHAR CHECK (VALUE IN (‘M’, ‘F’)); sex SexType NOT NULL
searchCondition dapat mengandung table lookup, misalkan membuat domain Branchnumber untuk memastikan nilai yang akan dimasukan sesuai dengan branch number yang sudah ada pada tabel Branch :
CREATE DOMAIN BranchNo AS CHAR(4) CHECK (VALUE IN (SELECT branchNo
2014
4
Basis Data Pusat Bahan Ajar dan eLearning Domain dapat dihapuskan dengan menggunakan perintah DROP DOMAIN, jika ditetapkan RESTRICT kemudian domain digunakan dalam tabel, view dan definisi penegasan (assertion definition), maka penghapusan domain akan ditolak. Jika ditetapkan CASCADE, maka kolom tabel yang menggunakan domain tersebut secara otomatis diganti dengan nilai default yang ada.
DROP DOMAIN DomainName [RESTRICT | CASCADE]
IEF - Entity Integrity
Primary key dari suatu tabel harus berisi nilai yang unik, dan non-null untuk setiap barisnya.
Standard ISO menyediakan clause FOREIGN KEY pada perintah CREATE dan ALTER TABLE :
PRIMARY KEY(staffNo)
PRIMARY KEY(clientNo, propertyNo)
->(Jika primary Key terdeiri dari beberapa kolom)
Hanya dapat mempunyai 1 clause PRIMARY KEY untuk setiap table, tetapi masih dapat memastikan pemasukkan nilai yang unik untuk beberapa alternate key dengan menggunakan keyword UNIQUE:
UNIQUE(telNo)
IEF - Referential Integrity
Foreign Key adalah kolom atau himpunan kolom yang menghubungkan setiap baris dalam child table yang berisi Foreign Key dengan baris dari parent table yang berisi Primary Key yang sesuai/match.
Integritas referential berarti, jika FK berisi suatu nilai, maka nilai tersebut harus mengacu kesuatu baris dalam parent table.
2014
5
Basis Data Pusat Bahan Ajar dan eLearningTim Dosen http://www.mercubuana.ac.id
Standard ISO menyediakan pendefinisian untuk FK dengan clause FOREIGN KEY dalam CREATE dan ALTER TABLE:
FOREIGN KEY(branchNo) REFERENCES Branch
Operasi INSERT/UPDATE yang berusaha untuk membuat nilai FK dalam child table tanpa nilai candidate key yang sesuai dalam parent table.
Aksi yang dilakukan yang berusaha untuk merubah / menghapus (update/delete) nilai candidate key dalam parent table yang memiliki baris yang sesuai dalam child table tergantung pada referential action yang ditetapkan dengan subclause ON UPDATE dan ON DELETE. Terdapat 4 pilihan aksi, yaitu :
o CASCADE, menghapus baris dari parent table dan secara otomatis menghapus baris yang sesuai dalam child table, jika baris yang dihapus tadi merupakan candidate key yang digunakan sebagai foreign key pada tabel lainnya, maka aturan foreign key untuk tabel ini dihilangkan.
o SET NULL, menghapus baris pada parent table dan menetapkan nilai foreign key dalam child table menjadi NULL. Berlaku jika kolom foreign key mempunyai qualifier NOT NULL.
o SET DEFAULT, menghapus baris dari parent table dan menetapkan setiap komponen foreign key dari child table menjadi defaultyang telah ditetapkan. Berlaku jika kolom foreign key memliki nilai DEFAULT.
o NO ACTION, menolak operasi penghapusan dari parent table. Merupakan default jika aturan ON DELETE dihilangkan
Contoh 1 :
Pada tabel PropertyForRent, StaffNo merupakan foreign key yang mengacu ke tabel Staff. Untuk menetapkan aturan penghapusan, jika record staff dihapus dari tabel Staff, maka nilai StaffNo yang ada pada PropertyForRent akan diganti menjadi NULL. Sehingga dapat dituliskan :
FOREIGN KEY (staffNo) REFERENCES Staff ON DELETE SET NULL
2014
6
Basis Data Pusat Bahan Ajar dan eLearningOwnerNo dalam tabel PropertyForRent merupakan foreign key yang mengacu ke tabel PrivateOwner. Untuk mendefinisikan aturan peng-update-an, jika OwnerNo dalam PrivateOwner di-update, maka kolom yang terkait dalam tabel PropertyForRent akan diganti dengan nilai baru, sehingga dapat dituliskan :
FOREIGN KEY (ownerNo) REFERENCES Owner ON UPDATE CASCADE
IEF - Enterprise Constraints
Standard ISO memungkinkan untuk menetapkan pendefinisian enterprise constraint dengan menggunakan clause CHECK/UNIQUE dalam CREATE dan ALTER TABLE juga CREATE ASSERTION.
Format pendeklarasian :
CREATE ASSERTION AssertionName CHECK (searchCondition)
Contoh : Untuk mendefinisikan enterprise constraint yang menegaskan agar anggota staff tidak mengatur lebih dari 100 property pada waktu yang sama :
CREATE ASSERTION StaffNotHandlingTooMuch
CHECK (NOTEXISTS (SELECT staffNo FROM PropertyForRent
GROUP BY staffNo
Data Definition
SQL DDL memungkinkan objek database seperti schema, domain, table, view, dan index untuk dibuat dan dihapuskan.
Perintah-perintah SQL DDL yang utama adalah : o CREATE SCHEMA o DROP SCHEMA o CREATE/ALTER DOMAIN o DROP DOMAIN o CREATE/ALTER TABLE o DROP TABLE o CREATE VIEW o DROP VIEW
Beberapa DBMS juga menyediakan : o CREATE INDEX
o DROP INDEX
Relasi-relasi dan objek lain dari suatu database berada dalam sebuah environment. Setiap environment mengandung saru atau lebih catalog, dan setiap catalog terdiri dari
sekumpulan/himpunan skema.
Skema adalah suatu himpunan bernama yang terdiri dari oobjek-objek database yang saling berhubungan.
Objek dalam sebuah skema dapat berupa table, view, domain, assertion, collation, translation, dan himpunan karakter. Seluruhnya memiliki owner yang sama.
Membuat Skema (CREATE SCHEMA)
Perintah untuk mendefinisikan skema : CREATE SCHEMA [Name |
AUTHORIZATION CreatorId ]
Perintah untuk menghapus skema :
DROP SCHEMA Name [RESTRICT | CASCADE ]
Jika ditetapkan RESTRICT (default), maka skema harus kosong atau operasi akan digagalkan. Jika ditetapkan CASCADE, maka operasi berjalan berurut menghapus
2014
8
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
seluruh objek yang terkait dengan skema yang telah didefinisikan sebelumnya. Jika terjadi kegagalan operasi, maka DROP SCHEMA akan gagal juga.
Membuat table (CREATE TABLE)
Membuat tabel dasar digunakan format sbb : CREATE TABLE TableName
{(colName dataType [NOT NULL] [UNIQUE] [DEFAULT defaultOption]
[CHECK searchCondition] [,...]} [PRIMARY KEY (listOfColumns),] {[UNIQUE (listOfColumns),] […,]} {[FOREIGN KEY (listOfFKColumns)
REFERENCES ParentTableName [(listOfCKColumns)], [MATCH {PARTIAL|FULL}]
[ON UPDATE referentialAction] [ON DELETE referentialAction ]] [,…]} {[CHECK (searchCondition)] [,…] })
Membuat tabel dengan satu atau lebih kolom dengan tipe data tertentu.
Dengan NOT NULL, sistem akan menolak setia[ usaha untuk memasukan nilai NULL kedalam kolom.
Dapat menspesifikasikan nilai DEFAULT untuk kolom. Primary key harus selalu ditetapkan NOT NULL.
Clause FOREIGN KEY menetapkan FK bersama dengan aksi referensial.
Contoh - CREATE TABLE
2014
9
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
CHECK (VALUE IN (SELECT ownerNo FROM PrivateOwner));
CREATE DOMAIN StaffNumber AS VARCHAR(5)
CHECK (VALUE IN (SELECT staffNo FROM Staff));
CREATE DOMAIN BranchNumber AS VARCHAR(5)
CHECK (VALUE IN (SELECT branchNo FROM Branch));
CREATE DOMAIN PropertyNumber AS VARCHAR(5);
CREATE DOMAIN Street AS VARCHAR(25);
CREATE DOMAIN City AS VARCHAR(15); CREATE DOMAIN PostCode AS VARCHAR(8);
CREATE DOMAIN PropertyType AS VARCHAR(1); CHECK (VALUE IN (‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ’M’, ‘S’));
CREATE DOMAIN PropertyRooms AS SMALLINT; CHECK(VALUE BETWEEN 1 AND 15);
2014
10
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
CHECK(VALUE BETWEEN 0 AND 9999.99);
CREATE TABLE PropertyForRent (
propertyNo PropertyNumber NOT NULL,
street Street NOT NULL,
city City NOT NULL,
postcode PostCode
type PropertyType NOT NULL DEFAULT 4, rooms PropertyRooms NOT NULL DEFAULT 4, rent PropertyRent NOT NULL, DEFAULT 600, ownerNo OwnerNumber NOT NULL,
staffNo StaffNumber
Constraint StaffNotHandlingTooMuch
CHECK (NOT EXIST( SELECT staffNo FROM PropertyForRent GROUP BY staffNo
HAVING COUNT(*) > 100)), branchNo BranchNumber NOT NULL,
PRIMARY KEY (propertyNo),
FOREIGN KEY (staffNo) REFERENCES Staff
ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (ownerNo) REFERENCES PrivateOwner
2014
11
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
ON DELETE NO ACTION ON UPDATE CASCADE, FOREIGN KEY (branchNo) REFERENCES Branch
ON DELETE NO ACTION ON UPDATE CASCADE);
Nilai default ‘F’ untuk ‘Flat’ ditetapkan untuk tipe property kolom Type. Batasan untuk kolom nomor staff ditetapkan untuk memastikan staff tidak menangani property lebih dari 100 unit. Primary key yang digunakan adalah PropertyNo.
StaffNo merupakan FK yang mengacu kepada tabel Staff, aturan penghapusan telah ditetapkan yaitu jika record dari tabel Staff dihapus, maka nilai yang terkait dengan kolom staff pada tabel PropertyForRent akan diisi dengan NULL. Untuk aturan peng-update-an, jika staffNo dalam tabel staff diupdate, maka nilai yang terkait dalam kolom staffNo pada tabel PropertyForRent akan di-update menjadi nilai yang baru.
OwnerNo merupakan FK yang mengacu pada tabel PrivateOwner. Aturan penghapusan NO ACTION berfungsi untuk mencegah penghapusan pada tabel PrivateOwner jika terdapat nilai OwnerNo yang sesuai dalam tabel PropertyForent. Untuk aturan peng-update-an, jika OwnerNo di-update, maka nilai yang terkait dalam kolom OwnerNo pada tabel PropertyForRent akan di-update menjadi nilai yang baru.
Merubah Table (ALTER TABLE)
Menambahkan kolom pada tabel Menghapus kolom dari tabel Menambahkan batasan kolom Menghapus batasan tabel Menetapkan default untuk kolom Menghapus default dari kolom
2014
12
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
Contoh - ALTER TABLE
Ubah tabel Staff dengan menghapus default ‘Assistant’ untuk kolom position dan tetapkan default untuk kolom sex menjadi (‘F’).
ALTER TABLE Staff
ALTER position DROP DEFAULT; ALTER TABLE Staff
ALTER sex SET DEFAULT ‘F’;
Contoh - ALTER TABLE
Hapus batasan/constraint dari tabel PropertyForRent yang menetapkan bahwa tidak diperbolehkan menangani lebih dari 100 unit properti pada saat yang sama. Tambahkan kolom baru untuk tabel Client.
ALTER TABLE PropertyForRent
DROP CONSTRAINT StaffNotHandlingTooMuch; ALTER TABLE Client
ADD prefNoRooms PRooms;
Menghapus Tabel (DROP TABLE)
Format penulisan : DROP TABLE
2014
13
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
Jika ditetapkan RESTRICT, maka operasi penghapusan akan ditolak jika terdapat objek lain yang terkait dengan objek yang akan dihapus. Sedangkan CASCADE, operasi penghapusan akan dilaksanakan dan seluruh objek terkait akan dihapus juga.
Contoh :
Hapus sebuah tabel dan seluruh baris didalamnya DROP TABLE PropertyForRent;
Latihan
1. MEMBUAT TABEL Buatlah table dengan struktur sebagai berikut di dalam database TB_STAFFField Name Data type Field Size Keterangan
IDSTAFF Varchar2 5 Primary Key
SNAMA Varchar2 30
SGAJI Numeric 9,2
TB_DIVISI
Field Name Data Type Field Size Keterangan
IDDIVISI Numeric 2 Primary Key
2014
14
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
2. MENAMPILKAN STRUKTUR TABEL YANG SUDAH ADA Gunakan perintah DESCRIBE 3. MENGINSERT DATA 4. MEMODIFIKASI STRUKTUR DATA Tambahkan field berikut sesuai dengan table yang sudah ditentukan dan definisikan constraintnya. TB_STAFF
IDSTAFF SNAMA SGAJI
00011 YOLANDA TANTYA 5540000 00013 ARIEF RAHMAN 870000 00015 TUBAGUS ALDI 2540000 00017 ZIDAN 4540000 00019 HAFIRA AINI 1970000 00021 HALIZA 780000 00031 FAISAL RAFIF 5400000 00012 AQILA RASIYAH 7500000 00023 ALFATH MUBINAN 2300000 00014 SYARIFAH IZNA 1600000 TB_DIVISI IDDIVISI DNAMA 10 PRODUKSI 20 KEUANGAN 30 PERSONALIA 40 HUMAS 50 PENJUALAN 60 IT
2014
15
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
5. Masukkan data baru untuk field baru TB_STAFF
Field Name Data Type Field Size Keterangan
SDIVISI Numeric 5 Foreign key (IDDIVISI)
JENKEL Varchar2 9
TMPLHR Varchar2 25
TGLLHR Date
TB_DIVISI
Field Name Data Type Field Size Keterangan
IDMANAGER Numeric 5 Foreign key (IDSTAFF)
TB_STAFF
IDSTAFF SNAMA SGAJI JENKEL TMPLHR TGLLHR SDIVISI
00011 YOLANDA TANTYA 5540000 PEREMPUAN JAKARTA 12‐12‐1978 50
00013 ARIEF RAHMAN 870000 LAKI‐LAKI MEDAN 23‐04‐1965 20
00015 TUBAGUS ALDI 2540000 LAKI‐LAKI JAKARTA 03‐09‐1977 40
00017 ZIDAN 4540000 LAKI‐LAKI BANDUNG 09‐10‐1989 70
00019 HAFIRA AINI 1970000 PEREMPUAN SURABAYA 22‐10‐1987 40
00021 HALIZA 780000 PEREMPUAN BOGOR 08‐08‐1988 20
2014
16
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
6. Tampilkan hasil masing‐masing tabel dengan data setelah disisipkan data baru 7. Buatlah perintah‐perintah SQL untuk kebutuhan berikut dan tampilkan hasilnya. a. Tampilkan nama dan gaji dari pegawai‐pegawai divisi tertentu. b. Tampilkan nama dan gaji dari para manajer divisi. c. Tampilkan jumlah pegawai di masing‐masing divisi. d. Tampilkan rata‐rata gaji para pegawai di masing‐masing divisi. e. Tampilkan gaji terendah, gaji tertinggi, dan gaji rata‐rata seluruh pegawai f. Tampilkan nama pegawai beserta usianya diatas 30 tahun g. Tampilkan gaji setahun dari divisi produksi
00012 AQILA RASIYAH 7500000 PEREMPUAN TANGERANG 24‐06‐1980 10
00023 ALFATH MUBINAN 2300000 LAKI‐LAKI JAKARTA 30‐07‐1984 30
00014 SYARIFAH IZNA 1600000 PEREMPUAN JAKARTA 26‐12‐1976 30
TB_DIVISI
IDDIVISI DNAMA IDMANAGER
10 PRODUKSI 00012 20 KEUANGAN 00013 30 PERSONALIA 00023 40 HUMAS 00019 50 PENJUALAN 00011 60 IT 00031
2014
17
Basis Data Pusat Bahan Ajar dan eLearningDevi Fitrianah http://www.mercubuana.ac.id
Daftar Pustaka
1. Database system: A Practical approach to design, implementation and management 2. Sistem Manajemen Basis Data