Tuesday, February 19, 2013

< Stack >


Pengertian Stack pada Struktur Data adalah sebagai tumpukan dari benda, sekumpulan data yang seolah-olah diletakkan di atas data yang lain, koleksi dari objek-objek homogen, atau Suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Stack pada Struktur Data dapat diilustrasikan dengan dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak. 
Stack pada Struktur Data

Stack bersifat LIFO (Last In First Out) artinya Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack 

Operasi-operasi yang biasanya tredapat pada Stack yaitu:
1. Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
2. Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
3. Clear : digunakan untuk mengosongkan stack
4. IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
5. IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Cara mendefenisikan Stack dengan Array of Struct yaitu:
1. Definisikan Stack dengan menggunakan struct
2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack
3. Buatlah variabel array data sebagai implementasi stack
4. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya.
contoh :
//Deklarasi MAX_STACK
                #define MAX_STACK 10   
            
//Deklarasi STACK dengan struct dan array data
                typedef struct STACK{
                                int top;
                                char data[10][10];                                                           
                }; 

//Deklarasi/buat variabel dari struct
                STACK tumpuk;

Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah kosong.
Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang.  Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh.
Stack pada Struktur Data

Ilustrasi Stack pada saat inisialisasi


IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1)  maka belum full.

Stack Struktur Data

Ilustrasi Stack pada kondisi Full

IsEmpty berfungsi untuk memeriksa apakah stack masih kosong atau tidak. Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong.
Stack Struktur Data
Push berfungsi untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack (yang ditunjuk oleh TOS).
Tambah satu (increment)  nilai top of stack lebih dahulu setiap kali ada penambahan elemen stack.
Asalkan stack masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack setelah diincrement sebelumnya.
Stack Struktur Data

Pop berfungsi untuk mengambil elemen teratas (data yang ditunjuk oleh TOS) dari stack.
Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan dipop, baru dilakukan decrement nilai top of stack sehingga jumlah elemen stack berkurang.
Stack Struktur data

Printberfungsi untuk menampilkan semua elemen-elemen stack dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil.
Stack Struktur Data

Stack pada Struktur Data

Operasi Push

void Push (NOD **T, char item)
                {
                                NOD *n;
                                n=NodBaru (item);
                                n->next=*T;
                                *T=n;
                }

Operasi Pop
char Pop (NOD **T)
                {
                                NOD *n; char item;
                                if (!StackKosong(*T)) {
                                                P=*T;
                                                *T=(*T)->next;
                                                item=P->data;
                                                free(P);
                                }
                                return item;
                }

create berfungsi untuk membuat sebuah stack baru yang masih kosong.

Normalisasi


Normalisasi adalah (Abdul Kadir, 2002: 52), suatu proses untuk mengubah suatu tabel yang memiliki  masalah tertentu  ke dalam dua buah tabel atau lebih, yang tidak lagi memiliki masalah. Masalah tersebut biasanya merupakan suatu ketidakkonsistenan (tidak normal) apabila dilakukan penghapusan (delete), pengubahan (update) dan pembacaan (retrieve) pada suatu basis data. 
Bentuk normalisasi adalah suatu aturan yang dikenakan pada tabel-tabel dalam basis data dan harus dipenuhi oleh tabel-tabel tersebut pada level-level normalisasi. Ada macam-macam bentuk normalisasi, diantaranya adalah bentuk tidak normal, bentuk normal pertama, bentuk normal kedua dan bentuk normal ketiga.
Aturan-aturan dalam masing-masing bentuk normalisasi tersebut adalah sebagai berikut (Abdul Kadir, 2002: 54) :

>>A. Bentuk tidak normal
Bentuk ini merupakan kumpulan data yang akan disimpan, tidak ada keharusan mengikuti suatu format tertentu, dapat saja data tidak lengkap atau terduplikasi dan data dikumpulkan apa adanya.

>>B. Bentuk normal pertama
Suatu tabel dikatakan dalam bentuk normal pertama (1NF) bila setiap kolom bernilai tunggal untuk setiap baris. Ini berarti bahwa nama kolom yang berulang cukup diwakili oleh sebuah nama  kolom (tidak perlu ada  indeks dalam memberi nama kolom).

