Sunday 24 February 2013

Nak Link Table : Join atau Relate?


OK..kali ni kita sentuh sedikit tentang konsep Relational Database dan penggunaannya di dalam ArcGIS. Anda yang dah biasa gunakan data-data spatial seperti shapefile atau geodatabase featureclass tentu tahu kan, setiap featureclass akan ada table masing-masing yang dipanggil Feature Attribute Table (FAT). Setiap feature ni mempunyai ID unik di dalam FAT tersebut yang dipanggil Feature Identifier (FID).  FID ni bertujuan untuk menghubungkan setiap feature point, line, polygon pada rekod di dalam table. Sebab tu dalam GIS, bila anda query table, feature akan dihighlight di atas peta, dan kalau anda select feature di atas peta pulak, rekod di dalam FAT tu pun akan dihighlight. Semua tu berlaku sebab adanya FID ni.



Maklumat dalam table FAT tu anda boleh juga link ke table-table yang lain. Cuba bayangkan di jabatan anda dah ada sistem pangkalan data yang menyimpan maklumat terperinci sesuatu lot tanah, contohnya nama pemilik tanah, maklumat cukai, kategori tanah, hakmilik dan lain-lain. Sekiranya anda dah ada layer lot, semua maklumat ni boleh dilink ke table FAT layer lot anda supaya analisis lebih terperinci boleh dibuat kat layer lot anda tu.

Di dalam ArcGIS, maklumat dari satu table boleh dilink ke table yang lain kerana data model di dalam ArcGIS adalah berasaskan kepada konsep Relational Database. Dalam kata lain, maklumat dari satu table boleh dikaitkan(relate) dengan table yang lain asalkan dalam kedua-dua table yang nak di link tu ada column yang menyimpan maklumat attribut yang sama. Contohnya katalah layer lot anda ada maklumat nombor lot yang unik, table pemilik lot pun ada nombor lot yang unik, so bolehlah anda linkkan layer lot tu ke table pemilik lot menggunakan column nombor lot.



Di dalam ArcMap ada dua kaedah untuk anda linkkan table ni iaitu kaedah Join dan kaedah Relate. Bezanya, Join akan merge table yang anda link menjadi satu table.

Join akan merge dua table menjadi satu table


Relate pula tak akan merge table anda, sebaliknya table anda still maintain table yang berasingan, tetapi ArcGIS tahu ada connection antara table yang anda link tu dan bagaimana nak panggil related record tu.

Relate akan maintain table berasingan tetapi match record
akan dilinkkan.

Jenis Relationship

Jadi...macamana nak tahu bila masa nak pakai Join dan bila masa nak pakai Relate? Jawapannya anda kena tahu dulu jenis relationship antara table yang anda nak linkkan. Untuk nak faham jenis relationship ni, anda kena faham dulu maksud berikut :-

  • Origin table
  • Destination table
  • Primary Key
  • Foreign Key




Sekarang perhatikan gambar A,B,C dan D di bawah :-

Jenis relationship


Di dalam konsep Relational Database, terdapat 4 jenis relationship yang asas iaitu :-

  • one-to-one (1-1)
  • one-to-many (1-*)
  • many-to-one (*-1)
  • many-to-many (*-*)


Alamak, banyaknya jenis relationship. Macamana kita nak tahu jenis relationship antara table yang kita nak link tu yang mana satu dari 4 kategori tu. Jawapannya anda kena tahu dulu table mana yang anda anggap sebagai Origin dan table mana yang anda anggap sebagai Destination.  Kita ambil semula contoh gambar di atas. Katakan anda nak link table pemilik ke table layer lot. Dalam kes ni lot akan menjadi Origin dan table pemilik akan jadi Destination. Field/column dari table lot yang akan anda gunakan untuk link dipanggil Primary Key manakala field/column dari table pemilik yang akan dilink dipanggil Foreign Key.

Cara bacaan jenis relationship pula adalah dari Origin Table ke Destination Table. Maksudnya relationship rajah A ialah one-to-one, rajah B one-to-many, rajah C many-to-one dan rajah D many-to-many.

Kenapa perlu faham dulu jenis relationship ni? Sebabnya jenis relationship ni akan menentukan kaedah mana yang sesuai anda gunakan untuk link table dalam ArcMap, samada kaedah Join atau kaedah Relate. Join digunakan sekiranya relationship anda many-to-one atau one-to-one. Relate pula sekiranya data anda one-to-many atau many-to-many.

