Posta kodlarını bir veritabanında saklamam gerekiyor. Sütun ne kadar büyük olmalı?


103

Oracle Veritabanımda sütunun bir VARCHAR2 olmasını bekliyorum.

ABD Fermuarları 9'dur.

Kanadalı 7'dir.

32 karakterin makul bir üst sınır olacağını düşünüyorum

Neyi kaçırıyorum?

[DÜZENLE] TIL: 12 soruya makul bir cevap Katkıda bulunan herkese teşekkürler.


Kullanışlı bağlantı, ancak doğruluğu biraz yetersiz olabilir. Örneğin, Avustralya posta kodlarını 4 iken 7 karakter olarak listeler. Ref: en.wikipedia.org/wiki/Postcodes_in_Australia ve www1.auspost.com.au/postcodes adresinde bulunan posta kodu listesi .
rossp

re: önceki yorumum - bu, bu listenin bir rehber olarak yararlı olmadığı anlamına gelmez. Listenin daha uzun posta kodlarının yanında hata yaptığını varsayarsak, en uzun uzunluk 9 karakterdir, bu nedenle 16 karakter veya benzeri yerler size nefes almanız için bolca alan sağlamalıdır.
rossp

Ayrıca ülke listesi biraz kısa. Eminim gezegende listelenenlerden daha fazla ülke vardır ...
Robert Koritnik

2
En.wikipedia.org/wiki/List_of_postal_codes'a göre , en uzun 12 karakter, eğer '-' saklıyorsanız, aksi halde 11
Neil McGuigan

@CMS: Bu wikipedia sayfasının bağlantısını güncellemek isteyebilirsiniz , daha detaylı olacak gibi görünüyor.
Vajk Hermecz

Yanıtlar:


51

Wikipedia'nın Posta Kodları sayfasına göz atarken , 32 karakter fazlasıyla yeterli olmalıdır. 16 karakterin bile iyi olduğunu söyleyebilirim.


8
İyi bağlantı. US ZIP + 4'te noktalama işaretine izin verse bile, anlayabildiğim kadarıyla her ülke için 10 karakter yeterli olacaktır.
Jonathan Leffler

Bu bağlantıya dayanarak, yukarıda bağlantısı verilen sayfadan, Şili gibi ülkeleri barındırmak için 18 ile giderdim: en.wikipedia.org/wiki/List_of_postal_codes
mopo922

5
Şili 7 karakterdir. Referans verdiğiniz web sayfası sadece noktalama varyansını gösteriyor.
EvilTeach

21

@ Neil-mcguigan tarafından zaten ortaya atıldığı gibi, wikipedia'nın konu hakkında iyi bir sayfası var. Bu 12 karaktere dayanarak bunu yapmalıdır: http://en.wikipedia.org/wiki/List_of_postal_codes

Wikipedia makalesi, UPU (Evrensel Posta Birliği) 192 üye ülkesi olan ~ 254 ülkeyi listeliyor .


2
Montserrat'ın sadece 8 karakter olduğunu ve 1110-1350'nin bir aralığı ifade ettiğini unutmayın. discovermni.com/about-montserrat/montserrat-post-codes
Vajk Hermecz

Malta için benzer görünümlü posta kodu "AAA NNNN" gibi genel bir posta koduna sahip olduğundan, Wikipedia'nın düzenlemeye ihtiyacı var. 15 karakter bile olmasını umursamam çünkü daha sonra sütun uzunluğunu ayarlamak zorunda kalırsak daha az sorun olabilir, ayrıca veri türlerinin doğru kullanımıyla, yine de 15 karakterin hepsini (muhtemelen varchar veya nvarchar veya benzeri?) .
Manohar Reddy Poreddy

12

Neden içinde depolamayı beklediğiniz gerçek verilerden daha büyük bir alan boyutu beyan edersiniz?