>>C. Bentuk normal kedua
Suatu tabel berada dalam bentuk normal kedua (2NF) jika tabel berada dalam bentuk normal pertama, semua kolom bukan kunci primer tergantung sepenuhnya terhadap kunci primer. Suatu kolom disebut tergantung sepenuhnya terhadap kunci primer jika nilai pada suatu kolom selalu bernilai sama untuk suatu nilai kunci primer yang sama.

>> D. Bentuk normal ketiga
Suatu tabel berada dalam bentuk normal ketiga (3NF) jika  tabel berada dalam bentuk normal kedua, setiap kolom bukan kunci primer tidak memiliki ketergantungan secara transitif terhadap kunci primer.

ERD (Entity Relationship Diagram)

Pemgertian ERD (Entity Relationship Diagram) /Basisdata Relasional adalah kumpulan dari relasi-relasi yang mengandung seluruh informasi berkenaan suatu entitas/ objek yang akan disimpan di dalam database. Tiap relasi disimpan sebagai sebuah file tersendiri. Perancangan basisdata merupakan suatu kegiaatan yang setidaknya bertujuan sebagai berikut:

>> Menghilangkan redundansi data
>> Meminimumkan jumlah relasi di dalam basis data

>> Membuat relasi berada dalam bentuk normal, sehingga dapat meminimumkan permasalahan berkenaan dengan penambahan, pembaharuan dan penghapusan.

Entitas (entity/ entity set), memiliki banyak istilah di dalam ilmu komputer, seperti tabel (table), berkas (data file), penyimpan data (data store), dan sebagainya

Entity adalah obyek yang dapat dibedakan dalam dunia nyata.Entity set adalah kumpulan dari entity yang sejenis. Entity set dapat berupa :
>> Obyek secara fisik : Rumah, Kendaraan, Peralatan
>> Obyek secara konsep : Pekerjaan , Perusahaan, Rencana

Atribut adalah karakteristik dari entity atau relationship, yang menyediakan penjelasan detail tentang entity atau relationship tersebut.Nilai Atribut merupakan suatu data aktual atau informasi yang disimpan pada suatu atribut di dalam suatu entity atau relationship.
Jenisjenis atribut :
>> Key : Atribut yang digunakan untuk menentukan suatu entity secara unik.
>> Atribut Simple : Atribut yang bernilai tunggal.
>> Atribut Multivalue : Atribut yang memiliki sekelompok nilai untuk setiap instan entity.
>> Atribut Composite : Suatu atribut yang terdiri dari beberapa atribut yang lebih kecil yang mempunyai arti tertentu.

Cardinality Ratio Constraint
Menjelaskan batasan jumlah keterhubungan satu entity dengan entity lainnya. Jenis Cardinality Ratio :
1. One to One (1:1)
2. One to Many (1:N) atau Many to One (N:1)
3. Many to Many (N:N)

Participation Constraint
Menjelaskan apakah keberadaan suatu entity tergantung pada hubungannya dengan entity lain.
Terdapat 2 macam Participation Constraint :
1.      Total Participation
Keberadaan suatu entity tergantung pada hubungannya dengan entity lain.
2.      Partial Participation
Keberadaan suatu entity tidak tergantung pada hubungannya dengan entity lain.

Weak Entity adalah suatu Entity dimana keberadaan dari entity tersebut tergantung dari keberadaan entity lain.
>>Entity yang merupakan induknya disebut Identifying Owner dan relationshipnya disebut Identifying Relationship.
>>Weak Entity selalu mempunyai Total Participation constraint dengan Identifying Owner. 


Macam-Macam Sort ALGORITMA


