Minggu, 25 April 2010

Primary, Foreign, Alternate Key (Oracle)

Primary, Foreign, Alternate Key (Oracle)
Oleh oracle1st
Key dalam Bahasa Indonesia berarti kunci, maka semakna dengan itu fungsi dari key-key yang berada pada sebuah database. Artinya setiap pintu pasti mempunyai kunci khusus untuk membukanya, begitu pula tabel dalam database. Key-key inilah yang membantu dalam pengolahan data pada sebuah tabel (insert, update, delete).
Secara global key-key dalam Oracle dapat dibagi sebagai berikut :

Primary Key : Key yang mengindentifikasikan bahwa setiap record pasti unique. Dalam sebuah tabel hanya diperbolehkan satu primary key, tidak lebih. Misalnya adalah tabel MURID, tidak ada murid yang memiliki NIS (Nomor Induk Siswa) yang sama dalam keadaan real, kemudian diimplementasikan dalam bentuk tabel dengan diberikan primary key pada kolom NIS.

Foreign Key : Key yang dihasilkan dari primary key dari tabel lain sebagai bentuk referensi dari tabel lain tersebut. Misalnya adalah tabel BELAJAR, dalam proses pembelajaran dibutuhkan kelas, guru dan apa yang dipelajari alias mata pelajaran, maka diimplementasikan dalam sebuah tabel bahwa dalam tabel BELAJAR terdapat foreign key (key asing) dari tabel KELAS, GURU dan MATA_PELAJARAN. Dari definisi key ini kita dapat mengetahui istilah MASTER-DETAIL.

Alternate Key (Unique Key) : Key ini sebenarnya hampir sama dengan fungsi primary key yaitu berjenis unique key. Maksudnya adalah mungkin saja primary key yang kita buat pada suatu tabel adalah merupakan autonumber (angka yang bertambah terus-menerus ketika proses insert data, sehingga tidak dimungkinkan terdapat nilai yang sama), dikarenakan tidak diperbolehkan ada dua primary key maka dapat dibantu oleh alternate key ini sebagai penanda unique-nya sebuah record dengan record lain. Dalam sebuah tabel diperbolehkan lebih dari satu alternate key.

Non Unique Key : Key yang bisa lebih dari satu dalam sebuah tabel dan tidak mendefinisikan unique antar record di dalam table tersabut. Key ini biasa digunakan untuk membantu proses pencarian (select) data pada sebuah kolom yang sering digunakan untuk proses tersebut.
Setelah mengetahui definisi “mudah” dari setiap key maka ada beberapa tips yang harus diperhatikan dalam pemberian key pada kolom-kolom dalam sebuah tabel :

1. Pastikan sebuah tabel mempunyai primary key.
2. Pastikan primary key tersebut mewakili unique-nya sebuah record.
3. Ada baiknya menjadikan satu kolom saja untuk sebuah primary key sebagai autonumber mewakili beberapa kolom yang merupakan unique-nya record. Mis : tabel BELAJAR mempunyai tiga kolom sebagai primary key, yaitu : NIG, Kode_MP, dan Kelas_ID, maka ketiga kolom tersebut dapat dijadikan alternate key, dan untuk primary key-nya dibuatkan satu kolom lagi, yaitu Belajar_ID. Ini akan mempermudah jika ada tabel yang mengambil primary key pada tabel BELAJAR sebagai foreign key tabel tersebut.
4. Jangan terlalu banyak dalam pembuatan alternate key, karena key ini akan memperlambat proses insert dan update pada tabel tersebut. Secara logika alternate key akan mengecek ke-unique-kan seluruh record dari setiap record baru yang di-insert atau perubahan data pada record. Bayangkan jika datanya cukup besar… dan banyak alternate key… !!
5. Pilihlah dengan baik alternate key karena alternate key akan mempermudah dan mempercepat proses select jika digunakan. Maksudnyanya adalah KOLOM-KOLOM dalam alternate key tersebut yang digunakan.
6. Gunakan Non-unique key untuk kolom yang sering digunakan dalam proses select.
7. Gunakan penamaan key-key tersebut dengan penamaan yang baik dan mudah diidentifikasikan, seperti BELAJAR_PK (primary key tabel BELAJAR), BELAJAR#GURU_FK (foreign key pada tabel BELAJAR dari tabel GURU), dan BELAJAR_AK (alternate key tabel BELAJAR)


Untuk cara pembuatan key-key tersebut dapat dilihat dari contoh berikut :


/*==============================================================*/
/* Table: BELAJAR */
/*==============================================================*/
create table BELAJAR (
NIG VARCHAR2(32) not null,
KODE_MP VARCHAR2(32) not null,
KELAS_ID VARCHAR2(32) not null,
HARI VARCHAR2(32) not null,
constraint PK_BELAJAR primary key (NIG, KODE_MP, KELAS_ID),
constraint BELAJAR#GURU_FK foreign key (NIG)
references GURU (NIG),
constraint BELAJAR#MATA_PELAJARAN_FK foreign key (KODE_MP)
references MATA_PELAJARAN (KODE_MP),
constraint BELAJAR#KELAS_FK foreign key (KELAS_ID)
references KELAS (KELAS_ID)
)
/


Atau bisa ditulis dengan :


/*==============================================================*/
/* Table: BELAJAR */
/*==============================================================*/
create table BELAJAR (
NIG VARCHAR2(32) not null,
KODE_MP VARCHAR2(32) not null,
KELAS_ID VARCHAR2(32) not null,
HARI VARCHAR2(32) not null);
ALTER TABLE BELAJAR
ADD constraint PK_BELAJAR primary key (NIG, KODE_MP, KELAS_ID);
ALTER TABLE BELAJAR
ADD constraint BELAJAR#GURU_FK foreign key (NIG)
references GURU (NIG);
ALTER TABLE BELAJAR
ADD constraint BELAJAR#MATA_PELAJARAN_FK foreign key (KODE_MP)
references MATA_PELAJARAN (KODE_MP);

sumber: oracle1st.wordpress.com/2009/06/13/
Read More ->>