Uygulamanızın ilk sürümü ABD ve Kanada adreslerini destekleyecekse (bu, sorunuzda bu boyutları belirttiğiniz gerçeğinden anladığım kadarıyla), alanı VARCHAR2 (9) (veya VARCHAR2 ( 10) kısa çizgiyi ZIP + 4 alanlarında saklamayı düşünüyorsanız). Başkalarının ülkeler arasında posta kodlarına yaptığı gönderilere bakıldığında bile, VARCHAR2 (9) veya VARCHAR2 (10) diğer tüm ülkeler olmasa da çoğu için yeterli olacaktır.

İhtiyaç duyulması halinde uzunluğu artırmak için satırın aşağısında her zaman sütunu DEĞİŞTİRebilirsiniz. Ancak, birilerinin "yaratıcı" olmaya karar vermesini ve şu veya bu nedenle bir VARCHAR2 (50) alanına 50 karakter doldurmasını engellemek genellikle zordur (örneğin, bir nakliye etiketinde başka bir satır istediği için). Ayrıca sınır durumlarını da test etmelisiniz (ZIP görüntüleyen her uygulama 50 karakter işleyecek mi?). Ve istemciler veri tabanından veri alırken, genellikle belirli bir satırın gerçek uzunluğuna değil, getirilecek verinin maksimum boyutuna göre bellek ayırıyorlar. Muhtemelen bu özel durumda çok büyük bir anlaşma değil, ancak satır başına 40 bayt, bazı durumlar için iyi bir RAM yığını olabilir.

Bir kenara, posta kodunu ve +4 uzantısını ayrı ayrı depolamayı da düşünebilirsiniz (en azından ABD adresleri için). Coğrafi bölgeye göre raporlar oluşturabilmek genellikle yararlıdır ve +4 uzantısıyla ayırmak yerine sık sık her şeyi bir posta koduna yerleştirmek isteyebilirsiniz. Bu noktada, ZIP kodu için ilk 5 karakteri SUBSTR yapmaya çalışmak zorunda kalmamak faydalıdır.


4
Pro * C gibi aptalca bir kodlama yaptığımızı varsayarsak, alanın büyümek için yeterince büyük olması, kullanım arttığında koda dokunulmasına gerek kalmayacağı anlamına gelir.
EvilTeach

Evet, ABD posta kodunu 5 ve 4 haneye bölmek, onu ne amaçla kullanmayı planladığınıza bağlı olarak mantıklı olabilir. Örneğin, bir tür adres eşleştirmesi yapıyorsanız, önce zip5 ile eşleşmek ve zip 9 ile belirsiz durumları çözmek isteyebilirsiniz. Ayrıca bir ülke kodu kullanmak da yardımcı olur
EvilTeach

3

Eksik olan şey, posta kodunun özel olarak ele alınmasına ihtiyaç duymanızın bir nedenidir.

Eğer gerçekten gerekmiyorsa İŞ Posta koduyla, bu konuda endişe değil öneririm. İş derken, sadece adres etiketleri vb. Yazdırmak için kullanmak yerine özel işlemler yapmayı kastediyorum.

VARCHAR2 (50) [örneğin] için üç veya dört adres alanı oluşturun ve kullanıcının istediği şeyi girmesine izin verin.

Siparişlerinizi veya işlemlerinizi gerçekten posta koduna göre gruplamanız gerekiyor mu? Sanmıyorum, çünkü farklı ülkelerde bu alan için çok farklı planlar var.


Katılıyorum. Bir VARCHAR2 alanı kullanmak, posta kodu gibi bir alan için gerçek anlamda önemli değildir. Ayrıntılarını giremedikleri için biraz fazla büyük bir müşteriyi sinirlendirmekten daha iyidir.
Toby Allen

Veritabanları (en azından DB2) depolama alanını boşa harcamamak için bunların depolanmasını optimize edebileceğinden ve varchars kullanışlıdır.
paxdiablo

1
ülke ve posta koduna göre sıralamanın bazı yerlerde daha düşük posta ücretlerine neden olacağı belirtilebilir.
EvilTeach