<< Bubble Sort
Bubble sort merupakan algoritma sorting sederhana. Algoritma ini dimulai pada awal set data. Ia membandingkan dua elemen pertama, dan jika yang pertama adalah lebih besar dari yang kedua, maka swap mereka. Terus melakukan hal ini untuk setiap pasangan elemen berdekatan dengan akhir kumpulan data. Iakemudian mulai lagi dengan dua elemen pertama, mengulang sampai tidak ada swap telah terjadi pada lulusterakhir. Rata-rata Algoritma dan kinerja kasus terburuk adalah O (n2), sehingga jarang digunakan untuk menyortir besar, unordered, set data. Gelembung sort dapat digunakan untuk mengurutkan sejumlah kecilitem (dimana inefisiensi adalah bukan hukuman tinggi).
Gelembung sort juga dapat secara efisien digunakan pada daftar yang sudah diurutkan kecuali untuk jumlah yang sangat kecil elemen. Misalnya, jika hanya satuunsur yang tidak sesuai, bubble sort hanya akan memakan waktu 2n. Jika dua unsur yang tidak sesuai, bubble sort hanya akan mengambil paling banyak 3n waktu. Gelembung sort rata-rata kasus dan kasus terburuk keduanya O (n ²).


<< Selection Sort
Semacam Seleksi adalah semacam perbandingan di tempat. Ini memiliki O (n2) kompleksitas,sehingga tidak efisien dalam daftar besar, dan umumnya melakukan lebih buruk dari insertion sort serupa.Seleksi semacam terkenal karena kesederhanaan, dan juga memiliki keunggulan kinerja lebih algoritma yang lebih rumit dalam situasi tertentu. Algoritma mencari nilai minimum, swap dengan nilai di posisi pertama, danmengulangi langkah-langkah untuk sisa daftar. Itu tidak lebih dari swap n, dan dengan demikian bergunadimana swapping sangat mahal.

<< Insertion Sort
Insertion sort merupakan algoritma sorting sederhana yang relatif efisien untuk daftar kecil dan sebagian besar daftar-disortir, dan sering digunakan sebagai bagian dari algoritma yang lebih canggih. Ia bekerja dengan mengambil unsur-unsur dari satu daftar dengan satu dan memasukkan mereka dalam posisi yang benar mereka ke dalam daftar diurutkan baru. Pada array, daftar baru dan elemen-elemen yang tersisa dapat berbagi ruang array, tetapi penyisipan mahal, membutuhkan menggeser semua elemen-elemen berikut alih oleh satu. Shell sort (lihat di bawah) adalah varian dari insertion sort yang lebih efisien untuk daftar yang lebih besar.

<< Shell Sort
Shell sort diciptakan oleh Donald Shell pada tahun 1959. Ini meningkatkan atas bubble sort daninsertion sort dengan menggerakkan keluar dari elemen-elemen memesan lebih dari satu posisi pada suatu waktu. Salah satu implementasi dapat digambarkan sebagai mengatur urutan data dalam array dua dimensidan kemudian menyortir kolom dari array menggunakan insertion sort.





<< Comb Sort
Comb Sort adalah semacam algoritma sorting yang relatif sederhana awalnya dirancang olehWlodzimierz Dobosiewicz pada tahun 1980. Kemudian ditemukan kembali dan dipopulerkan oleh StephenLacey dan Richard Box dengan sebuah artikel majalah Byte diterbitkan pada bulan April 1991. Sisirsemacam meningkatkan pada bubble sort, dan algoritma saingan seperti Quicksort. Ide dasarnya adalahuntuk menghilangkan kura-kura, atau nilai kecil dekat akhir daftar, karena dalam semacam gelembungmenyortir ini sangat melambat. (Kelinci, nilai besar sekitar awal daftar, tidak menimbulkan masalah di bubble sort.).

<< Merge Sort
Merge sort mengambil keuntungan dari kemudahan penggabungan sudah daftar diurutkan ke daftar diurutkan baru. Dimulai dengan membandingkan setiap dua elemen (yaitu, 1 dengan 2, kemudian 3 dengan 4...) dan swapping mereka jika yang pertama datang setelah kedua. Kemudian masing-masing menggabungkandaftar yang dihasilkan dua menjadi daftar empat, kemudian menggabungkan daftar tersebut empat, dan seterusnya, sampai akhirnya dua daftar digabungkan ke dalam daftar diurutkan akhir. Dari algoritma yang dijelaskan di sini, ini adalah yang pertama yang baik daftar skala yang sangat besar, karena kasus terburukrunning time adalah O (n log n). Merge sort telah melihat lonjakan yang relatif baru dalam popularitas untukimplementasi praktis, yang digunakan untuk rutin semacam standar dalam bahasa pemrograman Perl, [5]Python (sebagai timsort [6]), dan Jawa (juga menggunakan timsort per JDK7 [7 ]), antara lain. Merge sorttelah digunakan di Jawa setidaknya sejak 2000 di JDK1.3.

