Programming,  Teori

Bikin Program Pencatat Koleksi

Sebagai seorang pencinta buku, sudah tentu buku yang saya punya cukup banyak, dan pencatatan menjadi cukup penting. Selain mengoleksi buku, saya juga punya koleksi koin dan koleksi film. Sudah lama saya mencari program yang tugasnya hanya mencatat benda koleksi seseorang, tapi tidak pernah dapat yang benar2 pamungkas. Karena saya memprioritaskan satu program dengan banyak tipe koleksi, berarti program itu harus bisa mengelola data koleksi buku dan film, padahal field yang digunakan dalam dua koleksi itu sangat jauh berbeda (apalagi kalau koleksi koin).

Sesudah istri saya meminta saya untuk mendokumentasikan seluruh tas miliknya (istri saya senang mengoleksi tas), saya jadi berpikir untuk bikin sendiri program pengelola koleksi itu. Akhirnya tercetus sebuah ide dalam benak saya untuk membuat koleksi dengan field dinamis, user bisa mendefinisikan sendiri field2 apa saja yang mau disimpan. Atau dalam istilah OOP, si user bisa mendefinisikan property apa saja yang terdapat dalam sebuah objek koleksi. Dan untuk mengakomodir user2 malas seperti saya, bisa disiapkan template untuk berbagai macam koleksi yang bisa diedit.

Karena koleksi semacem ini biasanya cuma dipake oleh 1 orang, maka yang paling gampang pake SQLite.

Ini dia struktur table nya:

[table]KOLEKSI[attr colspan=”2″]
ID,Auto Number
Nama,Nama Koleksi
Catatan,”Catatan koleksi (tanggal dimulai, dll)”
BarisAkhir,Nomor baris yang terakhir dipakai (pada table BARIS)
[/table]

[table]KOLOM[attr colspan=”2″]
ID,Auto Number
Koleksi_ID,Nomor ID dari table KOLEKSI
Nama,Nama field
Tipe,”Tipe data field (string, numeric, date)”
Urutan,Urutan posisi field
Referensi,Referensi nilai. Untuk tipe field yang isinya sudah ditentukan dari daftar
[/table]

[table]BARIS[attr colspan=”2″]
ID,Auto Number
Koleksi_ID,Nomor ID dari table KOLEKSI
Kolom_ID,Nomor ID dari table KOLOM
Nilai,Isi field
NoBaris,”Nomor urut data (tidak boleh dobel, sekuen bisa terputus apabila ada penghapusan data)”
[/table]

[table]LAMPIRAN[attr colspan=”2″]
ID,Auto Number
Koleksi_ID,Nomor ID dari table KOLEKSI
NoBaris,Nomor urut data. Satu nomor urut bisa mempunyai lebih dari satu lampiran
NamaFile,Nama file lampiran
Berkas,Isi file lampiran
[/table]

Contoh datanya kira2 seperti ini:

[table caption=”KOLEKSI”]ID,Nama,Catatan,BarisAkhir
1,Koleksi Tas,-,2
[/table]

[table caption=”KOLOM”]ID,Koleksi_ID,Nama,Tipe,Urutan,Referensi
1,1,Merk,string,1,Charles & Keith|Gucci|Channel
2,1,Warna,string,2,
3,1,Harga,numeric,3,
4,1,Tanggal beli,date,4,
[/table]

[table caption=”BARIS”]ID,Koleksi_ID,Kolom_ID,Nilai,NoBaris
1,1,1,Charles & Keith,1
2,1,2,Hijau Pupus,1
3,1,3,630000,1
4,1,4,2011-03-24,1
5,1,1,Gucci,2
6,1,2,Merah,2
7,1,3,2100000,2
8,1,4,2012-01-19,2
[/table]

[table caption=”LAMPIRAN”]ID,Koleksi_ID,NoBaris,NamaFile,Berkas
1,1,1,foto-1.jpg,–blob–
2,1,2,tas.png,–blob–
[/table]

Nantinya akan ditampilkan seperti ini:

[table colalign=”center|left|left|right|center”]No,Merk,Warna,Harga,Tanggal beli
1,Charles & Keith,Hijau Pupus,630.000,2011-03-24
2,Gucci,Merah,2.100.000,2012-01-19
[/table]

Jadi deh program pencatat koleksi yang dinamis cuma pake 4 table. Tinggal pinter2 aja nge-query. Kalau perlu bikin view untuk setiap koleksi yang ada, misal untuk koleksi ID=1 viewnya “view_koleksi_1”, dst.