E-posta adresi birincil anahtar olarak kullanılsın mı?


234

Otomatik artan sayılarla karşılaştırıldığında e-posta adresi birincil için kötü bir aday mı?

Web uygulamamızın sistemde benzersiz olması için e-posta adresine ihtiyacı vardır. E-posta adresini birincil anahtar olarak kullanmayı düşündüm. Ancak meslektaşım dize karşılaştırmasının tamsayı karşılaştırmasından daha yavaş olacağını öne sürüyor.

Birincil anahtar olarak e-postayı kullanmamak geçerli bir neden midir?

Biz kullanıyoruz PostgreSQL.


5
'Birincil' ile ne demek istiyorsun? E-posta adresinin benzersiz olması gerekiyorsa, bu bir anahtardır ve benzersiz bir kısıtlama gerektirir. 'Birincil' olmayı 'teşvik etmeye' karar vermeniz, örneğin, düşük performans gösteren bir sistemi optimize etmek için pratik bir neden olmadıkça, isteğe bağlıdır.
oneday27 Eylül'de

7
Veritabanınızın benzersiz bir e-posta adresini zorunlu kılmasını istiyorsanız, benzersiz bir dizine sahip bir sütun oluşturun, ancak birincil anahtar olarak kullanmayın.
James Westgate

104
@robert Birisi e-posta adresini değiştirmek isterse ne olur? Tüm yabancı anahtarları da değiştirecek misin?
systempuntoout

3
@onedaywhen - neredeyse hiç fark yok, ancak birincil anahtar varsayılan olarak kümelenecek, oysa benzersiz bir dizin olmayacak. Yine de varsayılan tek kayıt arama anahtarı olacak birincil anahtarı tanımlamak isteyeceksiniz, benzersiz dizin yalnızca normal bir dizin üzerinde sütunun benzersizliğini zorlar
James Westgate

3
@ James Westgate: FYI, PostgreSQL'de otomatik kümeleme diye bir şey yok. Bir PRIMARY KEY, disk üzerinde tüm alanların BOŞ DEĞİL olduğu BENZERSİZ BİR ENDEKS ile tamamen aynı şekilde uygulanır.
Matthew Wood

Yanıtlar:


283

Dize karşılaştırması int karşılaştırmasından daha yavaştır. Ancak, bir kullanıcıyı e-posta adresini kullanarak veritabanından almanız önemli değildir. Birden çok birleşime sahip karmaşık sorgularınız olması önemli.

Kullanıcılar hakkında bilgileri birden çok tabloda depolarsanız, kullanıcılar tablosunun yabancı anahtarları e-posta adresi olur. Bu, e-posta adresini birden çok kez sakladığınız anlamına gelir.


11
@Sjoerd: Sorun, e-posta adresinin birden fazla kez saklanması değil, bu kesinlikle verimsiz olmasına rağmen, bugün sabit disk alanını önemseyen. Çoğu işletmenin, bunun önemli olacağı google ölçeği yoktur. Sorun, hem birincil anahtar hem de yabancı anahtar olarak adlandırıldığı için e-posta adresinin daha sonra değiştirilememesidir.
Stefan Steiger

@StefanSteiger Sabit disk alanı hakkında kim bir şey söyledi? Sakladığınız her şey RAM'de yer kaplayacak.
Jonathan Allen

Herhangi birinin merak ettiği gibi, bir GUID anahtarı sanırım bir e-posta anahtarına eşdeğer olacaktır.
tofutim

178

Ayrıca, e-postanın benzersiz bir alan oluşturmak için kötü bir seçim olduğunu, bir e-posta adresini paylaşan insanlar ve hatta küçük işletmeler olduğunu da belirteceğim. Telefon numaraları gibi, e-postalar da yeniden kullanılabilir. Jsmith@somecompany.com kolayca bir yıl John Smith ve iki yıl sonra Julia Smith'e ait olabilir.

