Gunakan alamat email sebagai kunci utama?

234

Apakah alamat email kandidat yang buruk untuk primer jika dibandingkan dengan nomor yang bertambah secara otomatis?

Aplikasi web kami membutuhkan alamat email untuk menjadi unik dalam sistem. Jadi, saya berpikir untuk menggunakan alamat email sebagai kunci utama. Namun kolega saya menyarankan bahwa perbandingan string akan lebih lambat daripada perbandingan integer.

Apakah itu alasan yang sah untuk tidak menggunakan email sebagai kunci utama?

Kami menggunakan PostgreSQL.

robert
sumber
5
Apa yang Anda maksud dengan 'primer'? Jika alamat email harus unik maka itu adalah kunci dan membutuhkan kendala unik. Apakah Anda memutuskan untuk 'mempromosikan' itu menjadi 'utama' adalah sewenang-wenang, kecuali ada alasan praktis untuk melakukannya misalnya mengoptimalkan sistem yang berkinerja buruk.
onedaywhen
7
Jika Anda ingin database Anda menegakkan alamat email yang unik, buat kolom dengan indeks yang unik, tetapi jangan gunakan itu sebagai kunci utama.
James Westgate
104
@robert Bagaimana jika seseorang ingin mengubah alamat emailnya? Apakah Anda akan mengubah semua kunci asing juga?
systempuntoout
3
@onedaywhen - hampir tidak ada perbedaan, tetapi kunci utama akan dikelompokkan secara default, sedangkan indeks unik tidak akan. Anda masih ingin mendefinisikan kunci primer yang akan menjadi kunci pencarian rekaman tunggal standar, indeks unik hanya menegakkan keunikan kolom di atas indeks normal
James Westgate
3
@ James Westgate: FYI, tidak ada yang namanya pengelompokan otomatis di PostgreSQL. KUNCI UTAMA diimplementasikan pada disk persis sama dengan INDEKS UNIK di mana semua bidang TIDAK NULL.
Matthew Wood

Jawaban:

283

Perbandingan string lebih lambat dari perbandingan int. Namun, ini tidak masalah jika Anda hanya mengambil pengguna dari basis data menggunakan alamat email. Tidak masalah jika Anda memiliki kueri kompleks dengan beberapa gabungan.

Jika Anda menyimpan informasi tentang pengguna di beberapa tabel, kunci asing ke tabel pengguna akan menjadi alamat email. Itu berarti Anda menyimpan alamat email beberapa kali.

Sjoerd
sumber
11
@ Soerd: Masalahnya bukan bahwa alamat email disimpan beberapa kali, meskipun itu jelas tidak efisien, tetapi siapa yang peduli dengan ruang hard drive hari ini. Sebagian besar bisnis tidak memiliki skala google, di mana hal ini penting. Masalahnya adalah bahwa alamat email tidak dapat diubah setelahnya, karena itu adalah kunci utama & dirujuk sebagai kunci asing.
Stefan Steiger
@StefanSteiger Siapa yang mengatakan sesuatu tentang ruang hard drive? Apa pun yang Anda simpan akan menghabiskan ruang dalam RAM.
Jonathan Allen
Jika ada yang bertanya-tanya, seperti yang saya lakukan, kunci GUID akan setara dengan kunci email yang saya pikir.
tofutim
178

Saya juga akan menunjukkan bahwa email adalah pilihan yang buruk untuk membuat bidang yang unik, ada orang dan bahkan usaha kecil yang berbagi alamat email. Dan seperti nomor telepon, email dapat digunakan kembali. [email protected] dapat dengan mudah menjadi milik John Smith satu tahun dan Julia Smith dua tahun kemudian.

Masalah lain dengan email adalah mereka sering berubah. Jika Anda bergabung ke tabel lain dengan itu sebagai kuncinya, maka Anda harus memperbarui tabel lain juga yang bisa menjadi hit kinerja ketika seluruh perusahaan klien mengubah email mereka (yang saya lihat terjadi.)

