Saya menulis aplikasi pertama saya untuk Android dan akan menggunakan database SQLite sehingga akan berusaha membatasi ukuran sebanyak mungkin, tapi saya pikir pertanyaannya berlaku secara umum untuk desain database.
Saya berencana untuk menyimpan catatan yang akan memiliki teks dan tanggal pembuatan. Aplikasi ini adalah aplikasi yang berdiri sendiri, yaitu tidak akan terhubung ke internet dan hanya satu pengguna yang akan memperbaruinya, sehingga tidak ada kemungkinan bahwa akan ada lebih dari satu entri dengan tanggal tertentu.
Apakah meja saya masih membutuhkan kolom ID? Jika demikian, apa keuntungan menggunakan ID sebagai pengidentifikasi catatan dibandingkan dengan Tanggal?
Jawaban:
IMHO, menggunakan kolom tanggal sebagai kunci utama sebaiknya dihindari.
Saya telah bekerja pada sistem di mana bidang tanggal digunakan sebagai kunci utama dan menulis kueri untuk menarik kembali himpunan bagian dari data sedikit membosankan jika Anda bekerja dengan bidang tanggal.
Beberapa poin lain yang mungkin ingin Anda pertimbangkan:
Anda mungkin berpikir bahwa suatu titik waktu adalah unik, tetapi itu tergantung pada rincian kolom tanggal. Apakah ini menit, detik, milidetik, dll. Bisakah Anda benar - benar yakin bahwa Anda tidak akan pernah mendapatkan pelanggaran kunci utama?
Terakhir, jika Anda ingin memindahkan basis data ke platform lain, Anda dapat kembali mengalami masalah di mana rincian data tanggal berbeda di antara platform tersebut.
Anda tentu harus menyeimbangkan yang ideal dengan apa yang harus Anda kerjakan. Jika ruang benar-benar sangat memprihatinkan, menggunakan kolom tanggal bisa lebih kecil dari dua kejahatan. Itu adalah keputusan desain yang harus Anda buat.
Edit:
Saya harus menunjukkan bahwa ini tidak menunjukkan bahwa ini adalah keputusan desain yang buruk . Hanya saja mungkin ada masalah dengan kepraktisan RDBMS yang dimaksud.
sumber
Tidak, Anda tidak benar-benar membutuhkan kolom ID yang ditentukan dalam skema Anda jika Anda dapat menjamin bahwa tidak akan pernah ada tanggal duplikat.
TAPI ...
... yang mengatakan, Anda sebaiknya menggunakannya. Rahasia kecil di sini adalah bahwa SQLite sudah memiliki ID peningkatan otomatis yang unik untuk setiap tabel yang disebut ROWID. Jika Anda mendeklarasikan kolom bilangan bulat peningkatan-otomatis di tabel Anda sebagai PK, SQLite tidak akan membuat kolom baru - itu hanya akan alias kolom ROWID yang sudah ada sebelumnya.
http://www.sqlite.org/autoinc.html
Jadi, Anda tidak akan menghemat ruang apa pun dengan tidak menggunakan kolom ID karena Anda mendapatkan satu per tabel apakah Anda menginginkannya atau tidak!
sumber
Gunakan bidang ID jika salah satu dari yang berikut ini benar:
Baca pertanyaan ini: Apakah ada sumber kanonik yang mendukung "semua-pengganti"?
Edit:
Karena, menurut pendapat saya, tampaknya tidak ada yang di atas berlaku, Anda tidak perlu menggunakan dan bidang ID, tetapi Anda dapat menggunakannya jika Anda mau.
sumber
Ingatlah bahwa Anda mungkin juga ingin mengubah arti kolom "tanggal" dari
created_at
menjadiupdated_at
atau perubahan lain di sepanjang baris tersebut, yang menurut saya merupakan kasus yang sangat umum.Menambahkan kolom id dalam beberapa kasus akan memberi Anda lebih banyak fleksibilitas ketika desain Anda berubah.
sumber