• 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.