download

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.