<< Heap Sort
Heapsort adalah versi yang jauh lebih efisien selection sort. Ia juga bekerja dengan menentukanelemen (atau terkecil) terbesar daftar, menempatkan bahwa pada akhir (atau awal) dari daftar, kemudianmelanjutkan dengan sisa daftar, tapi menyelesaikan tugas ini secara efisien dengan menggunakan struktur datayang disebut tumpukan, tipe khusus pohon biner. Setelah daftar data telah dibuat menjadi tumpukan, simpulakar dijamin menjadi unsur (atau terkecil) terbesar. Ketika dipindahkan dan ditempatkan di akhir daftar,tumpukan adalah ulang sehingga elemen terbesar yang tersisa bergerak ke akar. Menggunakan heap,menemukan elemen terbesar berikutnya membutuhkan O (log n) waktu, bukan O (n) untuk linear scan diselection sort sederhana. Hal ini memungkinkan heapsort untuk menjalankan dalam O (n log n) waktu, dan ini juga merupakan kompleksitas kasus terburuk.

<< Quick Sort
Quicksort adalah membagi dan menaklukkan algoritma yang mengandalkan operasi partisi: untukpartisi array, kita memilih sebuah elemen, yang disebut pivot, memindahkan semua unsur kecil sebelum poros,dan memindahkan semua elemen yang lebih besar setelah itu. Hal ini dapat dilakukan secara efisien dalamwaktu linier dan di tempat. Kami kemudian secara rekursif mengurutkan sublists lebih kecil dan lebih besar.Implementasi Efisien quickSort (dengan partisi di-tempat) biasanya macam stabil dan agak rumit, tetapiadalah salah satu dari algoritma pengurutan tercepat dalam praktek. Bersama dengan sederhana O (log n)penggunaan ruang, ini membuat salah satu quickSort dari algoritma pengurutan yang paling populer, tersediadi perpustakaan banyak standar. Isu paling kompleks di quickSort adalah memilih elemen pivot yang baik;konsisten pilihan yang buruk pivots dapat mengakibatkan drastis lambat O (n ²) kinerja, tetapi jika di setiap langkah kita memilih median sebagai pivot maka ia bekerja dalam O (n log n ). Menemukan median,bagaimanapun, adalah O (n) operasi pada daftar unsorted, dan karena itu menuntut hukuman sendiri.

<< Counting Sort
Counting Sort berlaku jika setiap masukan diketahui milik set tertentu, S, kemungkinan. Algoritma iniberjalan di O (| S | + n) dan O (| S |) memori di mana n adalah panjang dari input. Ia bekerja denganmembuat sebuah array integer ukuran | S | dan menggunakan bin i untuk menghitung kejadian anggota i Sdalam masukan. Setiap masukan kemudian dihitung oleh incrementing nilai bin terkait. Setelah itu, arraymenghitung adalah dilingkarkan melalui untuk mengatur semua masukan dalam rangka. Algoritma sorting initidak bisa sering digunakan karena S harus cukup kecil agar bisa efisien, namun algoritma ini sangat cepat danmenunjukkan perilaku asimtotik besar sebagai meningkat n. Hal ini juga dapat dimodifikasi untukmenyediakan perilaku yang stabil.

<< Bucket Sort
Bucket sort adalah membagi dan menaklukkan algoritma sorting yang generalizes Counting mengurutkan berdasarkan partisi array ke dalam jumlah terbatas ember. Setiap ember kemudian diurutkan secara individual, baik menggunakan algoritma sorting yang berbeda, atau dengan rekursif menerapkan algoritma sorting ember. Sebuah variasi dari metode ini disebut semacam hitungan satu buffer lebih cepat daripada quickSort dan memakan waktu sekitar waktu yang sama untuk berjalan di setiap set data. Karena kenyataan bahwa semacam ember harus menggunakan sejumlah ember yang terbaik adalah cocok untuk digunakan pada set data lingkup terbatas. Bucket sort akan cocok untuk data seperti nomor jaminan sosial - yang memiliki banyak variasi.

