Ortak alanlardaki en iyi uygulamalar (İsim, e-posta, adres, cinsiyet vb.) [Kapalı]


Yanıtlar:


50

Herhangi bir evrensel en iyi uygulamalardan çok şüphelenmeye meyilliyim çünkü bu alanların çoğu için şeytan ayrıntıda gizli. Bilginin nispeten yaygın olması, uygulamanızın verileri diğer uygulamaların kullandığı gibi kullandığı anlamına gelmez. Bu, veri modelinizin biraz farklı olması gerekebileceği anlamına gelir.

  • Adınız ve Soyadınız: Neden adı alıyorsunuz? Bir kişinin tam yasal adını alma zorunluluğunuz varsa (yani, yasal belgeler veya doğum sertifikaları hazırlıyorsanız), muhtemelen bir kişinin adını sorarsanız, yazmak istediğinizden daha fazla alana izin vermek isteyebilirsiniz. yeni web uygulamanızda onları arayacak bir şeyleriniz var.
  • Adres: Adres ile ne yapacaksın? Ne tür adresleri saklıyorsunuz? ABD'de mortgage kredisi oluşturduğunuz mülkün adresini saklıyorsanız, büyük olasılıkla tamamen standartlaştırılmış bir adres edinmeyi çok umursuyorsunuz, bu durumda veri modeli muhtemelen adresiniz ne olursa olsun çok yakından ilgilenmek isteyecektir. standardizasyon aracı döner. İnsanların bir ürünü teslim etmek için bir adres girmelerini istiyorsanız, serbest biçimli metinler için bir kaç satır yeterli olabilir. Buradaki çizgilerin uzunluğu, baskı adres etiketleri gibi şeyler yapan aşağı akış işlemlerinin gereksinimlerine bağlı olabilir.
  • Durum: Geçerli durum değerlerini tanımlayabildiğinizi varsayarsak, muhtemelen bir STATEtablo oluşturmak ve STATEve ADDRESStablolar arasında yabancı bir anahtar ilişki oluşturmak anlamlı olur . Ancak geçerli değerleri belirleme yeteneği, geçerli adres kümesini en azından belirli bir ülke grubuyla sınırladığınız anlamına gelir. Pek çok site için sorun değil, ancak yeni bir ülkeyi desteklemek için biraz iş yapmanız gerekiyor.
  • Şehir: Yerinde potansiyel olarak şehir düzeyinde düzenlemelerin olduğu yerlerle ilgili verilerle uğraşıyorsanız (yani, şehir bazında uygulanan farklı vergi oranlarının olduğu yerlerde), bu durumu devlete benzer şekilde ele almak isteyebilirsiniz ve CITYgeçerli şehirler ile tablo CITYve ADDRESStablolar arasında yabancı bir anahtar ilişkisi . Öte yandan, yalnızca bir ürünü teslim almaya çalışıyorsanız ve aynı şehrin çeşitli sürümlerinin masanızda olmasına dikkat etmiyorsanız, kullanıcının serbest biçimli metni girmesine izin vermek yeterlidir. Elbette, yabancı anahtarlar saklıyorsanız, geçerli tüm değerlere sahip olduğunuzdan emin olmak için yeterli miktarda işiniz olacaktır. Ancak asıl mesele, şirketin zaten bu işi yapmış olduğu ürünlerdir (örneğin satış vergisi veritabanları).
  • Telefon: Telefon numaralarıyla ne yapıyorsunuz ve neden? Bazı uygulamalar, kullanıcının bunları girmeye karar verdiği herhangi bir biçimde telefon numaralarını almak ve sonraki tüm sorgular için bu biçimlendirmeyi korumak isteyecektir. Kullanıcıların, telefon numaralarının nasıl kaydedileceği ve görüntüleneceği konusunda kendi tercihleri ​​olduğu kişisel bir adres defteri tasarlıyorsanız, bu yaygın bir durumdur. Diğer uygulamalar girilen biçimlendirmeyi yok saymak, yalnızca sayısal karakterleri çıkarmak ve ardından tüm telefon numaralarının benzer biçimlendirmeye sahip olmasını sağlamak için geri almadaki verileri biçimlendirmek ister. İşletmelere hizmet veriyorsanız, kullanıcıların bir uzantı girmesi için ayrı bir alan isteyebilirsiniz. Giden bir arama işlemini desteklemeye çalışıyorsanız, alan kodunu ve ülke kodunu ayrı sütunlarda saklamak isteyebilirsiniz;
  • Cinsiyet: Pek çok uygulama için, bir cinsiyet kodunu ('M' veya 'F') bir tabloda saklamak tamamen mantıklıdır. Öte yandan, ek seçenekler (Diğer, Intersex, Transseksüel) isteyebileceğiniz veya doğumdaki cinsiyet ve mevcut cinsiyet gibi bir şeyi saklamanız gereken durumlar olabilir.