HLGEM
sumber
47
+1 untuk menyebutkan masalah pembaruan cascading. Itu sebabnya teman membiarkan teman hanya menggunakan kunci pengganti ;-).
sleske
10
ah, saya tidak suka pepatah sama sekali ... kunci pengganti juga bisa menjadi sumber masalah; ya, aplikasi akan lebih kuat untuk mengubah aturan bisnis dan / atau integritas, namun informasi dapat hilang sedikit lebih mudah dan identitas catatan menjadi kurang jelas. jadi saya tidak akan merekomendasikan aturan jempol di sini ...
Unreason
12
@onedaywhen dan @jay, hanya karena Anda pikir itu harus unik jangan membuatnya unik. Dan ya, suami dan istri mungkin pelanggan yang berbeda. Hanya karena Anda belum pernah mengalami ini sebelumnya tidak berarti itu tidak akan terjadi. Saya telah menabraknya dan memang itulah sebabnya email tidak boleh dianggap unik, apakah menurut Anda seharusnya atau tidak. Ini adalah jenis persyaratan yang Anda dorong kembali karena secara inheren salah.
HLGEM
15
@ HLGEM: Saya tidak ingin masuk ke argumen tanpa akhir, tetapi Anda tidak bisa mengatakan bahwa kunci yang diusulkan tidak unik berdasarkan pada hipotetis tanpa mengetahui konteksnya. misalnya dari sudut pandang perusahaan telepon, sebuah nomor telepon secara unik mengidentifikasi pelanggan, menurut definisi. Ya, Anda dapat mengatakan, "Tetapi bagaimana jika ada dua atau tiga orang yang mungkin menjawab ketika Anda memanggil nomor itu?" Tetapi ini tidak relevan. Dari sudut pandang perusahaan telepon, menurut definisi ini adalah satu pelanggan. (lanjutan ...)
Jay
14
(lanjutan) Demikian juga, jika Anda sedang membangun suatu sistem yang sebagian besar berkaitan dengan komunikasi email - mungkin sistem pengiriman pesan, atau sistem penerusan notifikasi - maka kemungkinan bahwa menurut definisi, alamat email secara unik mengidentifikasi pengguna. Jika banyak orang berbagi alamat email itu, itu tidak relevan. Mereka adalah tujuan pesan tunggal, oleh karena itu, mereka adalah pengguna tunggal. "Pengguna" dan "pelanggan" tidak harus sinonim untuk "manusia individu".
Jay
99

kunci primer harus unik dan konstan

alamat email berubah seperti musim. Berguna sebagai kunci sekunder untuk pencarian, tetapi pilihan yang buruk untuk kunci utama.

Steven A. Lowe
sumber
17
Properti dari kunci yang baik adalah yang harus stabil tetapi TIDAK selalu tidak berubah.
onedaywhen
5
@onedaywhen: Yap! Kalau tidak, mengapa SQL mendukung pembaruan berjenjang?
Bill Karwin
18
jika Anda punya pilihan, gunakan kunci konstan / tidak berubah; kurang bekerja untuk Anda di jalan; hanya karena SQL mendukung pembaruan berjenjang tidak berarti selalu merupakan ide yang bagus!
Steven A. Lowe
7
@Vincent Malgrat: "pembaruan berjenjang ... rem normalisasi rem" - metode yang Anda salah pahami konsep normalisasi!
onedaywhen
5
@Vincent Malgrat: terima kasih telah mengonfirmasi bahwa Anda memang telah salah memahami konsep normalisasi. "Anda seharusnya tidak memiliki informasi yang sama diulang pada beberapa baris" - apakah Anda benar-benar bermaksud mengatakan "informasi" ?! Kunci majemuk biasanya akan melibatkan nilai yang diulang pada beberapa baris. Untuk kunci asing, nilai direferensikan daripada "diulang", perbedaan besar. Domain satu kolom dengan dua nilai (mis. 'Ya' dan 'Tidak') akan memiliki nilai yang sama pada beberapa baris dalam tabel referensi jika memiliki tiga atau lebih baris. Ini benar-benar hal mendasar!
onedaywhen
64