<< Radix Sort
Radix sort adalah sebuah algoritma yang macam angka dengan digit individu pengolahan. n digitangka yang terdiri dari masing-masing k diurutkan dalam waktu O (n ° K). Radix sort bisa proses digit setiapangka mulai dari angka signifikan paling sedikit (LSD) atau digit yang paling signifikan (MSD). Hasil uji BNTmacam algoritma pertama daftar dengan paling signifikan angka sambil menjaga agar relatif merekamenggunakan semacam stabil. Kemudian macam mereka dengan angka berikutnya, dan seterusnya daripaling signifikan yang paling signifikan, berakhir dengan sebuah daftar diurutkan. Sedangkan jenis LSD radixmemerlukan penggunaan semacam stabil, MSD algoritma radix sort tidak (kecuali sorting yang stabil yang diinginkan). Di tempat semacam MSD radix tidak stabil. Adalah umum untuk algoritma semacam menghitunguntuk digunakan secara internal oleh jenis radix. Hybrid pemilahan pendekatan, seperti menggunakan insertion sort sampah kecil untuk meningkatkan kinerja semacam radix signifikan.

<< Distribution Sort
Distribution Sort mengacu pada setiap algoritma sorting dimana data didistribusikan dari input untuk struktur antara beberapa yang kemudian dikumpulkan dan ditempatkan pada output. Lihat Bucket sort.

<< Tim Sort
Distribusi semacam mengacu pada setiap algoritma sorting dimana data didistribusikan dari input untuk struktur antara beberapa yang kemudian dikumpulkan dan ditempatkan pada output. Lihat Bucket sort.

Matrik

Pengertian Matriks adalah kumpulan bilangan, simbol, atau ekspresi, berbentuk persegi panjang yang disusun menurut baris dan kolom. Bilangan-bilangan yang terdapat di suatu matriks disebut dengan elemen atau anggota matriks.

Contoh matriks dengan 2 baris dan 3 kolom yaitu
\begin{bmatrix}1 & 9 & -13 \\20 & 5 & -6 \end{bmatrix}.
Pemanfaatan matriks misalnya dalam menemukan solusi sistem persamaan linear. Penerapan lainnya adalah dalam transformasi linear, yaitu bentuk umum dari fungsi linear, misalnya rotasi dalam 3 dimensi.
Matriks seperti halnya variabel biasa dapat dimanipulasi, seperti dikalikan, dijumlah, dikurangkan dan didekomposisikan. Dengan representasi matriks, perhitungan dapat dilakukan dengan lebih terstruktur.

A =
\begin{bmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33} \\
\end{bmatrix}
\!




Operasi Dasar
Penjumlahan dan pengurangan matriks
Penjumlahan dan pengurangan matriks hanya dapat dilakukan apabila kedua matriks memiliki ukuran atau tipe yang sama. Elemen-elemen yang dijumlahkan atau dikurangi adalah elemen yang posisi atau letaknya sama.

a_{ij} \pm b_{ij} = c_{ij}\!
atau dalam representasi dekoratfinya


\begin{bmatrix}
{3} & {4} \\
{6} & {5} \\

\end{bmatrix}
\!

\begin{bmatrix}
(a_{11} \pm b_{11}) & (a_{12} \pm b_{12}) & (a_{13} \pm b_{13}) \\
(a_{21} \pm b_{21}) & (a_{22} \pm b_{22}) & (a_{23} \pm b_{23}) \\
\end{bmatrix}
=
\begin{bmatrix}
c_{11} & c_{12} & c_{13} \\
c_{21} & c_{22} & c_{23} \\
\end{bmatrix}
\!
Perkalian skalar
Matriks dapat dikalikan dengan sebuah skalar.

\lambda\cdot A := (\lambda\cdot a_{ij})_{i=1, \ldots , m; \ j=1, \ldots , n}
Contoh perhitungan :

5 \cdot
  \begin{pmatrix}
    1 & -3 & 2 \\
    1 &  2 & 7
  \end{pmatrix}
  =
  \begin{pmatrix}
   5 \cdot 1 & 5 \cdot (-3) & 5 \cdot 2 \\
   5 \cdot 1 & 5 \cdot   2  & 5 \cdot 7
  \end{pmatrix}
  =
  \begin{pmatrix}
    5 & -15 & 10 \\
    5 & 10  & 35
  \end{pmatrix}