Kaedah Join

Sekarang kita lihat kembali contoh di bawah.

Contoh many-to-one


Saya ada layer landuse tapi dalam table landuse saya hanya menyimpan maklumat landusecode. Kalau saya nak design peta landuse untuk cetakan, takkan kat Map Legend tu saya nak letak kod betul tak. Nanti orang baca peta saya pun tak faham, apa maksud kod 1, kod 2, kod 12 etc. Kebetulan saya ada satu table berasingan yang menyimpan penerangan untuk setiap landusecode tersebut. Jadi saya boleh linkkan kedua-dua table ni untuk mendapatkan penerangan jenis gunatanah, seterusnya saya boleh gunakan maklumat jenis gunatanah tu sebagai Map Legend di atas peta saya.
Kalau lihat dari Origin dan Destination tu, apa jenis relationship dia? Many-to-one kan? So kalau many-to-one kita guna kaedah apa? Jawapannya Join. Untuk Join, rujuk step gambar di bawah :-



Penerangan gambar :-
  1. Right click kat layer Origin dan pilih Join and Relates > Join...
  2. Pastikan anda pilih Join attributes from a table
  3. Pilih field Primary Key dari Origin Table. Dalam contoh ni field dari layer Landuse.
  4. Pilih nama Destination Table yang anda nak linkkan.
  5. Pilih field Foreign Key dari Destination Table.
  6. Klik OK.


Lepas anda join kedua-dua table tu, bolehlah anda gunakan maklumat penerangan kod landuse tu untuk buat analisis dan mapping.



Kaedah Relate

Untuk contoh berikutnya, saya ada layer stesen kualiti sungai yang mengandungi ID unik stesen. Seterusnya di jabatan saya ada satu table yang menyimpan maklumat cerapan kualiti sungai setiap bulan mengikut stesen. Katakan saya ingin melihat berapakah bacaan kualiti sungai di setiap stesen pada bulan Januari, Februari sehinggalah Disember pada tahun-tahun tertentu. Ini adalah satu contoh one-to-many kerana satu stesen ada banyak bacaan kualiti sungai (Jan, Feb, Mac.... Dis). Disebabkan jenis relationship adalah one-to-many, saya akan gunakan kaedah Relate untuk link maklumat kedua-dua table ni.
Rujuk gambar di bawah untuk steps kaedah Relate :-



Penerangan gambar :-
  1. Right click kat layer Origin dan pilih Join and Relates > Relate...
  2. Pilih field Primary Key dari Origin Table. Dalam contoh ni field dari layer Station.
  3. Pilih nama Destination Table yang anda nak linkkan.
  4. Pilih field Foreign Key dari Destination Table.
  5. Namakan Relate anda.
  6. Klik OK.


Bila kedua-dua table tu dah relate, macamana anda nak lihat result dari relate tu? Ada dua cara.. kalau anda guna kaedah Identify, maklumat related record tu akan dipapar di Identify Window. Rujuk gambar di bawah :-



Penerangan gambar :-
  1. Klik tool Identify
  2. Klik station yang anda nak paparkan maklumat di peta.
  3. Maklumat dari Origin Table akan dipaparkan. Klik pada Primary Key.
  4. Nama Destination Table dipapar. Klik pada nama Destination Table.
  5. Senarai record yang match akan dipaparkan. Klik pada setiap rekod.
  6. Detail maklumat setiap rekod dari Destination Table akan dipaparkan.

Tu kalau anda nak lihat maklumat Destination Table guna kaedah Identify. Kalau anda guna kaedah Query, record dari Destination Table yang match akan dipapar kalau anda klik button Related Table dari Origin Table. Contoh seperti gambar di bawah:-



Ok..sekarang dah faham bila nak guna Join atau Relate? Senang je kan. Secara ringkasnya :-

one-to-one  : Join
many-to-one : Join
one-to-many : Relate
many-to-many : Relate




5 comments:

  1. Salam... sangat-sangat membantu dalam memahami konsep GIS dan kaitan dengan DBMS... teruskan usaha yang sangat murni ini... semoga Allah memberkati usaha tuan

    ReplyDelete
  2. Thanks, post yg ditunggu2, thanks a lot

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. tq bos.. banyak membantu ni

    ReplyDelete