Anda di halaman 1dari 30

Database Programming with

SQL
14-3
Mengelola Constraint

Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang.
Tujuan
• Pelajaran ini akan membahas tujuan berikut:
−Mencantumkan empat fungsi berbeda yang dapat dilakukan
oleh pernyataan ALTER pada constraint
−Menuliskan pernyataan ALTER TABLE untuk menambahkan,
menghapus, menonaktifkan, dan mengaktifkan constraint
−Menyebutkan fungsi bisnis yang memerlukan DBA untuk
menghapus, mengaktifkan, dan/atau menonaktifkan
constraint atau menggunakan sintaks CASCADE
−Mencari kamus data untuk
USER_CONSTRAINTS dan
menafsirkan informasi yang
−dihasilkan

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 3
Tujuan
• Apakah akan ada bedanya jika nomor ID siswa baru
dimasukkan ke dalam database sekolah ketika tidak
ada siswa yang sebenarnya terdaftar?
• Apakah ada kemungkinan perusahaan kartu kredit
akan mengeluarkan nomor kartu kredit yang sama ke
lebih dari satu akun atau bisnis akan mempekerjakan
karyawan untuk departemen yang tidak ada?
• Apa yang Anda perkirakan akan terjadi jika suatu bisnis
tidak dapat mempercayai keandalan informasi dalam
database-nya?

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 4
Tujuan
• Sistem database harus dapat mengikuti aturan bisnis
dan, pada saat yang sama, mencegah penambahan,
modifikasi, atau penghapusan data yang dapat
mengakibatkan pelanggaran integritas referensial dari
database
• Di bagian ini, Anda akan belajar cara membuat
perubahan pada constraint tabel sehingga integritas
referensial dan, pada gilirannya, keandalan database
dipertahankan ketika data perlu diubah

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 5
Mengelola Constraint
• Pernyataan ALTER TABLE digunakan untuk membuat
perubahan pada constraint dalam tabel yang ada
• Perubahan ini dapat mencakup menambah atau
menghapus constraint, mengaktifkan atau
menonaktifkan constraint, dan menambahkan
constraint NOT NULL ke kolom

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 6
Mengelola Constraint
• Panduan untuk membuat perubahan pada constraint
adalah:
−Anda dapat menambah, menghapus, mengaktifkan, atau
menonaktifkan constraint, tetapi Anda tidak dapat mengubah
strukturnya
−Anda dapat menambahkan constraint NOT NULL ke kolom
yang ada dengan menggunakan klausa MODIFY dari
pernyataan ALTER TABLE
−MODIFY digunakan karena NOT NULL adalah perubahan level
kolom
−Anda bisa mendefinisikan constraint NOT NULL hanya jika
tabel kosong atau jika kolom berisi nilai untuk setiap baris

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 7
Pernyataan ALTER
• Pernyataan ALTER mewajibkan:
−nama tabel
−nama constraint
−tipe constraint
−nama kolom yang dipengaruhi oleh constraint
• Dalam contoh kode yang ditunjukkan di bawah ini,
menggunakan tabel karyawan, constraint primary key
bisa ditambahkan setelah tabel awalnya dibuat
ALTER TABLE employees
ADD CONSTRAINT emp_id_pk PRIMARY KEY (employee_id);

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 8
Menambahkan Constraint
• Untuk menambahkan constraint ke tabel yang ada,
gunakan sintaks SQL berikut:
ALTER TABLE table_name
ADD [CONSTRAINT constraint_name] type of constraint
(column_name);

• Jika constraint adalah constraint FOREIGN KEY, kata


kunci REFERENCES harus dimasukkan dalam
pernyataan
• Sintaks:
ALTER TABLE tablename
ADD CONSTRAINT constraint_name FOREIGN KEY(column_name)
REFERENCES tablename(column_name);

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 9
Menambahkan Contoh Constraint
• Pertimbangkan database karyawan
• Primary key dari tabel DEPARTMENTS dimasukkan
dalam tabel EMPLOYEES sebagai foreign key
DEPARTMENTS - Induk
DEPARTMENT_ID DEPT_NAME MANAGER_ID LOCATION_ID
90 Executive 100 1700
110 Accounting 205 1700
190 Contracting - 1700

EMPLOYEE - Anak
EMPLOYEE_ID FIRST_NAME LAST_NAME DEPARTMENT_ID
100 Steven King 90
101 Neena Kochhar 90
102 Lex De Haan 90
205 Shelley Higgins 110
206 William Gietz 110

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 10
Menambahkan Contoh Constraint
• Contoh berikut menunjukkan sintaks untuk
menambahkan foreign key ini ke tabel EMPLOYEES:
ALTER TABLE employees
ADD CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments (department_id) ON DELETE CASCADE;

DEPARTMENTS - Induk
DEPARTMENT_ID DEPT_NAME MANAGER_ID LOCATION_ID
90 Executive 100 1700
110 Accounting 205 1700
190 Contracting - 1700