10
Disgaree. Bir süre sonra, veri tabanınızdaki adresleri doğrulamanız gerekeceğine karar vereceksiniz (örneğin, yazım ve veri girişi hatalarını düzeltmek için) ve işte o zaman her şeyi içeri sokmak yerine veri modelinizi doğru bir şekilde oluşturmanın avantajını bulacaksınız. kovalar.
Gary Myers

1
@Pax Royal Mail'e toplu postayı posta kodunun merkez bölgesine göre (ilk harf / iki harf) teslim ederseniz, posta kodunun normal ikinci sınıf postadan daha ucuz olan MailSort ile teslim edilmesini sağlayabilirsiniz. Bu sadece bir örnek.
Richard Gadsden

3

Normalleşme mi? Posta kodları birden fazla kez kullanılabilir ve sokak isimleri veya kasaba isimleriyle ilgili olabilir. Ayrı tablo (lar).


İlginç. Farklı bir bakış açısı, neden yokken basitçe olumsuz oy kullandı. +1
EvilTeach

Posta kodu genellikle caddenin bir tarafındaki bir bloğa atıfta bulunur. Daha geniş bir bölge bulmak için posta kodunun ilk yarısını seçmelisiniz. Bu bilgileri ayrı bir tabloda bulundurmak gerçekten hiçbir şeye yardımcı olmayacak ve bakımı daha karmaşık olacaktır.
RevNoah

4
@EvilTeach: Bahse girerim konu dışı olduğu için reddedilmiştir. Dünyadaki olası her posta kodunu saklamak için bir sütunun ne kadar büyük olması gerektiğini size söylüyor mu? Hayır.
wmax

2

Kanada Posta Kodları, harf ve rakam (LNLNLN) biçiminde yalnızca 6 karakterdir


3
Kanada posta kodlarının ortasında "ANA NAN" yani 7 karakter boştur.
EvilTeach

1
Ancak alan her zaman ortada olduğundan, depolamanıza gerek kalmaz.
Graeme Perrow

1
Boşluk verilerin bir parçası gibi görünmüyor: "Not: Kanada posta kodları her zaman aynı sırayla biçimlendirilir: alfabetik karakter / rakam / alfa / rakam / alfa / rakam (örn. K1A0B1)." Bu Canada Post web sitesinden.
tegbains

2
Boşluğu atlamanın 'normalleşme' ile bir ilgisi olduğunu sanmıyorum. Bu sadece bir görüntü sorunu. Hesap numaralarındaki çizgiler gibi. Bunu saklamazdım ve dizine eklenebilen bir CountryCode (int) alanı yerine Kanada posta kodlarını tanımlamasına güvenmem. Veri ve Sunum katmanını ayırmak, bunu yapmanın doğru yoludur.
Sam

2
Canada Post, zarfları adreslerken posta kodundaki alanı tercih ediyor. En iyisi alanla saklamak ve girişte doğrulamayı yapmaktır.
RevNoah

2

Birleşik Krallık standartlarını yayınladı: Birleşik Krallık Hükümeti Veri Standartları Kataloğu

Max 35 characters per line 

Uluslararası Posta Adresi:

Minimum of 2 lines and maximum of 5 lines for the postal delivery point 
details, plus 1 line for country and 1 line for postcode/zip code 

İngiltere posta kodu uzunluğu:

Minimum 6 and Maximum 8 characters 

1

Posta kodlarını veritabanına entegre etmek istiyorsanız, coğrafi adlar veritabanı kullanmak en iyisidir. Kullanımı ve anlaşılması zor olsa da, bizim gibi kullanıcıların ücretsiz olarak kullanabileceği en büyük coğrafi veritabanıdır.

Diğer tüm bu tür veritabanları, aşağı yukarı aynı veri ve yapıya sahiptir. Sadece bazı fazladan / fazlalık bilgileri veritabanından kaldırırlar. Sadece düşük yüklü sistemler için yapıyorsanız, ücretsiz hizmetlerini kullanırsanız, limitler çekicidir ve json ve ajax kullanarak daha kolay arayüz sağlar. Sınırları buradan görüntüleyebilirsiniz

Bilginiz için varchar (20) posta kodlarını saklamak için yeterlidir

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.