düşünülmesi gereken birçok şeyi içeren ilginç bir cevap - ancak insanların daha ileriye gitmelerine yardımcı olacak faydalı bir fikri bulunmamakta ... örneğin, telefon olayının içerdiği oldukça basit bir şey var:> vakaların% 80'i: yazabileceğiniz sayı Telefondaki birine ulaşacak bir yer, belki de diğer ülkeleri de kapsaması gerektiğini de ekleyerek. bu yüzden evet, ülke ön eki olan / olmayan bir sayı olabileceğini düşünüyorsanız, birkaç karakter arasında bir fark vardır, ancak kesinlikle dünyanın en uzun telefon numarası gibi bir şey vardır ve bu artıyı kullanmak çoğu için oldukça güvenlidir. kılıflar
Henning,

24

Ayrıca örnek verilere ve beklenen izleyicilere dayanarak tahmin edebilirsiniz . Bulunduğunuz yere bağlı.

Bazı notlar:

Adresler:

İsimler:

Telefon numarası: Uluslararası kod, uzunluk, cep vs ev, cep telefonu olarak yalnızca sayı olarak izin ver


3
Son iki bağlantı ("Önce Soyadı" ve "En uzun ne ...") kesildi.
Marc L.,

1
@MarcL. "Önce Soyad" bağlantısını düzelttim (düzenlemem kabul edilirse). "En uzun olan nedir ..." SO soruları "yapıcı değil" olarak kapatıldı ve silindi (>> 10k temsilciniz varsa yine de görebilirsiniz).
balta.

2
Wayback Machine "Önce Soyadı" makalesine sahiptir: web.archive.org/web/20160823135055/http://www.solidether.net/…
Av Pinzur

10

Yukarıdaki harika cevaplara ek olarak, unicode karakterleri kabul etmeyi de unutmayın. Sırf ABD’de olduğun için yabancı karakterleri sütunlarına kabul etmek istemediğin anlamına gelmez.

Bununla birlikte, isimler için genellikle 50 karakter öneririm. 320 bir e-posta adresi için fazlasıyla yeterli olmalıdır (emin olmak için ANSI standardını kontrol edebilirsiniz). 255 karakter ile dikkatli tarafında adres hatası için. Muhtemelen asla o kadar büyük bir adrese ihtiyaç duymayacak olsanız da, C / O satırlarını ve bunun gibi şeyleri dahil edersiniz. Şehir oldukça büyük olmalı, orada oldukça uzun şehir isimleri var. Devlet için ülkeyle aynı, bir çocuk masası ile gidin. Posta kodu için ABD posta kodlarından daha uzun olan uluslararası posta kodlarını unutmayın. Sırf uluslararası desteklemediğin için hala olabilirsin. Askeri insanlar da dahil olmak üzere farklı illerde yaşayan birçok ABD vatandaşı var.

Pek çok ülkede devlet olmadığı için devletin isteğe bağlı olması gerektiğini unutmayın.


Son projemde, uluslararası posta standartları konusunda, maksimum hat uzunluğu 39 olarak belirtilen bir belge buldum. Fransa'nın, şehirden sonra giden büyük hacimli alıcılar için ayrı bir kodu var. Bu büyüklük artı ülke 3 veya 4 serbest biçimli alanlara izin veririm.
BillThor

9

Sersem benim çitin üzerine oturmaktan ağrıyor, ben de bazı cevaplar atacağım ve umudumdan aşağılık oy kullanmamayı umuyorum. Lütfen yapıcı eleştiri sunun.

E:

dak: 6 (a@g.cn). Veya yerel etki alanı e-posta adreslerini
maksimum: 320 254 (RFC) izlemek istiyorsanız, 3

Bir e-postayı doğrulamak için gereken kod miktarı gerçekten çılgıncadır, bu nedenle "@" varsa geçerli olduğunu varsayalım.

Bir e-posta adresini "iletişim yöntemi" olarak soyutlamak isteyebilirsiniz, böylece bir kullanıcıyla iletişim kurmak için tüm yöntemleri kolayca listeleyebilirsiniz.

Cinsiyet

Cinsiyet zamanla değişebilir, böylece sizin için önemliyse izleyebilrsiniz. Http://en.wikipedia.org/wiki/ISO/IEC_5218 izleyin.

NOT_KNOWN(0),
MALE(1),
FEMALE(2),
NOT_APPLICABLE(9);

Adresler: NORAM

En ucuza gidip Kuzey Amerika adreslerine sadık kalacağım.

Çoğunlukla vergilendirme nedeniyle soyut ülkelere, bölgelere, şehirlere ve ilçelere uygundur. Vergiler birçok düzeyde geçerli olabilir, bu nedenle bir vergi oranını soyut bir coğrafi bölgeye yönlendirebilirsiniz, altınsınız.