E-postalarla ilgili bir başka sorun da sık sık değişmeleridir. Anahtar olarak bununla diğer tablolara katılıyorsanız, diğer tabloları da güncellemeniz gerekir; bu da, tüm müşteri şirketi e-postalarını değiştirdiğinde oldukça başarılı bir performans olabilir (gördüğüm.)


47
Basamaklı güncelleme probleminden bahsettiği için +1. Bu yüzden arkadaşlar sadece yedek anahtarlar ;-) kullanmasına izin verir.
sleske

10
ah, söylemeyi hiç sevmiyorum ... yedek anahtarlar da sorunların kaynağı olabilir; evet, uygulama iş ve / veya bütünlük kurallarını değiştirmek için daha sağlam olacaktır, ancak bilgiler biraz daha kolay kaybolabilir ve kayıtların kimliği daha az netleşir. bu yüzden olur değil ... Burada bir Pratik bir kural tavsiye
unreason

12
@onedaywhen ve @jay, sırf benzersiz olduğunu düşündüğünüz için benzersiz yapmayın. Ve evet bir karı koca farklı müşteriler olabilir. Daha önce bununla karşılaşmadığınız için bunun olmayacağı anlamına gelmez. Ben içine girdim ve bu yüzden e-posta olması gerektiğini düşünün ya da olmasın benzersiz kabul edilmemelidir bu yüzden olur. Bu, geri ittiğiniz bir tür gereksinimdir çünkü doğal olarak yanlıştır.
HLGEM

15
@HLGEM: Sonsuz bir tartışmaya girmek istemiyorum, ancak önerilen bir anahtarın bağlamı bilmeden varsayımlara dayanarak benzersiz olmadığını söyleyemezsiniz. örneğin telefon şirketinin bakış açısından, bir telefon numarası bir müşteriyi tanım gereği benzersiz olarak tanımlar. Evet, "Ama bu numarayı aradığınızda cevap verebilecek iki veya üç kişi varsa" diyebilirsiniz. Ancak bu önemsizdir. Telefon şirketinin bakış açısından, tanımı gereği bu bir müşteri. (devam ediyor ...)
Jay

14
Aynı şekilde, büyük ölçüde e-posta iletişimleriyle (belki de bir mesaj gönderme sistemi veya bir bildirim yönlendirme sistemi) ilgilenen bir sistem oluşturuyorsanız, tanım gereği bir e-posta adresinin bir kullanıcıyı benzersiz şekilde tanımlaması muhtemeldir. Birden fazla kişi bu e-posta adresini paylaşıyorsa, bu önemsizdir. Tek bir mesaj hedefidir, bu nedenle tek bir kullanıcıdırlar. "Kullanıcı" ve "müşteri" nin "bireysel insan" ile eşanlamlı olması gerekmez.
Jay

99

birincil anahtar benzersiz ve sabit olmalıdır

e-posta adresleri mevsimler gibi değişir. Arama için ikincil anahtar olarak kullanışlıdır, ancak birincil anahtar için zayıf bir seçimdir.


17
İyi bir anahtarın özelliği, istikrarlı olması, ancak mutlaka değiştirilememesidir.
oneday27 Eylül'de

5
@onedaywhen: Evet! Aksi halde SQL neden basamaklı güncellemeleri desteklesin?
Bill Karwin

18
eğer bir seçeneğiniz varsa, sabit / değişmez anahtarlar için gidin; yolda daha az iş; SQL basamaklı güncellemeleri desteklemesi onun her zaman iyi bir fikir olduğu anlamına gelmez!
Steven A. Lowe

7
@Vincent Malgrat: "basamaklı güncellemeler ... frenler db normalizasyonu" - methinks normalleşme kavramını yanlış anladınız!
oneday

5
@Vincent Malgrat: normalleştirme kavramını gerçekten yanlış anladığınızı doğruladığınız için teşekkür ederiz. "Aynı bilgiyi birden fazla satırda tekrarlamamalısınız" - gerçekten "bilgi" demek mi istediniz ?! Bileşik anahtar genellikle birden çok satırda yinelenen değerler içerir. Yabancı anahtar için, değerlere "tekrarlanan" değil, büyük fark referans verilir. İki değere sahip tek sütunlu bir alan (ör. "Evet" ve "Hayır"), üç veya daha fazla satırı varsa, bir referans tablosundaki birden çok satırda aynı değerlere sahip olacaktır. Bu gerçekten basit şeyler!
oneday29

