Database Management Systems Bab 3 Model Relasional (Chap Database Management Systems Bab 3 Model Relasional (Chap. 3 – Ramakrishnan)
Pokok Bahasan Bagaimana data direpresentasikan dalam model relasional? Integrity constraints apa yang dapat dinyatakan? Bagaimana data dapat dibuat dan dimodifiksi? Bagaimana data dapat dimanipulasi dan dipertanyakan (queried)? Bagaimana tabel dapat dibuat, dimodifikasi, dan dipertanyakan dengan menggunakan SQL? Bagaimana desain basis data dapat diperoleh dari ER diagram yang telah dibuat sebelumnya? Apa yang dimaksud dengan views dan mengapa views digunakan?
Mengapa Belajar Model Relasional? Model yang paling luas penggunaannya Vendors: IBM, Informix, Microsoft, Oracle, Sybase, dll. “Legacy systems” dlm model-model yang lebih tua Contoh, IBM’s IMS Kompetitor terkini: object-oriented model ObjectStore, Versant, Ontos Perpaduan yang muncul: object-relational model Informix Universal Server, UniSQL, O2, Oracle, DB2 2
Basis Data Relasional: Definisi Basis data relasional: satu set relasi (relations) Relasi: dibagi menjadi 2 bagian: Instance : sebuah tabel (table), dengan sejumlah baris (rows) dan kolom (columns). #Baris = kardinalitas (cardinality), #fields = degree / arity. Skema : menspesifikasikan nama tabel/relasi, ditambah nama dan tipe dari setiap kolom/field/attribute, beserta domain dari setiap field. Contoh: Students(sid: string, name: string, login: string, age: integer, gpa: real). Sebuah relasi dapat dipandang sebagai satu set dari sejumlah baris atau tuples (yaitu, semua baris hrs berbeda nilainya). 3
Basis Data Relasional: Domain Constraints Domain constraints dalam skema menjelaskan kondisi penting yang diinginkan agar setiap “instance” dari relasi memenuhi: Nilai-nilai yang muncul dalam sebuah kolom hrs diisi dari domain yang diasosiasikan dengan kolom tersebut Dengan demikian, domain dari sebuah field essensinya adalah “tipe” (dalam terminologi pemrograman), dan membatasi nilai-nilai yang boleh dimunculkan dalam field Domain constraints merupakan aspek yang sangat fundamental dalm model relasional, sehingga hanya “relation instances” yang memenuhi domain constraints dalam suatu skema relasi yang perlu diperhatikan 3
Contoh Instance dari Relasi Students Fields (Attributes / Kolom) Nama Field Tuples (Records / Baris) Kardinalitas (#Baris) = 3, degree (#Kolom) = 5, semua baris nilainya berbeda Apakah semua kolom dalam sebuah “relation instance” harus berbeda? 4
Bahasa-bahasa Relational Query Kekuatan utama dari model relasional: menyediakan metode untuk menanyakan (queying) data yang sederhana dan ampuh Queries dapat ditulis secara intuitif, dan DBMS bertanggung jawab untuk melakukan evaluasi secara efisien. Ide kunci: pemaknaan (semantik) yang akurat untuk relational queries. Memungkinkan “optmizer” untuk secara ekstensif melakukan “re-order operations”, dan tetap menjamin bahwa jawaban yang dihasilkan tidak berubah. 9
The SQL Query Language Dikembangkan oleh IBM (system R) pada tahun 1970-an Memerlukan suatu “standarisasi” karena SQL digunakan oleh banyak vendors Standards: SQL-86 (standar pertama) SQL-89 (revisi kecil-kecilan / minor revision) SQL-92 (revisi besar-besaran / major revision) SQL-99 (perluasan besar-besaran / major extensions, standar terkini)
Membuat Relasi dalam SQL Membuat relasi “Students”. Perhatikan bahwa tipe (domain) dari setiap field dispesifikasikan, dan akan dipaksaoleh DBMS bilamana terdapat penambahan atau modifikasi tuples (baris). Contoh yang lain, tabel “Enrolled” yang menyajikan informasi mengenai mata kuliah (courses) yang diambil students. CREATE TABLE Students (sid: CHAR(20), name: CHAR(20), login: CHAR(10), age: INTEGER, gpa: REAL) CREATE TABLE Enrolled (sid: CHAR(20), cid: CHAR(20), grade: CHAR(2)) 15
Menghapus dan Merubah Relasi DROP TABLE Students Menhapus relasi Students. Informasi skema dan baris-baris (tuples) dari tabel Students dihapus dari basis data ALTER TABLE Students ADD COLUMN firstYear: integer Skema Students diubah dengan menambahkan sebuah field (kolom) baru. Untuk ini, setiap baris dalam “instance” terkini diperluas dengan nilai null dalam field baru yang ditambahkan. 16
Menambah dan Menghapus Tuples Dapat menyisipkan satu tuple baru menggunakan: INSERT INTO Students (sid, name, login, age, gpa) VALUES (53688, ‘Smith’, ‘smith@ee’, 18, 3.2) Dapat menghapus semua tuples yang memenuhi beberapa kondisi (misal, name = Smith): DELETE FROM Students S WHERE S.name = ‘Smith’ SQL menyediakan beberapa variasi yang ampuh dari perintah-perintah di atas, lihat bab lebih lanjut mengenai SQL! 10
The SQL Query Language (Cont’d) Untuk mendapatkan semua students berusia 18 tahun, dapat ditulis dengan: SELECT * FROM Students S WHERE S.age=18 Untuk hanya mendapatkan “name” dan “logins”, tukar baris pertama menjadi: SELECT S.name, S.login FROM Students S WHERE S.age=18 SI: 19/9/2003
Querying Multiple Relations Apa yang dilakukan oleh query berikut? SELECT S.name, E.cid FROM Students S, Enrolled E WHERE S.sid=E.sid AND E.grade=“A” Jika diberikan “instance” dari relasi “Enrolled” berikut? Akan diperoleh hasil: Untuk kedua relasi: “Students” dan “Enrolled” di atas, mungkinkah DBMS menjamin referential integrity?
Integrity Constraints (ICs) IC: kondisi yang hrs dipenuhi utk sembarang instance dari basis data. Contoh, domain constraints. ICs dispesifikasikan pada saat mendefinisikan skema. ICs diperiksa pada saat relasi dimodifikasi. Sebuah instance yang legal dari sebuah relasi adalah instance yang memenuhi semua ICs yang telah dispesifikasikan. DBMS seharusnya tidak membolehkan instances yang ilegal. Jika DBMS melakukan pengecekan ICs, maka data yang disimpan akan menjadi lebih dapat dipercaya dalam dunia nyata. Selain itu, terjadinya kesalahan entry data juga harus dihindari ! 5
Primary Key Constraints Satu set fields dpt menjadi key dari sebuah relasi jika : Tidak terdapat dua buah tuples yang dapat memiliki nilai yang sama pada satu set fields tersebut, dan Kondisi (1) harus tidak terpenuhi untuk sembarang subset dari key Jika kondisi (2) tidak terpenuhi? disebut superkey. Jika terdapat key > 1 utk sebuah relasi, salah satu key hrs dipilih (oleh DBA) utk dijadikan primary key. Contoh, field sid adalah key (sekali gus sebagai primary key) utk relasi “Students”. Bagaimana dengan field name ? Satu set fields {sid, gpa} adalah sebuah superkey. 6
Primary dan Candidate Keys dlm SQL Boleh terdapat banyak candidate keys (dispesifikasikan menggunakan keyword UNIQUE), salah satu di antaranya hrs dipilih sebagai primary key. “Utk satu pasang fields student & course, terdapat satu grade.” v.s. “Student hanya boleh mengambil satu course, dan memperoleh satu grade utk course tsb.; selain itu, tidak boleh ada dua students dlm satu course memperoleh grade yang sama.” Dalam praktek, jika digunakan secara cermat, sebuah IC dapat mencegah membengkaknya penyimpanan database instances! CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid) ) CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid), UNIQUE (cid, grade) ) 6
Foreign Keys, Referential Integrity Foreign key : Satu set fields dlm satu relasi (pertama) yang digunakan utk “mengacu (refer)” ke satu set fields dlm relasi lainnya (kedua). Hrs mengacu ke primary key dari relasi kedua. Menyerupai konsep sebuah `logical pointer’. Contoh, sid dalam relasi Enrolled adalah sebuah foreign key yang mengacu ke relasi Students: Students(sid: string, name: string, login: string, age: integer, gpa: real). Enrolled(sid: string, cid: string, grade: string) Jika semua “foreign key constraints” dipaksa, maka referential integrity akan diperoleh; yaitu tidak ada referensi yang menggantung (no dangling references). Adakah model data yang tidak menggunakan konsep referential integrity? Ada, yaitu konsep Links dalam HTML ! 7
Foreign Keys dalam SQL Hanya mahasiswa yang terdaftar dalam relasi Students yang diperbolehkan utk mengambil (enroll) mata kuliah (courses) yang ditawarkan. CREATE TABLE Enrolled (sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid, cid), FOREIGN KEY (sid) REFERENCES Students ) Enrolled Students 7
Memaksakan Referential Integrity Perhatikan relasi Students dan Enrolled; field sid dalam Enrolled adalah foreign key yang mengacu ke field sid dalam Students. Apa yang harus dilakukan jika terdapat sebuah tuple yang akan disisipkan (inserted) ke dlm relasi Enrolled dengan sid yang tidak ditemukan dlm relasi Students? Tolak operasi tsb. (Reject it) ! Apa yang hrs dilakukan jika sebuah tuple dalam relasi Students akan dihapus (deleted)? Beberapa tindakan alternatif: Semua tuples dlm relasi Enrolled yang mengacu ke relasi Students harus juga dihapus Melarang penghapusan tuples dlm relasi Students yang diacu oleh relasi-relasi lainnya Ubah sid utk tuples dlm relasi Enrolled yang mengacu ke tuple dlm relasi Students yang dihapus ke suatu default sid atau sid lainnya Ubah sid utk tuples dlm relasi Enrolled yang mengacu ke tuple dlm relasi Students yang dihapus ke suatu nilai spesial null, yang menyatakan `unknown’ atau `inapplicable’. (Hanya dpt dilakukan jika sid bukan merupakan bagian dari sebuah primary key!) Tindakan serupa hrs dilakukan jika primary key dari suatu tuple dalam relasi Students tuple akan diubah (updated). 13
Referential Integrity dalam SQL SQL/92 dan SQL/99 mendukung semua 4 pilihan utk operasi deletes dan updates. Default-nya adalah NO ACTION (delete/update is rejected) CASCADE (menghapus semua tuples yang mengacu ke tuple yang dihapus) SET NULL / SET DEFAULT (menset nilai foreign key dari tuple yang mengacu ke tuple relasi lain) CREATE TABLE Enrolled (sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid), FOREIGN KEY (sid) REFERENCES Students ON DELETE CASCADE ON UPDATE SET DEFAULT ) 14
Dari Mana ICs Berasal ? ICs didasarkan pada semantik dari kenyataan dalam suatu perusahaan yang dijelaskan dalam sejumlah relasi dalam basis data. Suatu “database instance” dapat diperiksa utk melihat apakah suatu IC dilanggar atau tidak, tetapi kita boleh TIDAK PERNAH menyimpulkan bahwa sebuah IC adalah benar dengan cara melihat suatu instance. Sebuah IC adalah pernyataan mengenai semua instances yang mungkin ! Dari contoh, misalnya, kita tahu bahwa name bukan sebuah key, tetapi tuntutan bahwa sid adalah sebuah key hrs diberikan. Key IC dan foreign key IC adalah jenis ICs yang paling umum; tetapi general ICs juga disediakan/didukung.
Desain Basis Data Logikal: Pemetaan ERD ke Relasi Entity sets menjadi Tables: Employees ssn name lot CREATE TABLE Employees( ssn CHAR(11), name CHAR(20), lot INTEGER, PRIMARY KEY (ssn)) The slides for this text are organized into several modules. Each lecture contains about enough material for a 1.25 hour class period. (The time estimate is very approximate--it will vary with the instructor, and lectures also differ in length; so use this as a rough guideline.) This covers Lectures 1 and 2 (of 6) in Module (5). Module (1): Introduction (DBMS, Relational Model) Module (2): Storage and File Organizations (Disks, Buffering, Indexes) Module (3): Database Concepts (Relational Queries, DDL/ICs, Views and Security) Module (4): Relational Implementation (Query Evaluation, Optimization) Module (5): Database Design (ER Model, Normalization, Physical Design, Tuning) Module (6): Transaction Processing (Concurrency Control, Recovery) Module (7): Advanced Topics 3
Relationship Sets menjadi Tables since name dname ssn lot did budget Employees Works_In Departments Dalam memetakan sebuah relationship set ke sebuah relasi, fields dari relasi harus memasukkan: Keys untuk setiap entity set yang berpartisipasi (sebagai foreign keys). Set dari attributes ini membentuk sebuah primary key dari relasi. Semua attributes deskriptif. CREATE TABLE Works_In( ssn CHAR(11), did INTEGER, since DATE, PRIMARY KEY (ssn, did), FOREIGN KEY (ssn) REFERENCES Employees, FOREIGN KEY (did) REFERENCES Departments) 5
Review: Key Constraints Setiap Department paling banyak memiliki seorang employee sbg manager, berdasarkan pada key constraint dari Manages. since lot name ssn dname did budget Manages Employees Departments Bagaimana Pemetaannya ke model relasional? 1-to-1 1-to Many Many-to-1 Many-to-Many 6
Memetakan ER Diagrams dengan Key Constraints CREATE TABLE Manages( ssn CHAR(11), did INTEGER, since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees, FOREIGN KEY (did) REFERENCES Departments) Petakan relationship menjadi sebuah table: Ingat bhw sekarang did menjadi key! Pisahkan tabel utk Employees dan utk Departments. Oleh karena setiap department mempunyai seorang manager yang unik, maka Manages dan Departments dapat dikombinasikan menjadi satu relasi (Dept_Mgr) CREATE TABLE Dept_Mgr( did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11), since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees) 7
Review: Participation Constraints Apakah setiap department mempunyai seorang manager? Jika ya, hal ini menyatakan participation constraint: partisipasi dari Departments dlm Manages adalah total, sedang partisipasi Employee dlm manages adalah partial. Setiap nilai did dlm tabel Departments hrs muncul dlm setiap baris dari tabel Manages (dengan non-null ssn value!) did budget ssn name since lot Manages dname Works_in Departments Employees 8
Participation Constraints dlm SQL Pemetaan untuk relationship Manages CREATE TABLE Dept_Mgr( did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11) NOT NULL, since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees ON DELETE NO ACTION) CREATE TABLE Works_In( ssn CHAR(11) NOT NULL, did INTEGER NOT NULL, since DATE, PRIMARY KEY (ssn, did), FOREIGN KEY (ssn) REFERENCES Employees ON DELETE CASCADE, FOREIGN KEY (did) REFERENCES Departments ON DELETE CASCADE) Pemetaan untuk relationship Works_In 9
Review: Weak Entities Sebuah weak entity dpt diidentifikasi secara unik hanya dengan memperhatikan key dari entity lainnya (owner entity). Owner entity set dan weak entity set hrs berpartisipasi dlm sebuah one-to-many relationship set (one owner, many weak entities). Weak entity set hrs mempunyai partisipasi total dlm identifying relationship set. lot name age pname Dependents Employees ssn Policy cost 10
Pemetaan Weak Entity Sets Weak entity set dan identifying relationship set dipetakan menjadi satu tabel tunggal. Bilamana owner entity dihapus, semua weak entities yang dimilikinya harus juga dihapus. CREATE TABLE Dep_Policy ( pname CHAR(20), age INTEGER, cost REAL, ssn CHAR(11) NOT NULL, PRIMARY KEY (pname, ssn), FOREIGN KEY (ssn) REFERENCES Employees ON DELETE CASCADE) 11
Review: ISA Hierarchies name ssn Employees lot hourly_wages Contract_Emps ISA Hourly_Emps contractid hours_worked Review: ISA Hierarchies Seperti dlm C++, Java, atau PL lainnya, attributes dpt diwariskan (inherited). Jika dideklarasi A ISA B, maka setiap entity A juga termasuk dlm entity B. Overlap constraints: Dapatkah Ali menjadi seorang Hourly_Emps dan sekaligus juga sebagai seorang Contract_Emps entity? (Allowed/disallowed) Covering constraints: Apakah setiap Employees entity hrs juga menjadi seorang Hourly_Emps atau seorang Contract_Emps entity? (Yes/no) Alasan pengunaan ISA: Utk menambah “attributes deskriptif” yang berlaku secara spesifik utk sebuah subclass tertentu. Utk mengidentifikasi entitities yang berpartisipasi dlm sebuah relationship. 12
Pemetaan ISA Hierarchies menjadi Relasi Pendekatan Umum: 3 relasi: Employees, Hourly_Emps dan Contract_Emps. Employees: setiap employee dicatat dlm Employees (ssn, name, lot) Hourly_Emps: Utk hourly emps, info tambahan dicatat dlm Hourly_Emps (hourly_wages, hours_worked, ssn). Field ssn menjadi kunci tamu yang mengacu ke Employees Contract-Emps: (contract_id, ssn). Field ssn menjadi kunci tamu yang mengacu ke Employees Hourly_Emps tuple atau Contract_Emps tuple hrs dihapus jika Employees tuple yang diacu dihapus Queries yang melibatkan semua employees menjadi mudah, dimana queries yang hanya melibatkan Hourly_Emps memerlukan sebuah “join” dengan Employees utk mendaptkan beberapa attributes. Alternatif: hanya Hourly_Emps dan Contract_Emps. Hourly_Emps: (ssn, name, lot, hourly_wages, hours_worked). Contract_Emps: (ssn, name, lot, contract_id) Setiap employee harus ada dalam salah satu dari kedua subclasses tersebut. 13
Pemetaan ERD yang melibatkan Aggregation Relasi-relasi Employees, Projects dan Departments dipetakan seperti dijelaskan sebelumnya Utk relationship set Monitors, buat relasi baru dengan attributes: key attribut Employees (ssn), key attribute Sponsors (did, pid), dan attribut deskriptif dari relatioship Monitors (until) budget did pid started_on pbudget dname until Departments Projects Sponsors Employees Monitors lot name ssn since Pemetaan di atas pada dasarnya merupakan pemetaan standar untuk suatu relationship set, seperti dijelaskan sebelumnya 12
Review: Binary v.s. Ternary Relationships name ssn lot pname age Jika setiap “policy” hanya dimiliki oleh 1 employee, dan setiap dependent dikaitkan dengan policy tsb, maka ERD petama kurang akurat! ERD kedua lebih baik. Constrants tambahan apa yang terdapat dalam ERD kedua? Covers Employees Dependents Bad design Policies policyid cost name Employees ssn lot pname age Dependents Purchaser Beneficiary Better design policyid cost Policies 7
Pemetaan Binary v.s. Ternary Relationships Key constraints membolehkan kita untuk mengombinasikan Purchaser dengan Policies dan Beneficiary dengan Dependents. Participation constraints mengarah pada NOT NULL constraints. Bgm jika Policies adalah sebuah weak entity set? CREATE TABLE Policies ( policyid INTEGER, cost REAL, ssn CHAR(11) NOT NULL, PRIMARY KEY (policyid). FOREIGN KEY (ssn) REFERENCES Employees, ON DELETE CASCADE) CREATE TABLE Dependents ( pname CHAR(20), age INTEGER, policyid INTEGER, PRIMARY KEY (pname, policyid). FOREIGN KEY (policyid) REFERENCES Policies, ON DELETE CASCADE) 8
Views Sebuah view pada dasarnya adalah sebuah relasi, tetapi yang disimpan hanya berupa sebuah definisi, dari pada satu set tuples. Contoh: CREATE VIEW YoungActiveStudents (name, grade) AS SELECT S.name, E.grade FROM Students S, Enrolled E WHERE S.sid = E.sid and S.age < 21 Views dpt dihapus dengan menggunakan perintah DROP VIEW. Bagaimana menangani DROP TABLE jika terdapat sebuah view pada tabel tersebut? Perintah DROP TABLE mempunyai pilihan yang memungkinkan pengguna utk menspesifikasikan hal tersebut. 18
Views dan Securitas Views dapt digunakan untuk menyajikan informasi (atau rangkuman informasi) yang diperlukan dengan menyembunyikan detil dari relasi-relasi yang mendasarinya. Seperti dalam contoh sebelumnya, dengan view YoungActiveStudents, BUKAN relasi Students atau Enrolled, kita dapat memperoleh daftar students yang telah melakukan enrollment (tetapi bukan nomor cid dari courses dimana mereka telah melakukan enrollment). 22
Rangkuman: Model Ralasional Representasi data secara tabular (flat tables) Model data sederhana dan intuitif yang pada saat ini paling luas penggunaannya Integrity constraints dapat dispesifikasikan oleh DBA, berdasarkan pada kebutuhan (semantik) dari aplikasi. DBMS melakukan pengecekan pelanggaran: Dua ICs penting: primary key dan foreign key Sbg tambahan, kita selalu memiliki domain constraints Tersedianya bahasa utk query yang alamiah dan ampuh Aturan-aturan utk memetakan diagram ER ke model relasional 15