Kerugian menggunakan alamat email sebagai kunci utama:

  1. Lebih lambat saat melakukan join.

  2. Catatan lain dengan kunci asing yang diposkan sekarang memiliki nilai lebih besar, mengambil lebih banyak ruang disk. (Mengingat biaya ruang disk saat ini, ini mungkin masalah sepele, kecuali sejauh catatan sekarang membutuhkan waktu lebih lama untuk dibaca. Lihat # 1.)

  3. Alamat email dapat berubah, yang memaksa semua catatan menggunakan ini sebagai kunci asing untuk diperbarui. Karena alamat email tidak terlalu sering berubah, masalah kinerja mungkin kecil. Masalah yang lebih besar adalah Anda harus memastikan untuk menyediakannya. Jika Anda harus menulis kode, ini lebih banyak pekerjaan dan memperkenalkan kemungkinan bug. Jika mesin basis data Anda mendukung "pada pembaruan kaskade", itu adalah masalah kecil.

Keuntungan menggunakan alamat email sebagai kunci utama:

  1. Anda mungkin dapat sepenuhnya menghilangkan beberapa gabungan. Jika semua yang Anda butuhkan dari "catatan utama" adalah alamat email, maka dengan kunci integer abstrak, Anda harus melakukan join untuk mengambilnya. Jika kuncinya adalah alamat email, maka Anda sudah memilikinya dan bergabung tidak perlu. Apakah ini membantu Anda tergantung pada seberapa sering situasi ini muncul.

  2. Saat Anda melakukan kueri ad hoc, mudah bagi manusia untuk melihat catatan master apa yang dirujuk. Ini bisa sangat membantu ketika mencoba melacak masalah data.

  3. Anda hampir pasti akan memerlukan indeks pada alamat email, jadi menjadikannya kunci utama menghilangkan satu indeks, sehingga meningkatkan kinerja sisipan karena mereka sekarang hanya memiliki satu indeks untuk memperbarui, bukan dua.

Menurut pendapat saya, itu bukan slam-dunk. Saya cenderung lebih suka menggunakan kunci alami ketika yang praktis tersedia karena mereka hanya lebih mudah untuk dikerjakan, dan kerugiannya cenderung tidak terlalu penting dalam banyak kasus.

Jay
sumber
@ Conrad: Meskipun, dia menunjukkan bahwa itu bukan PITA jika Anda memiliki mesin yang mendukung ON UPDATE CASCADE. Ini bukan masalah pada saat itu bijaksana kode; satu-satunya masalah sebenarnya adalah seberapa luas pembaruan dan seberapa luas kuncinya. Alamat email mungkin agak banyak, tetapi PEMBARUAN CASCADE untuk PK kode negara 2 karakter bukanlah masalah besar.
Matthew Wood
5
@ Matius IMHO masih PITA. Sebagai contoh, asumsikan bahwa ketika Anda mendesain tabel negara Anda, hanya ada dua tabel yang mereferensikannya, bukan masalah besar, tetapi seiring waktu menjadi 20 tabel masing-masing dengan ratusan ribu catatan. Beberapa dengan referensi beberapa tanpa. Ini membuat satu logika menulis akhirnya menjadi puluhan ribu menulis, dan itu tidak membuatnya ke semua tabel karena seseorang lupa referensi ketika menambahkan tabel. Ini adalah hal yang persis terjadi pada saya di tabel kode negara 2 char I kid you not.
Conrad Frix
@ Wood & Conrad: Kasus terburuk adalah ketika tidak ada dukungan DB bawaan. Maka Anda harus menulis kode untuk itu untuk setiap meja dengan referensi yang diposting, dan ini hanya menyebalkan dan pintu bagi bug untuk menyelinap masuk. Dengan kaskade, Anda hanya harus ingat untuk menambahkan satu klausa pada setiap tabel, bukan seperti itu kesepakatan besar.
Jay
2
Keuntungan 1 dan 3 adalah optimasi prematur, keuntungan 2 adalah manfaat yang sangat kecil dan sepenuhnya diatasi oleh alat kueri yang layak.
Ash
4
@ Ash: Ada perbedaan antara "optimizatin" dan "optimasi prematur". Tapi oke, dengan alasan yang sama, semua kerugian yang saya lihat ada yang disebutkan adalah optimasi prematur. Jadi, di mana itu meninggalkan Anda? Adapun # 2, saya menemukan mengetik di joins tambahan ketika mencoba untuk melakukan permintaan ad hoc menjadi sakit besar. Rekaman sering memiliki beberapa kunci asing sehingga Anda mungkin perlu beberapa penggabungan untuk mendapatkan data yang dapat dipahami. Jika dengan "alat kueri yang layak", yang Anda maksud adalah angka yang mengetahui data apa yang ingin Anda lihat tanpa Anda beri tahu dan secara ajaib menggabungkannya untuk Anda, saya ingin melihat cara kerjanya.
Jay
12

Ini sangat buruk. Anggap beberapa penyedia email keluar dari bisnis. Pengguna kemudian ingin mengubah email mereka. Jika Anda telah menggunakan email sebagai kunci utama, semua kunci asing untuk pengguna akan menduplikasi email itu, membuatnya sangat sulit untuk diubah ...

... dan saya bahkan belum mulai berbicara tentang pertimbangan kinerja.

meriton
sumber
Bagaimana mengubah alamat email menyebabkan duplikat? Kecuali jika pengguna A mengubah alamat emailnya, dan kemudian pengguna B mengubah emailnya menjadi sama dengan nilai lama pengguna A, dan pembaruan Anda tidak dilakukan secara berurutan. Sangat mungkin, kurasa.
Jay
2
Referensi kunci asing, menurut definisi, berisi nilai kunci utama dari baris yang dirujuk. Dengan kata lain, itu menggandakan nilai kunci utama. (Jadi duplikasi tidak disebabkan oleh perubahan nilai. Tetapi perubahan lebih sulit karena duplikasi ini, dan kendala yang menegakkannya).
meriton
5
+1 untuk baris "Asumsikan beberapa penyedia email keluar dari bisnis."
Reddy
Ini bukan masalah. Cascading kunci asing ada untuk memecahkan masalah ini. Jika pengguna mengubah email mereka, perubahan itu akan mengalir ke semua tabel menggunakannya sebagai kunci asing.
Rafa
1
@rafa, saya yakinkan Anda bahwa jika Anda menggunakan pembaruan berjenjang dan seluruh penyedia keluar dari bisnis atau mengubah nama mereka (Yahoo.com menjadi HooYa.com), basis data Anda akan dikunci untuk semua pengguna selama berjam-jam dan mungkin berhari-hari saat kaskade ini mengalir melalui sistem. Ini adalah masalah yang sangat valid (dan alasan mengapa itu adalah ide yang buruk untuk menggunakan pembaruan berjenjang jika Anda memiliki jumlah data yang signifikan dan kuncinya kemungkinan akan berubah.)
HLGEM
12

Saya tidak tahu apakah itu mungkin menjadi masalah dalam pengaturan Anda, tetapi tergantung pada RDBMS Anda, nilai kolom mungkin peka terhadap huruf besar-kecil . Dokumen PostgreSQL mengatakan: "Jika Anda mendeklarasikan kolom sebagai UNIQUE atau PRIMARY KEY, indeks yang dihasilkan secara implisit adalah case-sensitive". Dengan kata lain, jika Anda menerima input pengguna untuk pencarian di tabel dengan email sebagai kunci utama, dan pengguna memberikan "[email protected]", Anda tidak akan menemukan "[email protected]".

xlttj
sumber
7
Layak disebutkan dalam hubungan ini bahwa [email protected] dan [email protected] mungkin kotak surat yang sama atau mungkin kotak surat yang berbeda dan Anda tidak memiliki cara untuk mengatakan - tidak ada dalam spesifikasi untuk mengatakan apakah bagian lokal bersifat case- peka.
telent
Ini lebih merupakan masalah umum dengan penegakan keunikan alamat email daripada apakah mereka harus digunakan sebagai kunci utama - masalah yang sama ada di sana. +1 karena masih merupakan poin yang sangat berguna
11

Sepertinya tidak ada yang menyebutkan masalah yang mungkin terjadi bahwa alamat email dapat dianggap pribadi. Jika alamat email adalah kunci utama, URL halaman profil kemungkinan besar akan terlihat seperti itu ..../Users/[email protected]. Bagaimana jika Anda tidak ingin mengekspos alamat email pengguna? Anda harus menemukan cara lain untuk mengidentifikasi pengguna, mungkin dengan nilai integer unik untuk membuat URL seperti ..../Users/1. Maka Anda akan berakhir dengan nilai integer unik.

Simen Echholt
sumber
9

Pada level logis , email adalah kunci alami. Di fisik tingkat , mengingat Anda menggunakan basis data relasional, kunci alami tidak cocok dengan kunci primer. Alasan utamanya adalah masalah kinerja yang disebutkan oleh orang lain.

Untuk alasan itu, desainnya bisa disesuaikan. Kunci alami menjadi kunci alternatif (UNIK, BUKAN NULL), dan Anda menggunakan kunci pengganti / buatan / teknis sebagai kunci utama, yang dapat menjadi peningkatan otomatis dalam kasing Anda.

systempuntoout bertanya,

Bagaimana jika seseorang ingin mengubah alamat emailnya? Apakah Anda akan mengubah semua kunci asing juga?

Itulah gunanya cascading .

Alasan lain untuk menggunakan kunci pengganti numerik sebagai kunci utama terkait dengan cara kerja pengindeksan di platform Anda. Dalam InnoDB MySQL, misalnya, semua indeks dalam sebuah tabel memiliki kunci primer yang sudah ditentukan sebelumnya, jadi Anda ingin PK sekecil mungkin (untuk kecepatan dan ukurannya). Juga terkait dengan ini, InnoDB lebih cepat ketika kunci primer disimpan secara berurutan, dan sebuah string tidak akan membantu di sana.

Hal lain yang perlu dipertimbangkan ketika menggunakan string sebagai kunci alternatif, adalah menggunakan hash string aktual yang Anda inginkan mungkin lebih cepat, melewatkan hal-hal seperti huruf besar dan kecil pada beberapa huruf. (Aku benar-benar mendarat di sini sambil mencari referensi untuk mengkonfirmasi apa yang baru saja aku katakan; masih mencari ...)

Rafa
sumber
5

Ya, ini adalah kunci utama yang buruk karena pengguna Anda ingin memperbarui alamat email mereka.

Bryan Legend
sumber
1
Kupikir aku akan menunjukkan bahwa sekarang kita telah kaskade ini bukan masalah
malhal
4

ya, lebih baik jika Anda menggunakan bilangan bulat sebagai gantinya. Anda juga dapat mengatur kolom email Anda sebagai batasan unik.

seperti ini:

CREATE TABLE myTable(
    id integer primary key,
    email text UNIQUE
);
ibram
sumber
8
Mengapa "lebih baik"? Adakah alasan atau sumber?
Sjoerd
20
Dapatkah Anda menguraikan itu?
Sjoerd
3

Alasan lain mengapa integer primary key lebih baik adalah ketika Anda merujuk ke alamat email di tabel yang berbeda. Jika alamat itu sendiri adalah kunci utama maka di tabel lain Anda harus menggunakannya sebagai kunci. Jadi, Anda menyimpan alamat email beberapa kali.

Klew
sumber
3

Saya tidak terlalu terbiasa dengan postgres. Kunci Utama adalah topik besar. Saya telah melihat beberapa pertanyaan dan jawaban yang bagus di situs ini (stackoverflow.com).

Saya pikir Anda mungkin memiliki kinerja yang lebih baik dengan memiliki kunci primer numerik dan menggunakan INDIK UNIK pada kolom email. Panjang surel cenderung bervariasi dan mungkin tidak sesuai untuk indeks kunci utama.

beberapa bacaan di sini dan di sini.

Saif Khan
sumber
3

Secara pribadi, saya tidak menggunakan informasi apa pun untuk kunci primer saat merancang basis data, karena sangat mungkin saya perlu mengubah informasi apa pun nanti. Satu-satunya alasan yang saya berikan kunci utama adalah, itu adalah kemudahan untuk melakukan sebagian besar operasi SQL dari sisi klien, dan pilihan saya untuk itu selalu merupakan tipe integer kenaikan otomatis.

tia
sumber
2

Kolega Anda benar: Gunakan bilangan bulat peningkatan otomatis untuk kunci utama Anda.

Anda dapat menerapkan keunikan email baik di tingkat aplikasi, atau Anda dapat menandai kolom alamat email Anda sebagai unik, dan menambahkan indeks pada kolom itu.

Menambahkan bidang sebagai unik hanya akan dikenakan biaya perbandingan string saat menyisipkan ke dalam tabel itu, dan bukan saat melakukan pemeriksaan gabungan dan kunci asing.

Tentu saja, Anda harus perhatikan bahwa menambahkan kendala apa pun ke aplikasi Anda di tingkat basis data dapat menyebabkan aplikasi Anda menjadi tidak fleksibel. Selalu berikan pertimbangan sebelum Anda membuat bidang apa pun "unik" atau "tidak nol" hanya karena aplikasi Anda memerlukannya unik atau tidak kosong.

jrharshath
sumber
1
"Selalu berikan pertimbangan sebelum Anda menerapkan persyaratan x hanya karena aplikasi Anda membutuhkan persyaratan x." - saran terburuk yang pernah saya baca dalam beberapa waktu.
onedaywhen
Saya tidak yakin dengan "argumen" Anda - dalam kehidupan nyata sering kali ada situasi di mana beberapa data penting (misalnya, nomor telepon) tidak akan segera tersedia. Jika bidang seperti itu ditandai sebagai TIDAK NULL dalam database, bidang ini akan mengharuskan pengguna untuk mencemari data dengan bidang dummy (seperti 123) alih-alih membiarkannya kosong. Akan lebih praktis untuk membiarkan aplikasi menangani kendala (dan dalam hal ini, aplikasi dapat menandai bidang kosong sebagai item tindakan).
jrharshath
5
Saya setuju bahwa mendefinisikan bidang "bukan nol" harus dilakukan dengan hati-hati. Persyaratan seperti "kami selalu membutuhkan nomor telepon pelanggan" harus dipertimbangkan dengan hati-hati. Mungkinkah itu tidak diinginkan pada waktu untuk membuat catatan pelanggan meskipun kita tidak tahu nomor telepon sekarang, dan kembali dan mendapatkannya nanti? Tetapi "bidang ini harus unik" adalah kategori yang berbeda. Saya tidak bisa membayangkan mengatakan, "Tidak apa-apa bagi dua karyawan untuk memiliki nomor jaminan sosial yang sama, kami akan mencari tahu nanti." Bagaimana Anda bisa meluruskan data?
Jay
1
Be Wolves: Saya kenal seorang wanita yang tidak memiliki nomor teleponnya sendiri. Apa yang kamu lakukan?
David Thornley
@ Davidvidhorn Kedengarannya seperti Anda harus berolahraga lebih banyak, atau mungkin menyesuaikan sikap ramah.
Philip Schiff
2

Gunakan GUID sebagai kunci utama ... dengan cara itu Anda dapat menghasilkannya dari program saat Anda melakukan INSERT dan Anda tidak perlu mendapatkan respons dari server untuk mengetahui apa kunci utama itu. Ini juga akan menjadi tabel dan basis data unik dan Anda tidak perlu khawatir tentang apa yang terjadi jika Anda memotong tabel suatu hari dan kenaikan otomatis akan diatur ulang ke 1.

JoelFan
sumber
2
Kecuali Anda tidak terlalu peduli dengan kinerja, gunakan GUID. Ini tidak-tidak # 1 jika Anda membangun sistem yang perlu
Micah
tidak ... lihat davybrion.com/blog/2009/05
JoelFan
3
Dikatakan dengan cara Microsoft-Kool-Aid-drinking sejati!
Gary Chambers
2

Saya tahu ini sedikit entri yang terlambat tetapi saya ingin menambahkan bahwa orang-orang meninggalkan akun email dan penyedia layanan memulihkan alamat yang memungkinkan orang lain untuk menggunakannya.

Sebagaimana @HLGEM tunjukkan, "[email protected] dapat dengan mudah menjadi milik John Smith satu tahun dan Julia Smith dua tahun kemudian." dalam hal ini seandainya John Smith menginginkan layanan Anda, Anda harus menolak untuk menggunakan alamat emailnya atau menghapus semua catatan Anda yang berkaitan dengan Julia Smith.

Jika Anda harus menghapus catatan dan itu berkaitan dengan sejarah keuangan bisnis tergantung pada hukum setempat Anda dapat menemukan diri Anda dalam air panas.

Jadi saya tidak akan pernah menggunakan data seperti alamat email, plat nomor, dll. Sebagai kunci utama karena tidak peduli seberapa unik mereka tampaknya berada di luar kendali Anda dan dapat memberikan beberapa tantangan menarik yang mungkin Anda tidak punya waktu untuk berurusan.

Robert
sumber
2

Anda mungkin perlu mempertimbangkan peraturan perundang-undangan data yang berlaku. Email adalah informasi pribadi, dan jika pengguna Anda adalah warga negara UE misalnya, maka berdasarkan GDPR mereka dapat menginstruksikan Anda untuk menghapus informasi mereka dari catatan Anda (ingat ini berlaku terlepas dari negara mana Anda berada).

Jika Anda perlu menyimpan catatan itu sendiri dalam database untuk integritas referensial atau alasan historis seperti audit, menggunakan kunci pengganti akan memungkinkan Anda untuk hanya NULL semua bidang data pribadi. Ini jelas tidak mudah jika data pribadi mereka adalah kunci utama

Stuart Parker
sumber
1

Anda dapat meningkatkan kinerja dengan menggunakan kunci primer integer.

xport
sumber
1

Anda harus menggunakan kunci utama integer. jika Anda ingin kolom email menjadi unik, mengapa Anda tidak mengatur indeks unik pada kolom itu saja?

oezi
sumber
1

Jika Anda memiliki nilai non int sebagai kunci utama maka penyisipan dan pengambilan akan sangat lambat pada data besar.

Amareswar
sumber
1
Tidak, menyisipkannya akan lebih lambat , karena Anda memerlukan dua indeks unik: satu di kunci primer yang dihasilkan dan satu lagi di alamat email.
a_horse_with_no_name
1

primary key harus dipilih atribut statis. Karena alamat email tidak statis dan dapat dibagikan oleh banyak kandidat, maka bukan ide yang baik untuk menggunakannya sebagai kunci utama. Selain itu alamat email adalah string yang biasanya memiliki panjang tertentu yang mungkin lebih besar dari id unik yang ingin kami gunakan [len (email_address)> len (unique_id)] ​​sehingga akan membutuhkan lebih banyak ruang dan bahkan terburuk mereka disimpan beberapa kali sebagai kunci asing . Dan akibatnya itu akan menurunkan kinerja.

pengguna2719152
sumber
0

Itu tergantung pada tabel. Jika baris di tabel Anda mewakili alamat email, maka email adalah ID terbaik. Jika tidak, maka email bukan ID yang baik.

Lajos Arpad
sumber
0

Jika itu hanya masalah mengharuskan email menjadi unik maka Anda bisa membuat indeks unik dengan kolom itu.

Mikha
sumber
0

Email adalah kandidat indeks unik yang bagus, tetapi tidak untuk kunci primer, jika itu adalah kunci utama, Anda tidak akan dapat mengubah alamat email kontak misalnya. Saya pikir permintaan bergabung Anda akan lebih lambat juga.

Chocolim
sumber
0

jangan gunakan alamat email sebagai kunci utama, simpan email sebagai unik tetapi jangan gunakan itu sebagai kunci utama, gunakan id pengguna atau nama pengguna sebagai kunci utama

Nikki
sumber