Perkalian matriks
Matriks dapat dikalikan, dengan cara tiap baris dikalikan dengan tiap kolom, lalu dijumlahkan pada baris yang sama.

 c_{ij}=\sum_{k=1}^m a_{ik}\cdot b_{kj}
Contoh perhitungan :



  \begin{pmatrix}
    1 & 2 & 3 \\
    4 & 5 & 6 \\
  \end{pmatrix}
  \cdot
  \begin{pmatrix}
    6 & -1 \\
    3 & 2 \\
    0 & -3
  \end{pmatrix}
  =
  \begin{pmatrix}
     1 \cdot 6  +  2 \cdot 3  +  3 \cdot 0 &
     1 \cdot (-1) +  2 \cdot 2 +  3 \cdot (-3) \\
     4 \cdot 6  +  5 \cdot 3  +  6 \cdot 0 &
     4 \cdot (-1) +  5 \cdot 2 +  6 \cdot (-3) \\
  \end{pmatrix}
  =
  \begin{pmatrix}
    12 & -6 \\
    39 & -12
  \end{pmatrix}

< Key >


Menurut para ahli, kunci key hanya memiliki satu makna dalam teori relasional itu adalah kumpulan dari satu atau lebih kolom yang nilai-nilai gabungan unik di antara semua kejadian dalam tabel tertentu. Utama adalah sarana relasional menetapkan keunikan. Kunci adalah satu atau lebih atribut yang menentukan atribut lainnya atau antara atribut lain saling berkaitan. Dalam metode relasional, ada 6 kunci yang di kenal yang akan di jelas sebagai berikut.

1. << Candidat key 
Candidate Key (kunci calon) adalah salah satu rangkaian yang mempunyai nilai unik untuk membedakan atau mengidentifikasi  nilai-nilai kombinasi yang unik diantara semua kejadian yang spesifik dari entetitas. Candidat key ini tidak boleh berisi atribut dari tabel yang lain. kombinasi dari atribut yang dapat digunakan untuk mengidentifikasi secara unik rekor database tanpa data apapun yang asing. Setiap tabel dapat memiliki satu atau lebih candidate key.

Contoh:
File pegawai berisi attribute
Ø  no induk
Ø  No ktp
Ø  Nama
Ø  Tempat lahir
Ø  Tanggal lahir
Ø  Alamat
Ø  Kota
Kunci kandidat disini adalah:
Ø  No induk
Ø  No ktp

2. << Primary Key (kunci utama)
Primary Key (kunci utama) adalah atribut Merupakan candidate key yang telah dipilih untuk mengidentifikasi setiap record secara unik. Primary key harus merupakan field yang benar-benar unik dan tidak boleh ada nilai NULL. Pengertian lainya Primary Key adalah suatu nilai dalam basis data yang digunakan untuk mengidentifikasi suatu baris dalam table. Primary key, salah satu atrribut dari candidat key dapat dipilih menjadi primary key dengan 3 kriteria sbb :
Ø  Key tersebut lebih natural untuk dijadikan acuan
Ø  Key tersebut lebih sederhana
Ø  Key tersebut cukup uniqe
database tanpa data apapun yang asing. Setiap tabel dapat memiliki satu atau lebih candidate key.
Contoh:
File pegawai berisi attribute
Ø  no induk
Ø  No ktp
Ø  Nama
Ø  Tempat lahir
Ø  Tanggal lahir
Ø  Alamat
Ø  Kota
No induk dan no ktp adalah kunci calon (Candidate Key) dan untuk kunci utama (primary key) adalah salah satu yang dipilih dari kunci calon. Misalnya No. induk di jadikan primary key, maka primary key nya adalah no induk.

