Pembinaan Gambarajah Hubungan Entiti (ER-Diagram)

Pengenalan

Sebelum sistem pangkalan data dapat dibina, kita perlu menyediakan gambarajah ER yang lengkap. Sebarang kesilapan atau ralat yang timbul bila kita melakukan proses pembinaan sistem biasanya berpunca daripada gambarajah yang tidak sempurna hubungannya. Penulis mengandaikan bahawa anda semua sudah tahu maksud entiti, atribut, hubungan (relation) dan sebagainya.

[Isi Kandungan | Langkah Berikut ]

Cara Membina ER Diagram

Di sini ditunjukkan contoh serta penerangan bagaimana ER-Diagram boleh dibina.

Masalah MANY TO MANY

Katakan anda hendak membina sistem berkaitan dengan pendaftaran subjek oleh pelajar. Bayangkan seorang STUDENT akan mengambil satu atau lebih SUBJECT. Begitu juga dengan satu SUBJECT yang akan diambil oleh ramai STUDENT. Ini menjadikan hubungan bagi kedua-dua entiti tersebut adalah MANY TO MANY. Oracle tidak membenarkan keadaan ini berlaku. Kita perlu mempunyai satu lagi entiti supaya hubungannya adalah ONE TO MANY. Seperti gambarajah di bawah, entiti tersebut ialah REGISTRATION.


                       ---------                  ---------
                      | STUDENT |>--------------<| SUBJECT |
                       ---------                  --------- 


                      di tambah entiti REGISTRATION menjadi


           ---------      A       --------------      B       ---------
          | STUDENT |- - - -----<| REGISTRATION |>----- - - -| SUBJECT |
           ---------              --------------              --------- 
          IC ITM     PK --------> FK          FK <---------PK SUBJ CODE

 PK = Primary Key
 FK = Foreign Key

                                Gambarajah 1
(A)
Each STUDENT may be RECORDED IN one or more REGISTRATIONS
Each REGISTRATION must be FOR one and only one STUDENT

(B)
Each SUBJECT may be PART OF one or more REGISTRATIONS
Each REGISTRATION must be FOR one and only one SUBJECT

Dari gambarajah ini apabila anda jana (generate) table menggunakan Case Generator, Primary Key dari table STUDENT dan SUBJECT akan didapati dalam table REGISTRATION sebagai Foreign Key. Ini bermakna anda tidak perlu ada atribut seperti IC ITM atau SUBJ CODE di dalam entiti REGISTRATION kerana Oracle akan bina sendiri atribut tersebut. Ia berlaku disebabkan oleh hubungan ONE TO MANY.

Oleh itu ketika data hendak dimasukkan ke dalam table REGISTRATION, bagi Foreign Key IC ITM dan SUBJ CODE, ia akan merujuk table STUDENT dan SUBJECT untuk mendapatkan senarai IC ITM dan SUBJ CODE yang sudah ada. Maknanya di sini sekiranya IC ITM yang ada dalam table STUDENT ialah 90707085, 90707086 dan 90707087, kita cuma boleh masukkan nilai itu sahaja dalam table REGISTRATION. Sekiranya kita ingin masukkan IC selain daripada apa yang ada, contohnya nilai 90707090, mesej bahawa IC ITM tersebut tidak ada akan dipaparkan. Semua ini boleh dilihat apabila data hendak dimasukkan melalui FORM yang akan kita jana menggunakan Case Generator nanti.

Di sini masalah bagi hubungan MANY TO MANY di antara dua entiti dapat diselesaikan. Pastikan dalam gambarajah hubungan entiti, hanya ada hubungan ONE TO MANY sahaja di antara entiti-entiti. Tidak ada hubungan MANY TO MANY dan tidak ada hubungan ONE TO ONE.