EMPLOYEE - Anak
EMPLOYEE_ID FIRST_NAME LAST_NAME DEPARTMENT_ID
100 Steven King 90
101 Neena Kochhar 90
102 Lex De Haan 90
205 Shelley Higgins 110
206 William Gietz 110

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 11
Menambahkan Ketentuan Constraint
• Jika constraint-nya adalah constraint NOT NULL,
pernyataan ALTER TABLE menggunakan MODIFY
sebagai ganti ADD
• Constraint NOT NULL dapat ditambahkan hanya jika
tabel kosong atau jika kolom berisi nilai untuk setiap
baris:
ALTER TABLE table_name
MODIFY (column_name CONSTRAINT constraint_name NOT NULL);

ALTER TABLE employees


MODIFY (email CONSTRAINT emp_email_nn NOT NULL);

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 12
Mengapa Mengaktifkan dan Menonaktifkan
Constraint?
• Untuk menegakkan aturan yang ditetapkan oleh
constraint integritas, constraint harus selalu diaktifkan
• Namun, dalam situasi tertentu, sebaiknya
menonaktifkan sementara integritas tabel untuk alasan
kinerja, seperti:
−Saat memuat data dalam jumlah besar ke dalam tabel
−Saat melakukan operasi batch yang membuat perubahan
besar ke tabel (seperti mengubah jumlah karyawan setiap
orang dengan menambahkan 1.000 ke nomor yang ada)

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 13
Menghapus Constraint
• Untuk menghapus constraint, Anda perlu tahu nama
constraint tersebut
• Jika Anda tidak mengetahuinya, Anda dapat
menemukan nama constraint dari USER_CONSTRAINTS
dan USER_CONS_COLUMNS dalam kamus data
• Opsi CASCADE dari klausa DROP menyebabkan
constraint yang tergantung juga harus dihapus
• Perhatikan bahwa ketika Anda menghapus constraint
integritas, constraint itu tidak lagi diberlakukan oleh
Oracle Server dan tidak lagi tersedia di kamus data

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 14
Menghapus Constraint
• Tidak ada baris atau data apa pun di tabel yang
terpengaruh yang dihapus saat Anda menghapus
constraint
ALTER TABLE table_name
DROP CONSTRAINT name [CASCADE}

ALTER TABLE copy_departments


DROP CONSTRAINT c_dept_dept_id_pk CASCADE;

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 15
Menonaktifkan Constraint
• Secara default, setiap kali constraint integritas
didefinisikan dalam pernyataan CREATE atau ALTER
TABLE, constraint secara otomatis diaktifkan
(dipaksakan) oleh Oracle kecuali jika itu dibuat secara
khusus dalam keadaan dinonaktifkan menggunakan
klausa DISABLE

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 16
Menonaktifkan Constraint
• Anda dapat menonaktifkan constraint tanpa
menghapusnya atau membuatnya kembali dengan
menggunakan opsi ALTER TABLE DISABLE
• DISABLE memungkinkan data yang masuk, apakah itu
sesuai dengan constraint atau tidak
• Fungsi ini memungkinkan data untuk ditambahkan ke
tabel anak tanpa memiliki nilai yang sesuai di tabel
induk
• DISABLE hanya mematikan constraint

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 17
Menggunakan Klausa DISABLE
• Anda dapat menggunakan klausa DISABLE dalam
pernyataan ALTER TABLE dan pernyataan CREATE TABLE
CREATE TABLE copy_employees
( employee_id NUMBER(6,0) PRIMARY KEY DISABLE,
...
...);

ALTER TABLE copy_employees


DISABLE CONSTRAINT c_emp_dept_id_fk;
• Menonaktifkan constraint unik atau primary key
menghapus indeks unik.

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 18
Menggunakan Klausa CASCADE
• Klausa CASCADE menonaktifkan constraint integritas
dependen. Jika constraint kemudian diaktifkan,
constraint dependen tidak diaktifkan secara otomatis
• Sintaks dan contoh:
ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name [CASCADE];

ALTER TABLE copy_departments