3. << Alternate Key (Kunci Alternatif)
Alternate key Adalah candidate key yang tidak terpilih. Misal : dalam suatu entity terdapat dua field yang bisa dijadikan sebagai kunci. Sementara yang boleh dijadikan kunci hanya satu, maka anda harus memilih salah satu. Field yang anda pilih, disebut primary key, sedangkan field yang tidak dipilih disebut dengan alternate key.
Contoh:
File pegawai berisi attribute
Ø  no induk
Ø  No ktp
Ø  Nama
Ø  Tempat lahir
Ø  Tanggal lahir
Ø  Alamat
Ø  Kota

No induk dan no ktp adalah kunci calon (Candidate Key) dan untuk kunci utama (primary key) adalah salah satu yang dipilih dari kunci calon. Misalnya No. induk di jadikan primary key, maka primary key nya adalah no induk. Dan untuk no ktp menjadi alternate key.

4. << Foreign Key (kunci Tamu)
Jika sebuah primary key terhubungan ke table/entity lain, maka keberadaan primary key pada entity tersebut di sebut sebagai foreign key. Foreign key adalah Sebuah kumpulan field dalam satu relasi yang digunakan untuk me“refer” (menunjuk) ke suatu baris (tuple) pada relasi yang lain (harus berkorespondensi dengan primary key pada relasi yang kedua), seperti: ‘logical pointer’. Sedangkan hubungan antara keduanya (primary key dan foreign key) di jelaskan sebagai berikut,“Primary Key” adalah field kunci / utama dari suatu tabel yang menunjukkan bahwa field yang menjadi kunci tersebut tidak bisa diisi dengan data yang sama, atau dengan kata lain Primary key menjadikan tiap record memiliki identitas sendiri-sendiri yang membedakan satu sama lainnya (unik).“Foreign key” adalah satu attribute yang melengkapi satu relationship yang menunjukan ke induknya, dengan kata lain keduanya saling berkaitan. Perhatikan gambar berikut.

Pada gambar diatas, nim pada table mhs adalah primary key. Sedangkan primary key pada table matkul adalah id_matkul. Lalu id_matkul menempel pada table mhs yang kita sebut sebagai foreign key.
Biasanya saya menyebut table yang berisi foreign key sebagai table anak karena table tersebut mengait pada table lain. Sedangkan table yang terkait saya sebut sebagai table induk. Pada contoh table di atas, mhs sebagai table anak sedangkan matkul sebagai table induk

5.  << Composite key
Dalam desain database, composite key adalah kunci yang terdiri dari 2 atau lebih atribut yang secara unik mengidentifikasi suatu kejadian entitas. Setiap atribut yang membentuk kunci senyawa adalah kunci sederhana dalam haknya sendiri.
Hal ini sering bingung dengan kunci composite, meskipun ini juga merupakan kunci yang terdiri dari 2 atau lebih atribut yang secara unik mengidentifikasi suatu kejadian, setidaknya satu atribut yang membentuk kunci komposit bukanlah kunci sederhana.
Contohnya, suatu entitas yang mewakili masing-masing modul siswa hadir di Universitas. entitas ini memiliki nim dan kode_matakuliah sebagai kunci utama. Setiap atribut yang membentuk kunci utama adalah kunci sederhana karena masing-masing merupakan referensi unik ketika mengidentifikasi siswa dalam satu kasus dan modul yang lain. 
Sebaliknya, dengan menggunakan contoh yang sama, bayangkan kita mengidentifikasi seorang mahasiswa oleh NamaBelakang + NamaDepan mereka. Di tabel siswa tersebut pada modul kunci utama yaitu NamaDepan + NamaBelakang + kode_matakuliah. Karena NamaBelakang + NamaDepan merupakan referensi unik untuk mahasiswa, itu bukanlah sebuah kunci sederhana, itu adalah kombinasi dari atribut yang digunakan untuk secara unik mengidentifikasi seorang mahasiswa. Oleh karena itu kunci utama untuk entitas ini adalah kunci komposit.
Tidak ada pembatasan diterapkan pada atribut tentang (awal) kepemilikan mereka dalam model data. Ini berarti bahwa setiap satu, tidak ada, atau semua, dari beberapa atribut dalam kunci senyawa dapat menjadi kunci asing. Memang, kunci asing mungkin sendiri menjadi kunci majemuk.

6.  << Sekunder key
Sekunder key adalah sebuah atribut atau kombinasi yang digunakan hanya untuk tujuan pengambilan data.