Masalah FOREIGN KEY
                     PK -----> FK             PK ----> FK
          ---------              -----------              ---------
         |    A    |- - - -----<|     B     |- - - -----<|    C    |
          ---------              -----------              ---------
                           
                               Gambarajah 2

Bagi mendapat gambaran lebih jelas bagaimana Oracle menghasilkan Foreign Key dalam suatu table, cuba perhatikan gambarajah ER di atas. Terdapat sedikit perbezaan hubungan di antara gambarajah ini dengan gambarajah yang pertama iaitu bagi entiti B dan C. Dari gambarajah ER tersebut Primary Key bagi A akan wujud dalam B sebagai Foreign Key manakala Primary Key bagi B pula wujud dalam C juga sebagai Foreign Key. Bandingkan gambarajah ini dengan gambarajah yang pertama dan lihat perbezaan hubungan di antara entiti B dan C.

Jika anda masih belum faham lagi, ini contoh terakhir yang dapat penulis berikan. Katakan di dalam data peribadi seorang STUDENT anda ingin simpan maklumat siapa Mentor bagi STUDENT tersebut di mana Mentor berkenaan merupakan seorang LECTURER. Dengan itu hubungannya adalah seperti berikut :-
                      ----------              ---------
                     | LECTURER |- - - -----<| STUDENT |
                      ----------              ---------

                                Gambarajah 3

Seorang LECTURER mengawasi satu atau lebih STUDENT. Dalam table STUDENT, Oracle akan hasilkan satu atribut (foreign key) di dalam table STUDENT di mana atribut ini akan merujuk kepada Primary Key dalam table LECTURER.



Masalah ONE TO ONE

Bagi hubungan ONE TO ONE pula, ada dua cara untuk mengatasinya. Pertama, anda gabungkan kedua-dua entiti menjadi satu entiti. Kedua, anda tukarkan hubungan ONE TO ONE tersebut kepada hubungan ONE TO MANY. Contoh hubungan ONE TO ONE ialah seorang STUDENT mendapat LOAN dari JPA di sepanjang pengajiannya. Entiti LOAN ini menyimpan maklumat seperti nama organisasi berkenaan (JPA), tarikh mula/akhir pinjaman dan jumlah pinjaman setahun.

Bagi cara pertama, kita boleh hapuskan entiti LOAN dengan memasukkan kesemua atribut dari entiti tersebut ke dalam entiti STUDENT. Walau bagaimanapun, keburukan cara ini ialah entiti STUDENT akan mempunyai terlalu banyak atribut.

Bagi cara kedua pula, kita boleh jadikan hubungan di antara dua entiti ini kepada ONE TO MANY iaitu

Each STUDENT may be HAVING one or more LOAN
Each LOAN must be given to one and only one STUDENT

Apa yang hendak dinyatakan di sini, bagi pernyataan one or more, kita cuma mengambil kira one dan bukannya more. Jadi tidak timbul masalah sekiranya anda merasakan pernyataan tersebut tidak sesuai memandangkan seorang STUDENT hanya mendapat satu LOAN sahaja.

Dalam hubungan entiti seperti ini, ramai pelajar yang keliru sama ada perlu atau tidak bagi satu entiti tersebut diletakkan FOREIGN KEY di dalamnya. Sebenarnya ini tidak perlu kerana masalah ini akan diselesaikan oleh Oracle CASE melalui hubungan entiti tersebut dengan entiti-entiti lain. Anda cuma perlu pastikan atribut yang digunakan hanya menerangkan entiti berkenaan sahaja.

Misalnya bagi entiti STUDENT, atribut yang diperlukan ialah IC ITM, NAMA, JANTINA, ALAMAT dan sebagainya. Di sini kita pilih IC ITM sebagai PRIMARY KEY kerana ia boleh mengecam rekod STUDENT secara unik. Memadai hanya satu PRIMARY KEY bagi satu entiti. Ada kemungkinan di mana tiada PRIMARY KEY dalam suatu entiti di mana rekod-rekod akan dicam melalui FOREIGN KEY. Ini akan diterangkan kemudian.



