Saya sudah membaca alasan untuk menggunakan atau tidak Guid
dan int
.
int
lebih kecil, lebih cepat, mudah diingat, menyimpan urutan kronologis. Dan untuk Guid
, satu-satunya keuntungan yang saya temukan adalah unik. Dalam hal apa a Guid
akan lebih baik daripada dan int
dan mengapa?
Dari apa yang saya lihat, int
tidak memiliki kekurangan kecuali oleh batas angka, yang dalam banyak kasus tidak relevan.
Mengapa tepatnya Guid
diciptakan? Saya benar-benar berpikir itu memiliki tujuan selain berfungsi sebagai kunci utama dari sebuah tabel sederhana. (Adakah contoh aplikasi nyata yang menggunakan Guid
sesuatu?)
(Guid = UniqueIdentifier) ketik pada SQL Server
int
tidak memiliki kelemahan kecuali oleh batas angka, yang dalam banyak kasus tidak relevan.": sebenarnya, dalam konteks ini INT vs GUID, batas atas dari yang ditandatangani, 32-bitINT
sepenuhnya tidak relevan mengingat bahwa batas atas dari yang ditandatangani , 64-bitBIGINT
jauh melampaui hampir semua kegunaan (bahkan lebih jika Anda mulai penomoran pada batas bawah; dan hal yang sama berlaku untukINT
) dan masih setengah dari ukuran GUID (8 byte, bukan 16) dan berurutan.Jawaban:
Ini telah ditanyakan di Stack Overflow di sini dan di sini .
Posting Jeff menjelaskan banyak tentang pro dan kontra menggunakan GUID.
Jika Anda yakin tentang kinerja dan Anda tidak berencana untuk mereplikasi atau menggabungkan catatan, kemudian gunakan
int
, dan atur peningkatan otomatis ( seed identitas dalam SQL Server ).sumber
UNIQUEIDENTIFIER
lebihINT
karenaINT
memiliki batas atas adalah penalaran agak miskin sejak berada tak terbatas, sementara cukup benar, bukan praktis manfaat. Anda dapat dengan mudah menggandakan kapasitas efektifINT
dengan memulainya di batas bawah (-2,14 miliar) alih-alih pada 1. Atau, jika 4,3 miliar penuh tidak cukup, maka mulailah denganBIGINT
yang masih hanya 8 byte sebagai dibandingkan dengan 16 untuk GUID, dan ini seqeuential.Jika Anda menyinkronkan data Anda dengan sumber eksternal, GUID persisten bisa jauh lebih baik. Contoh cepat tempat kami menggunakan GUID adalah alat yang dikirim ke pelanggan untuk merayapi jaringan mereka dan melakukan kelas penemuan otomatis tertentu, menyimpan catatan yang ditemukan, dan kemudian semua catatan pelanggan diintegrasikan ke dalam basis data pusat kembali pada akhir kita. Jika kita menggunakan integer, kita akan memiliki 7.398 "1", dan akan jauh lebih sulit untuk melacak "1" yang mana.
sumber
Saya telah menggunakan pendekatan hibrida dengan sukses. Tabel berisi KEDUA
id
kolom integer kunci utama kenaikan-otomatis DANguid
kolom. Theguid
dapat digunakan sebagai diperlukan untuk global unik mengidentifikasi baris danid
dapat digunakan untuk query, menyortir dan identifikasi manusia baris.sumber
id
sudah cukup bagi manusia untuk mengidentifikasi satu baris?INT
PK. Saya merasa aneh bahwa pendekatan ini tidak jauh lebih umum mengingat ini adalah yang terbaik dari kedua dunia. Sepertinya kebanyakan orang lebih memilih untuk menyelesaikan masalah dengan cara yang sangat absolut, tidak menyadari bahwa PK tidak perlu menjadi GUID agar aplikasi tetap menggunakan GUID untuk keunikan dan / atau portabilitas global.Beberapa praktik terbaik di luar sana masih menyebutkan bahwa Anda harus menggunakan tipe data yang mengakomodasi dengan sedikit memori yang memungkinkan seluruh rangkaian nilai yang akan Anda gunakan. Misalnya, jika Anda menggunakannya untuk menyimpan jumlah pengusaha dalam bisnis kecil dan Anda tidak mungkin mencapai 100, maka tidak ada yang akan menyarankan menggunakan nilai bigint sementara int (bahkan smallint) akan melakukannya.
Tentu saja, kelemahannya seperti "Katakan tidak pada skalabilitas!"
Juga, saya tahu ini tidak sepenuhnya terkait, tetapi ada faktor lain tentang ini. Ketika tidak berlebihan, saya biasanya mencoba untuk merekomendasikan untuk menggunakan kunci primer yang tidak diautogenisasi, jika itu masuk akal. Misalnya, jika Anda menyimpan informasi pengemudi, jangan repot-repot membuat kolom autogenerated baru untuk "ID", cukup gunakan nomor lisensi.Saya tahu ini terdengar sangat jelas, tetapi saya melihat hal itu cukup sering dilupakan.Untuk konteks: bagian dari jawaban ini dialamatkan dari pendekatan teoretis data, di mana Anda ingin PK Anda menjadi pengidentifikasi data unik untuk catatan. Sebagian besar waktu kita buat itu ketika sudah ada, maka jawaban sebelumnya.
Namun, sangat jarang bahwa Anda dapat memiliki kontrol ketat atas titik data ini, dan karenanya, Anda mungkin perlu melakukan koreksi atau penyesuaian. Anda tidak dapat melakukannya dengan kunci primer (yah, Anda bisa, tetapi itu bisa menyebalkan).
Terima kasih @ VahiD untuk klarifikasi.
sumber
Menggunakan ID kenaikan otomatis dapat membocorkan informasi tentang aktivitas bisnis Anda. Jika Anda menjalankan toko dan menggunakan
order_id
untuk mengidentifikasi pembelian secara publik, maka siapa pun dapat mengetahui jumlah penjualan bulanan Anda dengan aritmatika sederhana.sumber
Hal lain dengan cara GUID dihasilkan. mrdenny dengan tepat menunjukkan bahwa walaupun newitialentialid () sedang digunakan, memulai kembali instans menyebabkan nilai baru dimulai dengan "lubang" yang tertinggal dalam pemrosesan sebelumnya. Hal lain yang mempengaruhi GUID "berurutan" adalah kartu jaringan. Jika saya ingat dengan benar, UID NIC digunakan sebagai bagian dari algoritma GUID. Jika NIC diganti, tidak ada jaminan bahwa UID akan menjadi nilai yang lebih tinggi untuk mempertahankan aspek hal-hal yang berurutan. Saya juga tidak yakin bagaimana beberapa NIC dapat mempengaruhi penetapan nilai menggunakan algoritma.
Hanya sebuah pemikiran dan saya harap saya mengingat dengan benar. Semoga hari mu menyenangkan!
sumber
Gunakan keduanya
Gunakan int / Bigint untuk Primary Key karena mudah dipelihara dan digunakan sebagai hubungan kunci asing.
Tetapi ikat kolom ke GUID sehingga setiap baris juga memiliki kolom unik
sumber
int
danguid
, seperti yang Anda sarankan dalam jawaban Anda. Dan selain itu, saya tidak berbicara tentang menjelaskan saran Anda hanya kepada saya - maksud saya adalah Anda mungkin ingin memperbarui jawaban Anda . Ngomong-ngomong, apakah Anda sadar bahwa penjawab lain telah menyarankan hal yang sama (kurang lebih) dengan Anda ?