Ringkasan Chapter 6 SQL : Data Definition 6.1 The ISO SQL DATA TYPE 6.1.1 SQL IDENTIFIERS SQL Identifier digunakan untuk mengidentifikasikan objek-objek di dalam database seperti nama tabel, nama view dan kolom. Karakter yang dapat digunakan dalam user-defined SQL Identifier harus ada di “set karakter”. Standar ISO menyediakan default set karakter yang terdiri dari huruf besar A.....Z, huruf kecil a....z, angka 0...9, dan karakter underscore( _ ). Batasan-batasan dalam menggunakan identifiers : Tidak boleh lebih dari 128 karakter Harus diawali dengan huruf Tidak boleh ada spasi Tipe data SQL ISO : Tipe Data Boolean Character Bit Exact numeric Approximate numeric Datetime Interval largeobjects Deklarasi BOOLEAN CHAR VARCHAR BIT BITCHAR NUMERIC DECIMAL INTEGER FLOAT REAL DOUBLE PRECISION DATE TIME TIMESTAMP INTERVAL CHARACTER LARGE OBJECT 6.1.2 SQL SCALAR DATA DATA TYPES Data Booleean Data Boolean terdiri dari nilai-nilai yang berbeda yaitu TRUE dan FALSE, data Boolean juga mendukung nilai UNKNOWN pula. Data Character Data character terdiri dari serangkaian karakter yang telah didefinisikan oleh Vendor atau disebut juga implementation-defined, character set dan yang paling sering digunakan saar ini, yaitu ASCII & EBCDIC. Format untuk menspesifikan tipe data karakter yaitu : CHARACTER [VARYING] [length] CHARACTER can be abbreviated to CHAR and CHARACTER VARYING to VARCHAR Saat kolom string didefinisikan, length dapat dispesifikan untuk mengindifikasi jumlah karakter maksimum yang dapat ditampung dan (default length adalah 1). Sedangkan karakter string dapat didefinisikan sebagai fixed atau varying length. Data Bit Tipe data bit digunakan untuk mendefinisikan string-string bit yaitu serangkaian digit (bit) binary dimana mereka memiliki nilai 0 dan 1. Format untuk menspesifikasikan tipe data bit sama dengan type data karakter : BIT [VARYING] [length] 6.1.3 EXACT NUMERIC DATA Type data numeric digunakan untuk mendifinisikan angka-angka dengan penggambaran yang tepat dan terdiri dari precision dan scale. Presicion memberikan jumlah total digit desimal yang berarti, menyertakan angka desimal dibelakang koma tapi tidak menyertakan pointnya itu sendiri, sedangkan scale memberikan hanya jumlah total angka desimal di belakang komanya. Contoh : Exact numeric valuenya : 12, 345, artinya Memiliki 5 precision dan 3 scale. Beberapa cara menspesifikasikan NUMERIC [precision[.scale]] DECIMAL [precision[.scale]] INTEGER tipe data exact numeric, yaitu : SMALLINT INTEGER can be abbreviated to INT and DECIMAL to DEC NUMERIC dan DECIMAL menyimpan angka-angka dalam notasi decimal. Default scale selalu 0, default precision merupakan implementation, defined. INTEGER digunakan untuk semua angka posotif atau negative yang besar. SMALLINT digunakan untuk semua angka positif atau negatif yang kecil. Contohnya, nilai maksimum yang dapat disimpan dengan SMALLINT mungkin adalah 32, 767. rooms SMALLINT, salary DECIMAL (7,2) Approximate Numeric Data Tipe data numeric digunakan untuk mendefinisikan angka-angka yang tidak memiliki penggambaran yang tepat, seperti angka real.. Approximate Numeric atau Floating Point hampir sama dengan notasi ilmiah. Contohnya, 10E3, +5.2E6, -0.2E-4. FLOAT [precision] REAL DOUBLE PRECISION Datetime Data Tipe data datetime digunakan untuk mendefinisikan point-point di dalam waktu untuk tingkat keakuratan yang pasti. Contohnya adalah tanggal, jam, dsb. Standar ISO membagi tipe data datetime menjadi YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HOUR dan TIMEZONE_MINUTE. Tiga jenis tipedata datetime yaitu : DATE TIME [timePrecision] [WITH TIME ZONE] TIMESTAMP [timePrecision] [WITH TIME ZONE] DATE digunakan untuk menyimpan tanggal kalender menggunakan field-field seperti YEAR, MONTH, dan DAY. TIME digunakan untuk menyimpan field- field HOUR, MINUTE, dan SECOND. TIMESTAMP digunakan untuk menyimpan tanggal dan waktu. TimePrecision merupakan jumlah angka decimal ketepatan waktunya dan mempunyai default 0, sedangkan default TIMESTAMP adalah 6 (dalam microsecond). Interval Data Tipe data interval digunakan untuk menggambarkan periode waktu setiap tipe data interval terdiri dari subset field-field yang berkaitan : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND. Dua kelompok tipe data interval yaitu : interval year_month dan interval daytime. Format untuk menspesifikasi tipe data interval : INTERVAL {{startField TO endField}singleDatetime Field} startField = YEAR | MONTH | DAY | HOUR | MINUTE [(intervalLeadingFieldPrecision)] endField = YEAR | MONTH | DAY | HOUR | MINUTE | SECOND [(fractionalSecondsPrecision)] singleDatetime Field = startField | SECOND [(intervalLeadingFieldPrecision[,fractionalSecondsPrecision])] Scalar Operation SQL menyediakan sejumlah operator scalar yang built-in dan fungsi-fungsi yang dapat digunakan untuk membuat ekspresi scalar yaitu ekspresi yang mengevaluasi nilai scalar. ISO SQL Scalar Operator Operator BIT_LENGHT OCTET_LENGHT Artinya Mengembalikan panjang string dalam bits Contoh : BIT_LENGHT (X’FFFF’) mengembalikan 16. Mengembalikan panjang string dalam oktet (panjang bit di bagi 18) Contoh : OCTET_LENGTH (X”FFFF”) mengembalikan 5. CHAR_LENGHT Mengembalikan panjang string dalam karakter Contoh : CHAR_LENGHT (’Beech’) mengembalikan 5. CAST Mengubah ekspresi nilai dari tipe data yang satu menjadi nilai dengan tipe data yang lain. Contoh : CAST (5.2E6 AS INTEGER). \\ Mengurutkan 2 string karakter atau string bits. Contoh : fName || Name. CURRENT_USERORUSER Mengembalikan string karakter yang menggambarkan autorisasi identifier. SESSION_USER Mengembalikan string karakter yang menggambarkan autorisasi identifier SQL-session. SYSTEM_USER Mengembalikan string karakter yang menggambarkan identifier dari user yang meminta modulate. LOWER Mengubah huruf besar menjadi huruf kecil. UPPER Mengubah huruf kecil menjadi huruf besar. TRIM Menghilangkan leading (LEADING), trailing (TRAILING) atau keduanya. POSITION Mengembalikan posisi dari sebuah string yang ada di dalam string lain. SUBSTRING Mengembalikan substring yang dipilih dari suatu string. CASE Mengembalikan salah satu dari kumpulan spesifikasi nilai berdasarkan beberapa kondisi. CURRENT_DATE Mengembalikan tanggal user. CURRENT_TIME Mengembalikan waktu. CURRENT_TIMESTAMP Mengembalikan tanggal dan waktu. EXTRACT Mengembalikan nilai field spesifik dari nilai datetime/interval. 6.2 INTEGRITY ENCHANMENT FEATURE Ada lima perbandingan tipe integrity constraint : Required data Domain constraints Entity integrity Referential integrity Enterprise constraints 6.2.1 REQUIRED DATA Beberapa kolom harus berisi nilai yang benar. Tidak diperkenankan untuk berisi null. Null digunakan untuk membedakan dari tidak ada atau kosong, hilang, atau, tidak bisa dipakai. Setting dasar dari ISO adalah null, contoh untuk menspesifikasi posisi kolom pada table staff agar tidak boleh null : Position VARCHAR(10)NOT NULL 6.2.2 DOMAIN CONSTRAINTS Setiap kolom mempunyai domain, dengan kata lain di set pada nilai yang benar. Sebagai contoh: sex dari staff antara ‘M’ atau ‘F’. Standar ISO menghasilkan 2 cara menspesifikasi domain dalam CREATE dan ALTER TABLE. Yang pertama yaitu CHECK yang mengizinkan constraint dapat didefinisi pada kolom atau seluruh table. Caranya yaitu : CHECK(searchCondition) Didalam kolom constraint, klausa CHECK dapat direferensi hanya jika kolom sudah didefinisi, untuk memastikan kolom sex hanya bisa dispesifikasi ‘M’ atau ‘F’ maka : Sex CHAR NOT NULL CHECK(sex IN(‘M’,’F’)) Tetapi, ISO standar mengizinkan domain didefinisikan secara tegas menggunakan statement CREATE DOMAIN : CREATE DOMAIN SexType AS CHAR [DEFAULT defaultOption] [CHECK(searchCondition)] Sebuah domain memberikan nama, DomainName, tipe data. Ini bukan merupakan definisi yang complete tetapi cukup untuk mendemonstrasi konsep dasar. Contohnya : CREATE DOMAIN SexType AS CHAR DEFAULT ‘M’ CHECK(VALUE IN(‘M’,’F’)); Domain dapat dihapus dari database dengan menggunakan statement DROP DOMAIN, contoh : DROP DOMAIN Domain Name [RESTRICT/CASCADE] 6.2.3 ENTITY INTEGRITY Kunci primary dari table harus unik, bukan nilai null pada setiap baris. Standar dari ISO mendukung Entity Integrity dengan klausa PRIMARY KEY di dalam statement CREATE dan ALTER TABLE, contoh : PRIMARY KEY(propertyNo) PRIMARY KEY dapat dispesifikasi hanya sekali di dalam table. Tetapi dapat dipost untuk memastikan keunikan untuk pengganti kunci di dalam table dengan menggunakan kata kunci UNIQUE. SQL akan menolak INSERT atau UPDATE apa saja di dalam operasi percobaan untuk membuat nilai duplikat antar setiap kunci kandidat, contoh : clientNo VARCHAR(5) NOTNULL PropertyNo VARCHAR(5) NOTNULL UNIQUE(clientNo, propertyNo) 6.2.4 REFERENTIAL INTEGRITY Kunci dari luar adalah kolom, atau set dari kolom, yang menghubungkan setiap baris dalam table kecil yang berisi kunci dari luar untuk baris dari table besar yang berisi kunci nilai candidate yang cocok. Yang berarti jika kunci yang berasal dari luar memiliki nilai, maka nilai itu haruslah ada, baris yang benar dalam table besar. Standar ISO mendukung definisi kunci luar yaitu klausa FOREIGN KEY di dalam statement CREATE dan ALTER TABLE, contohnya : FOREIGN KEY(branchNo) REFERENCES Branch Saat user ingin mendelte baris dari table besar, dan ada satu atau lebih baris yang cocok di dalam table kecil, ada beberapa perintah yang bisa digunakan yaitu : - CASCADE menghapus baris dari table besar dan secara otomatis menghapus baris yang cocok di dalam table kecil. - SET NULL menghapus baris dari table besar dan mengeset nilai kunci luar dari table kecil menjadi NULL - SET DEFAULT menghapus baris dari table besar dan mengeset setiap komponen dari kunci luar di dalam table kecil untuk menspesifik nilai default - NO ACTION menolak menghapus operasi dari table besar 6.2.5 ENTERPRISE CONSTRAINT Standar ISO mengizinkan enterprise constraint menspesifikasi dengan menggunakan klausa CHECK dan statement UNIQUE dari CREATE dan ALTER TABLE dan statement CREATE ASSERTION, contoh dari formatnya adalah : CREATE ASSERTION AssertionName CHECK (searchCondition) Statement ini sangat familiar dengan klausa CHECK, tetapi saat enterprise constraint menyertakan lebih dari satu table, akan lebih disukai dengan menggunakan ASSERTION daripada menduplikat check di setiap table, contohnya: CREATE ASSERTION StaffNotHandlingTooMuch CHECK (NOT EXISTS (SELECT staffNo FROM PropertyForRent GROUP BY staffNo HAVING COUNT(*)>100)) 6.3.1 MEMBUAT DATABASE Proses dalam membuat suatu database secara signifikan dari produk ke produk. Dalam system multiuser, kuasa unutk membuat suatu database pada umumnya terdapat pada DBA. Dalam single-user system, suatu default database mungkin dibuat ketika system diinstall dan diatur dan yang lain dapat dibuat oleh user jika diperlukan. Standar ISO tidak menetapkan bagaimana database dibuat, dan masing-masing bahasa biasanya mempunyai pendekatan yang berbeda. Menurut standar ISO, hubungan dan object database lain ada pada suatu lingkungan. Di antaranya, maisng-masing lingkungan terdiri dari saru atau lebih catalog, dan masing-masing catalog terdiri dari sekumpulan skema. Skema adalah suatu koleksi object database yang dinamai yang dihubungkan antara satu sama lain (semua object dalam database dideskripsikan dalam satu skema atau lain). Object dalam skema dapat berupa table, view, domains, assertion, collations, translation, dan sekumpulan karakter. Semua object dalam skema mempunyai owner dan share default. Standard meninggalkan mekanisme untuk membuat dan menghapus skema. Statement definisi skema mempunyai form yang disederhanakan : CREATE SCHEMA [Name | AUTHORIZATION CreatorIdentifier] Oleh karena itu, jika pembuat skema SQLtest adalah Smith, statement SQL adalah : CREATE SCHEMA SqlTests AUTHORIZATION Smith; Standard ISO juga mengindikasikan bahwa haruslah mungkin untuk menspesifikasi di dalam statement cakupan dari fasilitas yang tersedia untuk para user dari skema, tetapi hanya detail bagaimana perlakuan khusus ini ditetapkan adalah implementation-dependent. Suatu skema dapat dihapus menggunakan statement DROP SCHEMA, yang mempunyai format berikut : DROP SCHEMA Name [RESTRICT | CASCADE] Jika RESTRICT ditetapkan, yang mana adalah default id yang tidak punya qualifier ditetapkan, skema harus kosong atau operasi gagal. Jika CASCADE ditetapkan, operasi cascade untuk drop semua object dihubungkan dengan skema dalam order yang telat didefinisikan di atas. Bila ada operasi drop gagal, DROP SCHEMA gagal. Total efek dari DROP SCHEMA dengan CASCADE dapat sangat luas dan harus dilaksanakan hanya dengan perhatian ekstreme. Statement CREATE dan DROP SCHEMA belum secara luas diterapkan. 6.3.2 MEMBUAT TABLE (CREATE TABLE) Setelah membuat struktur database, kita sekarang dapat membuat struktur table untuk hubungan dasar untuk ditempatkan dalam database. Ini dicapai menggunakan statement CREATE TABLE, yang mempunyai sintaks dasar berikut : CREATE TABEL TableName {(columnName data Type [NOT NULL] [UNIQUE] [DEFAULT defaultOption] [CHECK (searchCondition)] […]} [PRIMARY KEY (listOfColumns),] {[UNIQUE (listOfColumns),] […]} {[FOREIGN KEY (listOfForeignKeyColumns) REFERENCES ParentTableName [(listOfCandidateKeyColumns)], [MATCH {PARTIAL | FULL} [ON UPDATE referentialAction] [ON DELETE referentialAction]] […]} {[CHECK (searchCondition)] […]}) Seperti yang kita diskusikan pada bagian yang sebelumnya, versi dari statement CREATE TABLE menyertakan fasilitas untuk penjelasan integritas yang mempunyai integrity dan constrains lain. Ada variasi yang significant dalam mendukung penyajian oleh berbagai bahasa berbeda untuk statement versi ini. Bagaimanapun, ketika didukung, fasilitas harus digunakan. Statement CREATE TABLE membuat suatu table yang dinamakan tablename terdiri dari satu atau lebih kolom data yang telah ditetapkan tipe datanya. Sekumpulan tipe data yang diizinkan diuraikan pada bagian 6.1.2. Kata DEFAULT dapat ditetapkan untuk menyediakan suatu nilai anggapan untuk kolom tertentu. SQL menggunakan nilai anggapan ini ketika statement INSERT gagal untuk menetapkan suatu nilai untuk kolom. Antar nilai – nilai lain, defaultOption meliputi literals. NOT NULL, UNIQUE, dan CHECK dibahas pada bagian sebelumnya. Kata yang tersisa dikenal sebagai batas table dan secara bebas didahului oleh kata : CONSTRAINT ConstraintName Yang mana mengijinkan batasan untuk ditentukan oleh nama menggunakan statement ALTER TABLE. Kata PRIMARY KEY menetapkan satu atau banyak kolom pada form sebagai primary key untuk table. Jika kata ini ada, haruslah ditetapkan untuk tiap – tiap table di buat. Dengan default, NOT NULL diasumsikan untuk masing – masing kolom yang menjadi primary key. Hanya satu kata PRIMARY KEY diijinkan dalam tiap table. SQL menolak semua operasi INSERT atau UPDATE yang mencoba untuk membuat suatu barus duplikat dalam PRIMARY KEY column(s). dengan cara ini, SQL menjamin keunikan dari primary key. Kata FOREIGN KEY menetapkan suatu kunci asing dalam table dan hubungan itu menunjuk pada table lain. Kata ini mengimplementasikan batasan integritas. Kata itu menetapkan ketentuan berikut : Suatu ListOF Foreignkeycolumns, kolom dari table yang sedang dibuat dari foreign key. Subclause REFERENCES, memberi table utama adalah table yang memasangkan candidate key. Jika listOf candidatekeycolumns dihilangkan, foreign key diasumsikan untuk memenuhi primary key dari table utama. Dalam hal ini, table utama harus mempunyai suatu PRIMARY KEY dalam statement CREATE TABLE. Aturan pembaharuan optional (ON UPDATE) untuk hubungan yang menetapkan tindakan untuk diambil ketika candidate key sedang di update dalam table utama yang memasangkan foreign key dalam table. ReferentialAcrion dapat berupa CASCADE, SET NULL, SER DEFAULT, atau NO ACTION. Jika ON UPDATE dihilangkan, default NO ACTION diasumsikan. Dapat sebuah foreign key diperlukan. CHECK dan CONSTRAINT mengijinkan batasan tambahan untuk didefinisikan. Batasan pada hakekatnya dicek setelah tiap-tiap statement SQL telah dieksekusi, walapun check dapat di tunda sampai akhir transaksi. 6.3.3 MENGUBAH DEFINISI SUATU TABEL ( ALTER TABLE) Standard ISO menyediakan statement ALTER TABLE untuk mengubah struktur dari suatu table setelah table itu dibuat. Definisi dari statement ALTER TABLE dalam standard ISO terdiri dari enam pilihan untuk : Menambahkan suatu kolom baru pada suatu table Drop suatu kolom dari table Add batasan table yang baru Drop batasan table Set default untuk kolom Drop default untuk kolo, Format dasar dari statement adalah : ALTER TABLE TableName [ADD[COLUMN]ColumnName dataType pNOT NULL][UNIQUE]] [DEFAULT DefaultOption] [CHECK (searchCondition)]] [DROP[COLUMN] columnName [RESTRICT | CASCADE]] [ADD[CONSTRAINT[ConstraintName]]tableConstraintDefinition] [DROP CONSTRAINT ConstraintName [RESTRICT | CASCADE] ] [ALTER [COLUMN] SET DEFAULT defaultOption] [ALTER [COLUMN] DROP DEFAULT] disini parameter seperti didefinisikan utnuk statement CREATE TABLE dalam bagian yang sebelumnya. Suatu tableConstraintDefinition adalah satu kata : PRIMARY KEY, FOREIGN KEY, atau CHECK, ADD COLUMN adalah sama dengan definisi dari suatu kolom dalam statement CREATE TABLE. 6.3.4 REMOVING A TABLE (DROP TABLE) Kita dapat menghilangkan kelebihan table dari database dengan menggunakan pernyataan DROP TABLE, yang formatnya : DROP TABLE TableName [RESTRUCT | CASCADE] Contoh, untuk menghilangkan PropertyFOrREnt kita gunakan perintah : DROP TABLE PropertyForRent ; Catatan, meskipun perintah ini tidak hanya menghilangkan nama table, tetapi juga semua baris didalamnya. Untuk menyederhanakan penghilangan baris dari table tetapi menyimpan struktur table, lebih baik digunakan pernyataan DELETE. Pernyataan DROP TABLE memungkinkan kita unguk menspesifikasi apakah aksi DROP berjalan atau tidak. 1. RESTRICT : operasi DROP yang ditolak jika ada objek yanglain bergantung pada keberadaan sejak keberadaan table berlanjut untuk di drop. 2. CASCADE : proses operasi DROP dan otomatisasi SQL menghilangkan semua objek yang bergantung ( dan objek yang bergantung pada objek – objek lain). Umumnya menggunakan TABLE DROP adalah untuk mengoreksi kesalahan ketika membuat table. Jika table dibuat dengan struktur yang salah, DROP TABLE dapat digunakan untuk menghapus table baru yang dibuat dan memulainya lagi. 6.3.5 REATING AN INDEX (CREATE INDEX) Index adalah struktur yang menyediakan cara untuk mempercepat akses pada baris dari table berdasarkan pada nilai dasru satu atau lebih kolom. Index dapat meningkatkan performance dari query. Inde biasanya dibuat untuk memuaskan pencarian criteria setelah table telah digunakan untuk beberapa waktu dan telah bertambah ukurannya. Membuat index bukan standar dari SQL. CREATE [ UNIQUE] INDEX IndexName ON TableName (ColumnName [ASC | DESC] […]) Index hanya dapat dibuat pada table dasar tidak pada tampilan. Meskipun index dapat dibuat kapanpun, kita mungkin akan dapat masalah jika kita mencoba membuat index unik pada table dengan record di dalamnya, karena nilai yang disimpan untuk kolom index telah memiliki duplikat. Membuat index unik, setidaknya untuk kolom primary key, ketika table dasar dibuat dan DBMS tidak otomatis menjalankan primary key unik. CREATE UNIQUE INDEX StaffNoInd ON Staff (StaffNo); CREATE UNIQUE INDEX PropertyNoInd ON PropertyForRent (PropertyNo); Untuk masing-masing kolom, kita dapat spesifikasi apakah termasuk ascending atau descending, dengan otomatisnya ASC. Contoh : CREATE INDEX RentInd ON PropertyForREnt(city,rent); 6.3.6 REMOVING AN INDEX (DROP INDEX) Jika kita membuat index untuk table dasar dan kemudian memutuskan bahwa tabel itu tidak dibutuhkan lagi, kita dapat gunakan pernyataan DROP INDEX untuk menghilangkan index dari database. Formatnya: DROP INDEX IndexName Contoh: DROP INDEX RentInd; 6.3 VIEW Hasil dinamik dari satu atau lebih operasi relasi yang dioperasikan berdasarkan hubungan untuk menyediakan relasi yang lain. View adalah relasi virtual yang tidak harus ada pada database tetapi dapat menyediakan permintaan bagi user pada saat dibutuhkan. 6.4.1 CREATING A VIEW ( CREATE VIEW ) Format statement create view adalah CREATE VIEW ViewName[( newColumnName[,…] )] AS subselect [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] 6.4.2 REMOVING A VIEW ( DROP VIEW ) View dihapus dari database dengan DROP VIEW statement : DROP VIEW ViewName [ RESTRICT | CASCADE ] DROP VIEW menyebabkan definisi untuk menghapus view dari database. Sebagai contoh, kita dapat menghapus Manager3Staff view dengan menggunakan statement : DROP VIEW Manager3Staff; 6.4.3 VIEW RESOLUTION Contoh dari resolusi view adalah Kolom view name pada SELECT list diterjemahkan, pada corresponding kolom mendefinisikan query: SELECT s.staffNO AS staffNO, COUNT(*) AS cnt; 6.4.4 KETERBATASAN PADA VIEWS Keterbatasan pada pembuatan dan penggunaan Views: Jika kolom pada Views dibuat berdasarkan fungsi agregasi, maka kolom yang dapat ditampilkan kembali pada views tersebut hanya kolom yang menggunakan perintah SELECT dan ORDER BY. Di beberapa kondisi, penggunaan WHERE dapat menyebabkan kolom tidak bisa ditampilkan kembali ( disebabkan penggunaan fungsi agregasi). Views yang sudah digrouping tidak bisa digabung dengan tabel maupun views yang lain. 6.4.5 VIEWS DAPAT DIUPDATE Kita tidak dapat mengupdate data pada views dengan begitu saja. Misalnya kita ingin menambah data pada views. Karena views hanya menampilkan beberapa kolom, maka sebagiannya lagi ( yang tidak terdapat ada views tapi terdapat pada tabel utama ) menjadi tidak terisi (null), padahal tabel utamanya belum tentu mengizinkan kolom tersebut null. Views dapat diupdate dengan syarat: Tidak menggunakan perintah DISTINCT. Menggunakan nama kolom pada semua daftar SELECT dari query yang dipakai, dan tidak ada nama kolom yang dimunculkan lebih dari sekali. Perintah FROM hanya menunjuk pada 1 tabel. Sumber views harus 1, jadi hindarkan semua perintah yang bersifat menggabungkan seperti UNION, INTERSECT, atau EXPECT. Di dalam perintah WHERE tidak boleh terdapat gabungan perintah SELECT yang mengacu pada nama tabel di perintah FROM. Tidak boleh ada perintah GROUP BY atau HAVING pada query yang dipakai. 6.4.6 WITH CHECK OPTION Dalam update, data yang lama akan dihilangkan, dan data yang baru yang akan ditampilkan. Peristiwa masukna atau keluarnya data pada rows (baris) disebut mingrating rows. Perintah dengan WITH CHECK OPTION dalam CREATE VIEW berfungsi mencegah migrating rows pada views. Jika menggunakan WITH LOCAL CHECK OPTION WITH, row (baris) yang dimasukkan ataupun diupdate pada views ini maupun views lainnya yang baik secara langsung maupun tidak langsung terlibat, maka row yang lama tetap tidak dihilangkan dari views, kecuali jika memang rownya tidak ada dari tabel utamanya. Dengan WITH CASCADED CHECK OPTION (default setting), row (baris) yang dimasukkan ataupun diupdate pada views ini maupun views lainnya yang baik secara langsung maupun tidak langsung terlibat, maka row yang lama tetap tidak dihilangkan dari views. 6.4.7 KEUNTUNGAN DAN KERUGIAN VIEWS Keuntungan Data Independence Data dapat berdiri sendiri tanpa bergantung pada data lain Currency Perubahan pada tabel dasar dalam pendefinisian query secara cepat direfleksikan dalam view Improved Security Dapat lebih mengontrol akses yang dilakukan user dalam database Reduced Complexity View dapat mempermudah query, dengan menggambar data dari beberapa tabel ke dalam satu tabel sehingga mentransformasi multi-tabel query menjadi single-table query Convenience Hanya memperlihatkan kepada user hanya bagian database yang diinginkan. Ini juga mengurangi kompleksitas dari cara pandang user Customization View menyediakan method untuk meng-customized database sehingga tabel yang sama dapat dilihat oleh user berbeda dalam cara pandang yang berbeda Data Integrity Menambah integritas dari view Kekurangan Update Restriction Dalam beberapa kasus, view tidak dapat diupdate Structure Restriction Jika ada penambahan kolom atau baris pada tabel awal maka kolom dan baris ini tidak akan muncul pada view, kecuali view dibuat ulang Performance Dalam beberapa kasus, dapat sulit untuk menampilkan, dan dalam beberapa kasus lainnya ada banyak masalah 6.4.8 VIEW MATERIALIZATION Alternative lainnya yang ada untuk menangani query berdasarkan view, adalah view materialization yaitu untuk menyimpan view sebagai tabel sementara di dalam database pada saat view pertama kali di-query-kan. Proses untuk mengupdate materialiated view untuk merespon perubahan data disebut view maintenance. 6.4 TRANSACTIONS Transaksi adalah unit logika kerja yang terdiri dari 1 atau beberapa statement SQL yang dimaksudkan menjadi atomic dengan harapan dapat diambil kembali. SQL transaction otomatis dimulai dengan suatu transaction-initiating SQL statement yang dieksekusi oleh user atau program. Perubahan yang dibuat melalui transaksi tidak visible/tampak oleh orang lain yang sedang mengeksekusi transaksi sampai transaksi tersebut selesai. Statement COMMIT mengakhiri transaksi secara keseluruhan, membuat perubahan permanent dalam database. Transaksi baru dimulai setelah COMMIT with next-transaction initiating. Statement ROLLBACK membatalkan transaksi dan semua perubahan yang dibuat melalui transaksi. Transaksi baru dimulai setelah ROLLBACK with next-transaction initiating. Untuk programmatic SQL, terminasi program mengakhiri transaksi terakhir, bahkan jika statement COMMIT belum dieksekusi. Untuk programmatic SQL, terminasi program yang tidak wajar akan membatalkan transaksi. Transaksi SQL tidak bisa bersarang (nested). Format: SET TRANSACTION [READ ONLY | READ WRITE] | [ISOLATION LEVEL READ UNCOMMITTES | READ COMMITTED | REPEATABLE READ | SERIALIZABLE] READ ONLY dan READ WHITE mengidinkasi apakah transaksi berdifat read only atau read and write. Defaultnya READ WRITE jika tidak ada qualifiers yang disebutkan disebutkan (kecuali jika isolation levelnya READ UNCOMMITED). READ ONLY membolehkan transaksi untuk INSERT, UPDATE, dan DELETE terhadap tabel sementara saja. Isolation level mengindikasikan derajat yang diijinkan dari transksi lain selam pengeksekusian transaksi. Violation of serializability permitted by isolation levels. Isolation level READ UNCOMMITED READ COMMITED REPEATABLE SERIALIABLE Dirty read Y N N N Nonrepeatable read Y Y N N Phantomread Y Y Y N 6.5.1 IMMEDIATE AND DEFERRED INTEGRITY CONSTRAINTS Sebuah batasan integritas bisa didefenisikan INITIALLY IMMEDIATE atau INITIALLYY DEFFERED, menandai mode yang mengasumsikan batasan saat permukaan transaksi. Bisa juga menspesifikasikan apakah mode bisa diganti berurutan menggunakan [NOT] DEFERRABLE. Default-nya INITIALLY IMMEDIATE. Statement SET CONSTRAINTS digunakan untuk mengeset mode untuk batasan tertentu dari transaksi tertentu. Format: SET CONTRAINTS {ALL | constraintName[,...]}{DEFERRED | IMMEDIATE} 6.5 ACCESS CONTROL DBMS menyediakan mekanisme keamanan untuk pengaksesan database dan tabel-nya menggunakan statement GRANT dan REVOKE. Authorization identifiers and ownership Authorization identifiers adalah identifier SQL yang digunakan untuk mengidentifikasi user. Tiap database dimaksudkan untuk user terauthorisasi oleh DBA. Biasanya digunakan password. Authorization identifier digunakan untuk menentukan object database yang mana yang berhak diakses atau dilakukan operasi oleh user. Tiap object dalam SQL memiliki owner. Owner diidentifikasikan oleh authorization identifier melalui klausa AUTHORIZATION. Privileges Privileges adalah action yang boleh dilakukan oleh user terhadap tabel. SELECT – privilege untuk memperoleh data dari tabel; INSERT – privilege untuk menginsert baris baru ke dalam table; UPDATE – privilege untuk mengubah baris data dalam tabel; DELETE – privilege untuk menghapus baris data dari table; REFERENCES – privilege untuk mereferensikan kolom dari table tertentu dalam batasan integritas. USAGE – privilege untuk menggunakan domains, collations, character sets, dan translation. INSERT dan UPDATE dapat dibatasi untuk kolom tertentu, memberikan akses untuk kolom-kolom tertentu tapi tidak kolom lainnya. REFERENCES dapat dibatasi untuk kolom tertentu, memperbolehkan kolom tertentu direferensikan dalam batasan (check constraints and foreign constraint) ketika membuat tabel. User yang membuat tabel menggunakan statement CREATE TABLE, otomatis menjadi owner table dan memiliki semua privileges terhadap tabel. Untuk memberikan privileges kepada user lain, owner menggunakan statement GRANT. User yang membuat view menggunakan statement CREATE VIEW, otomatis menjadi owner dari view, tetapi tidak memiliki privileges penuh terhadap table dasar view dan privileges REFERENCES atas kolom tertentu view. Owner dari view mendapatkan privileges INSERT, UPDATE, dan DELETE hanya jika dia memiliki semua privileges untuk setiap tabel view. 6.6.1 GRANTING PRIVILEGES TO OTHER USERS (GRANT) GRANT statement digunakan untuk menjamin hak user terhadap object database, untuk memberikan akses kepada user lain terhadap database. Format: GRANT {PrivilegesList | ALL PRIVILEGES} ON ObjectName TO {AuthorizationIdList | PUBLIC} [WITH GRANT OPTION] PrivilegesList berisi satu atau lebih hak (privileges) di bawah ini, dipisah dengan koma: SELECT DELETE INSERT [(columnName[,…])] UPDATE [(columnName[,…])] REFERENCES [(columnName[,…])] USAGE Statement GRANT mengizinkan keyword ALL PRIVILEGES digunakan untuk menjamin semua privileges sekaligus kepada seorang user. Keyword PUBLIC untuk menspesifikasikan akses kepada semua user. ObjectName dapat berupa nama base tabel, view, domain, character set, collation, atau translation. Klausa WITH GRANT OPTION mengizinkan user dalam authorizationList meneruskan (pass) privileges atas suatu object kepada user lain. Jika user yang meneruskan privileges yang disebutkan dalam WITH GRANT OPTION, user yang menerima privileges bisa meneruskannya kepada user yang lain. Jika keyword ini tidak disebutkan, user yang menerimanya tidak bisa memberikannya kepada user yang lain. 6.6.2 REVOKING PRIVILEGES FROM USERS (REVOKE) Statement REVOKE digunaka untuk mencabut / menghapus privileges yang diberikan melaui statement GRANT. Statement REVOKE dapat menghapus semua atau beberapa privileges. Format: REVOKE [GRANT OPTION FOR]{PrivilegeList | ALL PRIVILEGES} ON ObjectName FROM {AuthorizationList | PUBLIC}[RESTRICT | CASCADE] Keyword ALL PRIVILEGES menunjuk pada semua privilrgrs yang diberikan kepada user oleh user yang me-revoke privileges. Klausa optional GRANT OPTION FOR mengizinkan penerusan (pass) privileges via WITH GRANT OPTION dari statement GRANT untuk di-revoke terpisah dari privileges itu sendiri. The RESTRICT dan CASCADE qualifiers beroperasi seperti dalam statement DROP TABLE. Karena privileges dibutuhkan untuk membuat object tertentu (object ditolak), me-revoke suatu privilege dapat menghilangkan authority pembuatan object. Statement REVOKE menjadi gagal jika hasilnya berupa penolakan object, misalnya view. Jika CASCADE di spesifikasikan, suatu DROP statement dibuat dari views, domains, constraint atau assertions yang telah ditolak. Privileges yang telah dijaminkan kepada user ini oleh user lain tidak dipengaruhi oleh statement REVOKE ini. Sehingga, jika seorang user menjaminkan user lain privilege akan di-revoke, user’s grant yang lain masih mengijinkan user untuk mengakses table. Contoh-contoh penulisan koding SQL-DDL yang ada di Bab 6. create database coba use coba create table Staff ( IDkaryawan char(5), Fname varchar (10), Lname varchar (10), tlahir datetime, address varchar (10), position varchar (10), sex char (1), branchNo char (5), primary key (IDkaryawan), foreign key (branchNo) references branch ); drop table Staff insert into Staff values ('ad123','epe','step','1985-03-25','golden','Gosip','F','br321') insert into Staff values ('ad234','yanti','liem','1985-07-23','bla3','asd','F','de324') insert into Staff values ('cd234','wenny','djie','1985-03-31','bla4','asdf','F','de354') insert into Staff values ('cd235','surianto','anto','1985-03-30','cengkareng','asd','M','de355') insert into Staff values ('as245','lena','hartono','1985-06-21','binus','Gosip','F','de355') create table branch ( branchNo char(5), city varchar (8), address varchar (10), zipcode varchar (5), telp varchar (7), primary key ( branchNo) ); insert into branch values ('br321','jogja','malioboro','12345','5647375') insert into branch values ('de324','manado','ratulangi','23456','5645175') insert into branch values ('de354','makassar','sudirman','56754','4363231') insert into branch values ('de355','jakarta','pluit','26584','6263231') insert into branch values ('de355','lampung','teluk','32541','4364231') **Create horizontal view create view st as select * from Staff where Fname ='Yanti'; **Create vertical view CREATE VIEW St2 AS SELECT IDkaryawan,Fname,Lname FROM Staff where position ='Gosip'; **Grouped and joined views CREATE VIEW stfbrcnt(branchNo, IDkaryawan,cnt) AS SELECT s.branchNo, s.IDkaryawan,COUNT(*) FROM Staff s, branch b WHERE s.branchNo = b.branchNo GROUP BY s.branchNo , s.IDkaryawan; **with check option create view st as select * from Staff where Fname ='Yanti'; WITH CHECK OPTION; UPDATE st SET branchNo='de355' WHERE IDkaryawan ='ad234'; INSERT INTO st VALUES ('ad239','novi','anti',DATE'1985-06-24','bangka','Gosip','F','de359'); ALTER TABLE Staff add umur int ** create domain CREATE DOMAIN branchNumber as VARCHAR (5) Check (value in (SELECT branchNo from Staff)); CREATE DOMAIN Street as VARCHAR (25); CREATE DOMAIN City as VARCHAR (15); CREATE DOMAIN PostCode as VARCHAR (8); CREATE TABLE Branch ( branchNo branchNumber NOT NULL, street Street NOT NULL, city City NOT NULL, postcode POSTCODE NOT NULL, primary key (branchNo) ); **Misalnya kita ingin membuat constrain domain city Create domain City as varchar (5) Check (value in (select city from branch)); **Jika ingin menge-drop domainnya Drop domain city Atau bisa juga: ← default restrict Drop domain city cascade **Contoh enterprise constrain Misal : to define the enterprise constraint that prevent member of client from viewing more than 10 properties at the same time. Create assertion clientNotViewTooMuch Check ( not exists (select clientNo from Viewing Group by clientNo Having count (*) >10)) **Contoh create schema Create schema tgssql authorization epe; Artinya creator of schema tgssql adalah epe Drop schema tgs sql Digunakan untuk menghapus schema. **Contoh create index Misal kita ingin membuat index dari staff Create index salaryepe on staff(position,salary); Untuk menghapus index yang sudah dicreate, digunakan : Drop index salaryepe; 1. Kunjungi http://databases.about.com/od/sqlserver/ 2. Membuat ringkasan hasil kunjungan ke URL di atas.
© Copyright 2024 Paperzz