Contoh Gambarajah Hubungan Entiti

Sekarang ini penulis ingin memberi contoh satu sistem pendaftaran subjek yang penulis anggap sempurna dari segi hubungan entiti yang melibatkan empat entiti sahaja. Sistem pendaftaran subjek yang lengkap sebenarnya melebihi empat entiti tapi ia sudah mencukupi bagi tujuan pembelajaran di sini.

Bagi pelajar-pelajar di ITM, mereka biasanya mempunyai empat, enam atau lapan semester untuk menghabiskan pengajian. Ini bermakna setiap STUDENT mempunyai satu atau lebih SEMESTER_RECORD dan setiap SEMESTER_RECORD mengandungi satu atau lebih SUBJECT. Setiap SUBJECT pula mungkin terkandung dalam satu atau lebih SEMESTER_RECORD iaitu bagi pelajar yang terpaksa mengulang SUBJECT tertentu. Oleh kerana hubungan MANY TO MANY antara SUBJECT dan SEMESTER_RECORD maka kita tambah satu lagi entiti REGISTRATION di antara kedua-dua entiti tersebut dan jadikan hubungannya ONE TO MANY seperti dalam gambarajah 1. Gambarajah ER yang baru adalah seperti di bawah.

   ---------    A      ---------     B     --------------      C    ---------
  | STUDENT |- - ----<| SEM REC |- - ----<| REGISTRATION |>---- - -| SUBJECT |
   ---------           ---------           --------------           --------- 
* IC ITM   PK ---> FK * SEMESTER PK ----> FK  Grade    FK <--- PK * SUBJ CODE
  Name                  Gpa                                         Subj name
  Sex                   Cgpa                                        Credit hours
  Address1              Gpa Crdt
  Address2              Cgpa Crdt
  PostCode
  City
  State

 
  PK = Primary Key        
  FK = Foreign Key 
   * = Atribut ini merupakan PRIMARY KEY bagi entiti berkenaan

                                       Gambarajah 4

(A)
Each STUDENT may be HAVING one or more SEMESTER_RECORDS
Each SEMESTER_RECORD must be FOR one and only one STUDENT
(B)
Each SEMESTER_RECORD may be HAVING one or more REGISTRATIONS
Each REGISTRATION must be FOR one and only one SEMESTER_RECORD
(C)
Each SUBJECT may be HAVING one or more REGISTRATIONS
Each REGISTRATION must be FOR one and only one SUBJECT

Dari gambarajah 4, apabila anda selesai melakukan proses default table, table yang terhasil akan mempunyai column seperti berikut.

 STUDENTS
 IC_ITM             NUMBER(8,0)
 NAME               CHAR(35) 
 SEX                CHAR(1) 
 ADDRESS1           CHAR(35) 
 ADDRESS2           CHAR(35) 
 POSTCODE           NUMBER(5,0)
 CITY               CHAR(20) 
 STATE              CHAR(20) 

 SEMESTER_RECORDS
 SEMESTER           DATE
 STUD_IC_ITM        NUMBER(8,0)
 GPA                NUMBER(4,2)
 CGPA               NUMBER(4,2)
 GPA_CRDT           NUMBER(3,0)
 CGPA_CRDT          NUMBER(3,0)

 REGISTRATIONS
 STUD_IC_ITM        NUMBER(8,0)
 SEMREC_SEMESTER    DATE 
 SUBJ_SUBJ_CODE     CHAR(6) 
 GRADE              CHAR(2) 

 SUBJECTS
 SUBJ_CODE          CHAR(6)
 SUBJ_NAME          CHAR(25)
 CREDIT_HOURS       NUMBER(2,0)
[Isi Kandungan]
Copyright © 1995-1999 Fz Sdc
nsr@melayu.com
http://www.melayu.com/nsr


1