Coğrafi Alan :

id: int  
type: {country, division, county, city, indian reservation}  
name: varchar(45)  [1]
abbreviation: nullable varchar(4)  
parent_id: nullable int  

Adres :

id: int  
postal_area_id: int, references GeographicArea  
county_or_city_id: int, references GeographicArea  
street_address: varchar(255)  
suite: nullable varchar(255)  

Gerekirse, satır 2 ve satır3 ekleyin.

Http://en.wikipedia.org/wiki/Address_(geography) bakın

Şimdi bir adres bir adres. Birden fazla kişi bir adreste yaşayabilir ve bir kişinin aynı anda ve zaman içinde birden fazla adresi olabilir, bu nedenle bunun için çok sayıda masaya ihtiyacınız vardır.

PartyAddress

party_id: int references Party  
address_id: int references Address  
purpose: {home, work, ...}  

Zamanla takip ediyorsanız a from_dateve nullable ekleyin to_date.

Telefon numaraları

Bir tarafın birden fazla telefon numarası olabilir ve bir telefon numarası birden fazla kişi tarafından kullanılabilir. Fakslar, telefon görüşmeleri, modemler vb. İçin bir telefon numarası kullanılabilir ve uzantıları olabilir. Bunların hepsi zaman içinde değişebilir.

Telefon numarası

id: int  
value: varchar(15) - the max allowed by the ITU  

En az 3 ("911" için) veya belki 7 (alan kodunu çevirmenize izin vermeyen özel bir tür yerel numara olan "310-4NET" olabilir)

Gerekirse, bunu ülke koduna vs. ayırabilirsiniz.

Http://en.wikipedia.org/wiki/E.164 standardını kullanmalısınız

PartyPhoneNumber

party_id: int references Party  
phone_number_id references PhoneNumber  
extension: nullable varchar(11) - ITU max  
purpose: {home, work, fax, modem, ...}  

İsimler

İsimler zor. İşte nedeni:

  1. Bazı kişilerin içinde tek bir kelimeyle yasal bir adı vardır: http://en.wikipedia.org/wiki/List_of_legally_mononymous_people

  2. Bazı insanlar çok kelimeli isimlere sahiptir: http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

  3. Bazı insanlar aynı anda birden fazla isme sahip (örneğin üniversitemde çok sayıda Asyalı öğrenci var, ancak "tercih edilen" daha Batılı isimleri kullanmaktan hoşlanıyorlar)

  4. Bazen, kızlık soyadı ve evli isimleri gibi insanların isimlerini zaman içinde izlemeniz gerekir.

  5. Bireyleri ve organizasyonları çeşitli iyi nedenlerle soyutlamak istiyorsunuz

    masa partisi oluşturun (kimlik büyük birincil anahtarı);

    tablo parti_adı oluşturun (kimliği biggerial birincil anahtarı, party_id bigint boş olmayan referans partileri (id), boş olmayan küçük referanslar yazın party_name_type (id) --elided, ex "maiden", "legal");

    tablo name_component (kimlik birincil birincil anahtarı, party_name_id bigint boş olmayan referanslar parti_adı (id) oluşturun, smallint olmayan boş referanslar yazın name_component_type (id), - "eskiden" verilen "isim metni boş değil);


3

Önceki cevaplardan biraz farklı bir bakış açısıyla ve LDAP hakkında konuşmanın uygun görünmediğinden , RFC 4519 - "Hafif Dizin Erişim Protokolü (LDAP): Kullanıcı Uygulamaları için Şema" ilgi çekici olabilir.

Uygulamanızın böyle bir dizine eşlenmesi gerekiyorsa faydalı olabilir. Aksi takdirde, muhtemelen gereksinimlerinize uygun değildir.

Bu tanımlar sadece veriden ibaret değil, aynı zamanda tarlalarda kullanılabilecek bazı operatörlerle de ilgilidir. postalAddress, örneğin bir caseIgnoreListSubstringsMatch. Bu şemaya kesinlikle uymanız gerektiğini önermiyorum, ancak prensiplere bakmak ilginç olabilir, özellikle uygulamanızdaki isim ve adresleri nasıl karşılaştırmanız gerekebileceği, veritabanınızın tasarımıyla ilgili olabilir.


3

İsimlerle ilgili olarak, çift tırnak işareti kullanmayı düşünün; böylece İrlandaca veya İtalyanca isimlerden (örneğin, O'Hara veya D'Amato) kesme işareti kaçmak zorunda kalmazsınız.

Ayrıca, kullanmak için iyi bir Düzenli İfadeler seti almanızı tavsiye ederim, böylece ad alanlarınızın bazı bölümlerini yazdırabilirsiniz (örneğin, ilk harf, takma ad, Jr / Sr, vb.).


1
Veya soyadım gibi Hollandaca isimler.
Colin 't Hart
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.