64

Bir e-posta adresini birincil anahtar olarak kullanmanın dezavantajları:

  1. Birleşim yaparken daha yavaş.

  2. Yabancı anahtar kaydedilmiş diğer kayıtların değeri daha büyüktür ve daha fazla disk alanı kaplar. (Bugün disk alanı maliyeti göz önüne alındığında, kaydın şimdi okunması daha uzun sürmesi dışında bu muhtemelen önemsiz bir konudur. Bkz. # 1.)

  3. Bir yabancı anahtar olarak kullanan tüm kayıtları güncellenmeye zorlayan bir e-posta adresi değişebilir. E-posta adresi bu kadar sık ​​değişmediği için, performans sorunu büyük olasılıkla küçüktür. Daha büyük sorun, bunu sağladığınızdan emin olmanızdır. Kodu yazmak zorundaysanız, bu daha fazla iştir ve hata olasılığını ortaya çıkarır. Veritabanı motorunuz "güncelleme kademeli" yi destekliyorsa, bu küçük bir sorundur.

E-posta adresini birincil anahtar olarak kullanmanın avantajları:

  1. Bazı birleşimleri tamamen ortadan kaldırabilirsiniz. Eğer "ana kayıt" dan ihtiyacınız olan tek şey e-posta adresiyse, o zaman soyut bir tamsayı anahtarıyla almak için bir birleştirme yapmanız gerekir. Anahtar e-posta adresiyse, o zaman zaten buna sahipsiniz ve katılma gereksizdir. Bunun size yardımcı olup olmayacağı, bu durumun ne sıklıkta ortaya çıktığına bağlıdır.

  2. Geçici sorgular yaparken, bir insanın hangi ana kayda referansta bulunduğunu görmesi kolaydır. Bu, veri sorunlarını izlemeye çalışırken büyük bir yardımcı olabilir.

  3. Neredeyse kesinlikle e-posta adresinde bir dizine ihtiyacınız olacak, bu yüzden birincil anahtar yapmak bir dizini ortadan kaldırır, böylece artık iki yerine güncellenecek tek bir dizine sahip oldukları için eklerin performansını iyileştirir.

Benim düşünceme göre, bu her iki şekilde de bir smaç değil. Pratik bir anahtar mevcut olduğunda doğal anahtarları kullanmayı tercih ediyorum, çünkü çalışmak daha kolay ve dezavantajları çoğu durumda gerçekten önemli değil.


@Conrad: ON UPDATE CASCADE'i destekleyen bir motorunuz varsa bunun bir PITA olmadığını belirtiyor. Bu noktada sorun değil; tek gerçek, güncellemenin ne kadar kapsamlı ve anahtarın ne kadar geniş olduğudur. E-posta adresi biraz fazla olabilir, ancak 2 karakterlik ülke koduna sahip bir PK için CASCADE GÜNCELLEME çok önemli değildir.
Matthew Wood

5
@Matthew IMHO hala bir PITA. Örneğin, ülke tablonuzu tasarladığınızda, sadece iki tablo olduğunu, büyüklük olmadığını varsayalım, ancak zamanla her biri yüz binlerce kayıt içeren 20 tablo oldu. Bazı referans ile bazı olmadan. Bu, tek bir mantık yazmasının on binlerce yazma olmasını sağlar ve tüm tablolara bunu yapmaz, çünkü birisi tablo eklendiğinde referansı unutur. Bu tam olarak bir şey bana 2 char ülke kodu tablo bana oldu ben çocuk değil.
Conrad Frix

@Wood & Conrad: En kötü durum, yerleşik DB desteği olmadığı zamandır. Daha sonra yayınlanan bir referansla her tablo için kod yazmanız gerekir ve bu sadece bir ağrı ve hataların kayması için bir kapıdır. büyük anlaşma.
Jay

2
Avantaj 1 ve 3 erken optimizasyonlardır, avantaj 2 çok küçük bir avantajdır ve herhangi bir iyi sorgu aracıyla tamamen aşılır.
Kül

4
@Ash: Sana "optimizatin" ve "erken optimizasyon" arasındaki fark. Ama tamam, aynı mantıkla, kimsenin bahsettiğim tüm dezavantajları erken optimizasyonlardır. Peki bu sizi nereye bırakıyor? # 2'ye gelince, büyük bir acı olmak için geçici sorgular yapmaya çalışırken ekstra eklemelerde yazmayı buluyorum. Kayıtların genellikle birden fazla yabancı anahtarı vardır, bu nedenle anlaşılır verilere ulaşmak için birkaç birleştirmeye ihtiyacınız olabilir. "Terbiyeli sorgu aracı" ile, siz söylemeden hangi verileri görmek istediğinizi anlayan ve sihirli bir şekilde sizin için birleştiren bir şeyi kastediyorsanız, bunun nasıl çalıştığını görmek istiyorum.
Jay

12

Oldukça kötü. Bazı e-posta sağlayıcılarının işsiz kaldığını varsayın. Kullanıcılar daha sonra e-postalarını değiştirmek isteyeceklerdir. E-postayı birincil anahtar olarak kullandıysanız, kullanıcılar için tüm yabancı anahtarlar bu e-postayı çoğaltır ve değiştirilmesini oldukça zorlaştırır ...

... ve performansla ilgili konulardan bahsetmedim bile.


E-posta adreslerini değiştirmek kopyaların oluşmasına nasıl neden olur? A kullanıcısı e-posta adresini değiştirmezse ve B kullanıcısı e-postasını A kullanıcısının eski değeriyle aynı olarak değiştirmezse ve güncellemeleriniz sırayla yapılmazsa. Uzaktan mümkün, sanırım.
Jay

2
Yabancı anahtar başvurusu, tanım gereği, başvurduğu satırın birincil anahtarının değerini içerir. Başka bir deyişle, birincil anahtarın değerini çoğaltır. (Bu nedenle, çoğaltma, değeri değiştirmekten kaynaklanmaz. Ancak, bu çoğaltma ve onu zorlayan kısıtlama nedeniyle değiştirmek daha zordur).
meriton

5
"Bazı e-posta sağlayıcılarının işsiz kaldığını varsayın" satırı için +1.
Reddy

Bu sorun değil. Bu sorunu çözmek için yabancı anahtar basamaklı var. Bir kullanıcı e-postasını değiştirirse, değişiklik onu yabancı anahtar olarak kullanan tüm tablolara kademelendirilir.
Rafa

1
@rafa, size basamaklı güncellemeler kullanırsanız ve tüm bir sağlayıcı iş dışına çıkarsa veya adlarını değiştirirse (Yahoo.com HooYa.com olur), veritabanınızın bu basamaklı halde saatlerce ve belki de günlerce kilitleneceğini garanti ederim. sistem üzerinden. Bu çok geçerli bir sorundur (ve önemli miktarda verileriniz varsa ve anahtarın değişmesi muhtemelse basamaklı güncellemeleri kullanmanın kötü bir fikir olmasının bir nedeni.)
HLGEM

12

Bunun kurulumunuzda bir sorun olup olmadığını bilmiyorum, ancak RDBMS'nize bağlı olarak sütunların değerleri büyük / küçük harfe duyarlı olabilir . PostgreSQL belgeleri şunları söylüyor: “Bir sütunu BENZERSİZ veya PRIMARY KEY olarak bildirirseniz, dolaylı olarak oluşturulan dizin büyük / küçük harfe duyarlıdır”. Diğer bir deyişle, birincil anahtar olarak e-posta içeren bir tablodaki arama için kullanıcı girişini kabul ederseniz ve kullanıcı "John@Doe.com" sağlarsa, "john@doe.com" ifadesini bulamazsınız.


7
Bu bağlantıda, John@Doe.com ve john@Doe.com'un aynı posta kutusu olabileceğini veya farklı posta kutuları olabileceğini ve söyleyecek bir yolunuz olmadığını belirtmek gerekir; hassas.
telent

Bu daha genel bir konudur benzersizliği bunun yerine birincil anahtarlar olarak kullanılması gerektiğini daha e-posta adresleri uygulanmasına - aynı sorun iki şekilde de yoktur. + 1 hala çok kullanışlı bir nokta olduğu için

11

Hiç kimse, e-posta adreslerinin özel olarak değerlendirilebileceği olası bir sorundan bahsetmemiş gibi görünüyor. E-posta adresi birincil anahtarsa, büyük olasılıkla bir profil sayfası URL'si benzer görünür ..../Users/my@email.com. Kullanıcının e-posta adresini göstermek istemiyorsanız ne olur? URL'yi yapmak için kullanıcıyı benzersiz bir tamsayı değeriyle tanımlamanın başka bir yolunu bulmanız gerekir ..../Users/1. Sonuçta benzersiz bir tamsayı değeri elde edersiniz.


9

At mantıksal düzeyde , e-posta doğal anahtarıdır. at fizikselİlişkisel bir veritabanı kullandığınızda düzeyde, birincil anahtar birincil anahtarla iyi uyuşmaz. Bunun nedeni esas olarak başkaları tarafından belirtilen performans sorunlarıdır.

Bu nedenle tasarım uyarlanabilir. Doğal anahtar alternatif anahtar olur (EŞSİZ, BOŞ DEĞİL) ve birincil anahtar olarak sizin durumunuzda otomatik bir artış olabilecek bir yedek / yapay / teknik anahtar kullanırsınız .

systempuntoout sordu,

Birisi e-posta adresini değiştirmek isterse ne olur? Tüm yabancı anahtarları da değiştirecek misin?

Bunun için basamaklı .

Birincil anahtar olarak sayısal bir vekil anahtar kullanmanın başka bir nedeni, dizinlemenin platformunuzda nasıl çalıştığıyla ilgilidir. Örneğin, MySQL'in InnoDB'sinde, bir tablodaki tüm dizinler, kendilerine asılmış birincil anahtara sahiptir, bu nedenle PK'nın mümkün olduğunca küçük olmasını istersiniz (hız ve boyut değerleri için). Bununla ilgili olarak, birincil anahtar sırayla saklandığında InnoDB daha hızlıdır ve bir dize orada yardımcı olmaz.

Bir dizgiyi alternatif bir anahtar olarak kullanırken göz önünde bulundurulması gereken bir başka şey de, gerçek dizenin bir karmasını kullanarak, bazı harflerin büyük ve küçük harfleri gibi şeyleri atlayarak daha hızlı olabilmesidir. (Aslında söylediklerimi doğrulamak için referans ararken buraya indim; hala bakıyorum ...)



4

evet, bunun yerine bir tamsayı kullanmak daha iyidir. e-posta sütununuzu benzersiz kısıtlama olarak da ayarlayabilirsiniz.

bunun gibi:

CREATE TABLE myTable(
    id integer primary key,
    email text UNIQUE
);

8
Neden "daha iyi"? Herhangi bir sebep veya kaynak var mı?
Sjoerd

20
Bunu biraz açıklayabilir misin?
Sjoerd

3

Tamsayı birincil anahtarının daha iyi olmasının bir başka nedeni, farklı tablodaki e-posta adresine başvurmanızdır. Adresin kendisi birincil anahtarsa, başka bir tabloda onu anahtar olarak kullanmanız gerekir. Böylece e-posta adreslerini birden çok kez saklarsınız.


3

Postgres hakkında fazla bilgim yok. Birincil Anahtarlar büyük bir konudur. Bu sitede bazı mükemmel sorular ve cevaplar gördüm (stackoverflow.com).

Sayısal bir birincil anahtara sahip olarak daha iyi bir performansa sahip olabileceğinizi ve e-posta sütununda BENZERSİZ BİR İNDEKS kullanabileceğinizi düşünüyorum. E-postaların uzunlukları değişme eğilimindedir ve birincil anahtar dizini için uygun olmayabilir.

bazıları burada ve burada okuyor .


3

Şahsen, veritabanı tasarlarken birincil anahtar için herhangi bir bilgi kullanmıyorum, çünkü daha sonra herhangi bir bilgiyi değiştirmeniz gerekebilir. Birincil anahtarı sağlamamın tek nedeni, çoğu SQL işlemini istemci tarafından yapmak kolaylıktır ve bunun için seçimim her zaman otomatik artışlı tamsayı tipi olmuştur.


2

İş arkadaşınız haklı: Birincil anahtarınız için otomatik artırıcı bir tam sayı kullanın.

E-posta benzersizliğini uygulama düzeyinde uygulayabilir veya e-posta adresi sütununuzu benzersiz olarak işaretleyebilir ve bu sütuna bir dizin ekleyebilirsiniz.

Alanı benzersiz olarak eklemek, birleştirmeleri ve yabancı anahtar kısıtlama denetimlerini gerçekleştirirken değil, yalnızca bu tabloya eklerken dize karşılaştırmasına mal olur.

Tabii ki, veritabanı düzeyinde uygulamanıza herhangi bir kısıtlama eklemenin, uygulamanızın esnek olmamasına neden olabileceğini unutmayın. Herhangi bir alanı "benzersiz" veya "boş değil" yapmadan önce, uygulamanızın benzersiz veya boş olmaması gerektiğinden daima dikkat edin.


1
"X'inizi, uygulamanızın x gereksinimine ihtiyacı olduğu için uygulamadan önce daima gereken özeni gösterin." - bir süredir okuduğum en kötü tavsiye.
oneday27 Eylül'de

Senin "argüman" ile ikna olmadım - gerçek hayatta genellikle bazı temel verilerin (örneğin, bir telefon numarası) hemen kullanılamayacağı durumlar olacaktır. Böyle bir alan bir veritabanında NULL DEĞİL olarak işaretlenirse, kullanıcıların verileri boş bırakmak yerine kukla alanlarla (123 gibi) kirletmesini gerektirir. Uygulamanın kısıtlamaları ele almasına izin vermek daha pratik olacaktır (ve bu durumda uygulama boş bir alanı bir işlem öğesi olarak işaretleyebilir).
jrharshath

5
"Boş olmayan" bir alan tanımlamanın ihtiyatlı bir şekilde yapılması gerektiğine katılıyorum. "Her zaman müşterinin telefon numarasına ihtiyacımız var" gibi gereksinimler dikkatle ele alınmalıdır. Şu anda telefon numarasını bilmesek de zaman zaman müşteri kaydı oluşturmak istenmeyebilir ve geri dönüp daha sonra alabilir miyiz? Ancak "bu alan benzersiz olmalı" farklı bir kategoridir. "İki çalışanın aynı sosyal güvenlik numarasına sahip olması sorun değil, daha sonra çözeceğiz" diyemiyorum. Verileri nasıl düzeltebilirsiniz?
Jay

1
Kurt Olun: Bir zamanlar kendi telefon numarası olmayan bir kadın tanıyordum. O zaman ne yapacaksın?
David Thornley

@DavidThornley Daha fazla çalışmanız ya da belki de daha dostça bir tavır takınmanız gerektiği anlaşılıyor.
Philip Schiff

2

Bir birincil anahtar olarak bir GUID kullanın ... bir INSERT yaptığınızda programınızdan oluşturabilirsiniz ve birincil anahtarın ne olduğunu bulmak için sunucudan yanıt almanız gerekmez. Ayrıca tablolar ve veritabanları arasında benzersiz olacak ve bir gün tabloyu keserseniz ve otomatik artış 1'e sıfırlanırsa ne olacağı konusunda endişelenmenize gerek yoktur.


2
Performansla ilgili hiçbir şeye önem vermediğiniz sürece bir GUID kullanın.
Ölçeklendirilmesi


3
Gerçek Microsoft-Kool-Aid içme tarzında söyledi!
Gary Chambers

2

Bu biraz geç bir giriş olduğunu biliyorum ama insanların e-posta hesaplarını terk ve servis sağlayıcıları başka bir kişinin kullanmak için izin adresi kurtarmak eklemek eklemek istiyorum.

@HLGEM'in işaret ettiği gibi "Jsmith@somecompany.com kolayca bir yıl John Smith ve iki yıl sonra Julia Smith'e ait olabilir." bu durumda John Smith hizmetinizi istiyorsa, onun e-posta adresini kullanmayı reddetmeniz veya Julia Smith ile ilgili tüm kayıtlarınızı silmeniz gerekir.

Kayıtları silmeniz gerekiyorsa ve bunlar yerel yasalara bağlı olarak işletmenin finansal geçmişiyle ilgili ise kendinizi sıcak suda bulabilirsiniz.

Bu nedenle, e-posta adresleri, plakalar vb.


2

Geçerli herhangi bir veri düzenleme mevzuatını dikkate almanız gerekebilir. E-posta kişisel bilgilerdir ve kullanıcılarınız örneğin AB vatandaşıysa, GDPR kapsamında bilgilerini kayıtlarınızdan silmenizi isteyebilir (hangi ülkeye bağlı olduğunuza bakılmaksızın bunun geçerli olduğunu unutmayın).

Referans bütünlüğü veya denetim gibi geçmişe dönük nedenlerden dolayı kaydın kendisini veritabanında tutmanız gerekirse, bir yedek anahtar kullanmak tüm kişisel veri alanını NULL yapmanıza izin verir. Kişisel verileri birincil anahtar ise bu kolay değildir.


1

tamsayı birincil anahtarını kullanarak performansı artırabilirsiniz.


1

bir tamsayı birincil anahtarı kullanmalısınız. e-posta sütununun benzersiz olması gerekiyorsa, neden bu sütunda benzersiz bir dizin ayarlamıyorsunuz?


1

Birincil anahtar olarak int olmayan bir değeriniz varsa, büyük verilerde ekleme ve alma işlemleri çok yavaş olacaktır.


1
Hayır, ekler yavaşlar , çünkü iki benzersiz dizine ihtiyacınız vardır : biri oluşturulan birincil anahtarda diğeri e-posta adresinde.
a_horse_with_no_name

1

birincil anahtar statik bir öznitelik seçilmelidir. E-posta adresleri statik olmadığından ve birden fazla aday tarafından paylaşılabildiğinden, bu adresleri birincil anahtar olarak kullanmak iyi bir fikir değildir. Ayrıca, e-posta adresleri genellikle [len (email_address)> len (unique_id)] ​​kullanmak istediğimiz benzersiz kimlikten daha büyük olabilecek belirli bir uzunluktaki dizelerdir, bu nedenle daha fazla alan gerektirir ve en kötüsü yabancı anahtar olarak birden çok kez saklanır . Ve sonuç olarak performansın düşmesine yol açacaktır.


0

Bu tabloya bağlıdır. Tablonuzdaki satırlar e-posta adreslerini temsil ediyorsa, e-posta en iyi kimliktir. Değilse, e-posta iyi bir kimlik değildir.


0

E-postanın benzersiz olmasını gerektirme meselesi varsa, o sütunla benzersiz bir dizin oluşturabilirsiniz.


0

E-posta iyi bir benzersiz dizin adayıdır, ancak birincil anahtar için değildir, birincil anahtarsa, örneğin kişinin e-posta adresini değiştiremezsiniz. Sanırım katılma sorgularınız da daha yavaş olacak.


0

e-posta adresini birincil anahtar olarak kullanmayın, e-postayı benzersiz tutun, ancak birincil anahtar olarak kullanmayın, kullanıcı kimliğini veya kullanıcı adını birincil anahtar olarak kullanmayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.