DISABLE CONSTRAINT c_dept_dept_id_pk CASCADE;;

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 19
Mengaktifkan Constraint
• Untuk mengaktifkan constraint integritas yang saat ini
dinonaktifkan, gunakan klausa ENABLE dalam pernyataan
ALTER TABLE
• ENABLE memastikan bahwa semua data yang masuk sesuai
dengan constraint
• Sintaks dan contoh:
ALTER TABLE table_name
ENABLE CONSTRAINT constraint_name;
ALTER TABLE copy_departments
ENABLE CONSTRAINT c_dept_dept_id_pk;
• Anda dapat menggunakan klausa ENABLE di pernyataan
CREATE TABLE dan pernyataan ALTER TABLE

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 20
Mengaktifkan Pertimbangan Constraint
• Jika Anda mengaktifkan constraint, constraint itu berlaku
untuk semua data dalam tabel
• Semua data dalam tabel harus sesuai dengan constraint
• Jika Anda mengaktifkan constraint UNIQUE KEY atau
PRIMARY KEY, indeks UNIQUE atau PRIMARY KEY dibuat
secara otomatis
• Mengaktifkan constraint PRIMARY KEY yang dinonaktifkan
dengan opsi CASCADE tidak mengaktifkan foreign key apa
pun yang bergantung pada primary key
• ENABLE mengaktifkan kembali constraint setelah Anda
mematikannya

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 21
Menyusun Constraint secara Cascade
• Menyusun constraint integritas referensial secara cascade
memungkinkan Anda untuk menentukan tindakan yang
dilakukan server database ketika pengguna mencoba
menghapus atau memperbarui key yang ditunjuk oleh
foreign key
• Klausa CASCADE CONSTRAINTS digunakan bersama dengan
klausa DROP COLUMN
• Klausa ini menghapus semua constraint integritas
referensial yang merujuk pada primary key dan unique
yang didefinisikan pada kolom yang dihapus
• Klausa ini juga menghapus semua constraint multikolom
yang didefinisikan pada kolom yang dihapus

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 22
Menyusun Constraint secara Cascade
• Jika pernyataan ALTER TABLE tidak menyertakan opsi
CASCADE CONSTRAINTS, segala upaya untuk
menghapus primary key atau constraint multikolom
akan gagal
• Ingat, Anda tidak bisa menghapus nilai induk jika nilai
anak ada di tabel lain
ALTER TABLE table_name
DROP(column name(s)) CASCADE CONSTRAINTS;

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 23
Ketika CASCADE Tidak Diperlukan
• Jika semua kolom direferensikan oleh constraint yang
didefinisikan pada kolom yang dihapus juga dihapus, maka
CASCADE CONSTRAINTS tidak diperlukan
• Misalnya, dengan asumsi bahwa tidak ada constraint
referensial lain dari tabel lain merujuk ke kolom PK, valid
untuk mengirimkan pernyataan berikut tanpa klausa
CASCADE CONSTRAINTS:
ALTER TABLE tablename DROP
(pk_column_name(s));

• Namun, jika ada constraint yang dirujuk oleh kolom dari


tabel lain atau kolom yang tersisa di tabel target, Anda
harus menentukan CASCADE CONSTRAINTS untuk
menghindari kesalahan

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 24
Melihat Constraint
• Setelah membuat tabel, Anda dapat mengonfirmasi
keberadaannya dengan mengeluarkan perintah
DESCRIBE
• Satu-satunya constraint yang dapat Anda verifikasi
menggunakan DESCRIBE adalah constraint NOT NULL
• Constraint NOT NULL juga akan muncul dalam kamus
data sebagai constraint CHECK

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 25
Melihat Constraint
• Untuk melihat semua constraint pada tabel Anda, kueri
tabel USER_CONSTRAINTS
SELECT constraint_name, table_name, constraint_type, status
FROM USER_CONSTRAINTS
WHERE table_name ='COPY_EMPLOYEES';

CONSTRAINT_NAME TABLE_NAME CONSTRAINT_TYPE STATUS


COPY_EMP_PK COPY_EMPLOYEES P ENABLED
CDEPT_DEPT_ID_FK COPY_EMPLOYEES R ENABLED

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 26
Kueri USER_CONSTRAINTS
• Tipe constraint yang tercantum dalam Kamus Data
adalah:
−P – PRIMARY KEY; R – REFERENCES (foreign key);
−C – Constraint CHECK (termasuk NOT NULL);
−U – UNIQUE
CONSTRAINT_NAME TABLE_NAME CONSTRAINT_TYPE STATUS
COPY_EMP_PK COPY_EMPLOYEES P ENABLED
CDEPT_DEPT_ID_FK COPY_EMPLOYEES R ENABLED

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 27
Terminologi
• Istilah-istilah penting yang digunakan dalam pelajaran
ini di antaranya:
−ALTER TABLE
−Klausa CASCADE
−Klausa CASCADE CONSTRAINT
−DISABLE CONSTRAINT
−DROP COLUMN
−DROP CONSTRAINT
−ENABLE CONSTRAINT

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 28
Rangkuman
• Dalam pelajaran ini, Anda seharusnya telah
mempelajari cara:
−Mencantumkan empat fungsi berbeda yang dapat dilakukan
oleh pernyataan ALTER pada constraint
−Menuliskan pernyataan ALTER TABLE untuk menambahkan,
menghapus, menonaktifkan, dan mengaktifkan constraint
−Menyebutkan fungsi bisnis yang memerlukan DBA untuk
menghapus, mengaktifkan, dan/atau menonaktifkan
constraint atau menggunakan
sintaks CASCADE
−Mencari kamus data untuk
USER_CONSTRAINTS dan
−menafsirkan informasi yang
dihasilkan

DP 14-3
Mengelola Constraint Hak cipta © 2020, Oracle dan/atau afiliasinya. Semua hak dilindungi undang-undang. 29

Anda mungkin juga menyukai