2008-11-28 13 views
75

Oczekuję, że kolumna będzie VARCHAR2, w mojej bazie danych Oracle.Potrzebuję przechowywać kody pocztowe w bazie danych. Jak duża powinna być kolumna?

US Zamki są 9.

kanadyjski jest 7.

myślę 32 znaków byłoby rozsądne górna granica

Czego mi brakuje?

[EDIT] TIL: 12 jest rozsądną odpowiedzią na pytanie Dziękuję wszystkim, którzy przyczynili się.

+2

Według http: //en.wikipedia .org/wiki/List_of_postal_codes, najdłuższy z 12 znaków, jeśli przechowujesz "-", inaczej 11 –

+0

Przydatny link, jednak jego dokładność może być trochę nie na miejscu. EG wyświetla listę australijskich kodów pocztowych jako 7 znaków, podczas gdy w rzeczywistości są to 4. Ref: http://en.wikipedia.org/wiki/Postcodes_in_Australia i lista kodów pocztowych dostępna pod adresem http://www1.auspost.com.au/kody pocztowe /. – rossp

+0

re: mój poprzedni komentarz - to nie znaczy, że ta lista nie jest przydatna jako przewodnik. Zakładając, że lista błądzi po stronie dłuższych kodów pocztowych, najdłuższa długość to 9 znaków, więc 16 znaków lub w tym miejscu powinno dać ci dużo miejsca do oddychania. – rossp

Odpowiedz

2

kanadyjskie Kody pocztowe są tylko 6 znaków, w postaci liter i cyfr (LNLNLN)

+3

Kanadyjskie kody pocztowe mają puste miejsce w środku "ANA NAN" To 7 znaków. – EvilTeach

+1

Ale przestrzeń jest zawsze w środku, więc nie trzeba jej przechowywać. –

+0

@EvilTeach - tak, ale możesz oczekiwać, że dane zostaną znormalizowane przed ich zapisaniem. – ysth

33

przeglądając Wikipedia's Postal Codes page, 32 znaków powinno być więcej niż wystarczająco. Powiedziałbym, że nawet 16 znaków jest dobre.

+3

Dobry link. Nawet biorąc pod uwagę interpunkcja w US ZIP + 4, 10 znaków byłoby wystarczające dla każdego kraju, o ile mogłem powiedzieć. –

+0

Na podstawie tego linku, ze strony z linkiem powyżej, wybrałbym 18, aby uwzględnić kraje takie jak Chile: https://en.wikipedia.org/wiki/List_of_postal_codes – mopo922

+1

Chile ma 7 znaków. Strona internetowa, do której się odwołujesz, po prostu pokazuje wariancję interpunkcji. – EvilTeach

3

To, czego brakuje, to powód, dla którego potrzebny jest specjalny kod pocztowy do obsługi.

Jeśli naprawdę nie potrzebujesz WORK z kodem pocztowym, sugeruję, aby nie martwić się o to. Przez pracę rozumiem raczej specjalne przetwarzanie niż zwykłe używanie do drukowania etykiet adresowych i tak dalej.

Po prostu utwórz trzy lub cztery pola adresu VARCHAR2 (50) [na przykład] i pozwól użytkownikowi wprowadzić, co tylko zechce.

Czy naprawdę potrzebujesz, aby pogrupować zamówienia lub transakcje według kodu pocztowego? Nie sądzę, ponieważ różne kraje mają bardzo różne schematy dla tej dziedziny.

+0

Zgadzam się. Używając pola VARCHAR2 rzeczywistość jest dla pola takiego jak kod pocztowy, który naprawdę nie ma znaczenia. Nieco za duży jest lepszy niż denerwujący jeden klient, ponieważ nie może wprowadzić swoich danych. –

+0

A varchary są przydatne, ponieważ bazy danych (przynajmniej DB2) mogą optymalizować ich przechowywanie, aby nie marnować miejsca na dane. – paxdiablo

+1

Należy zauważyć, że sortowanie według kraju i kodu pocztowego spowoduje w niektórych miejscach niższą stawkę pocztową. – EvilTeach

3

Normalizacja? Kody pocztowe mogą być używane więcej niż jeden raz i mogą być związane z nazwami ulic lub miastami. Oddzielna tabela (y).

+0

Interesujące. Inny punkt widzenia został po prostu przegłosowany bez żadnego powodu. +1 – EvilTeach

+0

Kod pocztowy zazwyczaj odnosi się do bloku po jednej stronie ulicy. Aby znaleźć szerszy region, wybierz pierwszą połowę kodu pocztowego. Posiadanie tej informacji w osobnej tabeli naprawdę nic nie pomoże i byłoby bardziej skomplikowane w utrzymaniu. – RevNoah

+1

@EvilTeach: Założę się, że został wycofany z powodu braku tematu. Czy pokazuje, jak duża kolumna powinna przechowywać każdy możliwy kod pocztowy na świecie? – wmax

10

Dlaczego zadeklarowałeś rozmiar pola większy niż rzeczywiste dane, które spodziewasz się w nim przechowywać?

Jeśli początkowa wersja aplikacji będzie obsługiwać adresy w USA i Kanadzie (co wywnioskowałem z faktu, że wywołujesz te rozmiary w pytaniu), zadeklaruję pole jako VARCHAR2 (9) (lub VARCHAR2 (10), jeśli chcesz przechowywać łącznik w ZIP + 4 pola). Nawet patrząc na posty, które inni poczynili dla kodów pocztowych w różnych krajach, VARCHAR2 (9) lub VARCHAR2 (10) byłyby wystarczające dla większości, jeśli nie wszystkich innych krajów.

W dół linii można zawsze ZMIENIĆ kolumnę w celu zwiększenia długości w razie potrzeby. Generalnie trudno jest jednak powstrzymać kogoś, przed podjęciem decyzji, aby uzyskać "kreatywność" i wprowadzić 50 znaków do pola VARCHAR2 (50) z jednego powodu lub innego (tj. Ponieważ chcą mieć kolejną linię na etykiecie wysyłkowej). Masz również do czynienia z testowaniem przypadków granicznych (czy każda aplikacja, która wyświetla uchwyt ZIP, będzie miała 50 znaków?). Z tym, że gdy klienci pobierają dane z bazy danych, zazwyczaj alokują pamięć na podstawie maksymalnego rozmiaru pobieranych danych, a nie faktycznej długości danego wiersza. Prawdopodobnie nie jest to wielka sprawa w tym konkretnym przypadku, ale 40 bajtów na wiersz może być przyzwoitą porcją pamięci RAM w niektórych sytuacjach.

Na marginesie możesz również rozważyć przechowywanie (przynajmniej dla adresów w USA) kodu pocztowego i rozszerzenia +4 osobno.Generalnie przydatna jest możliwość generowania raportów według regionu geograficznego i często chcesz umieścić wszystko razem w kodzie pocztowym, zamiast rozbijać je za pomocą rozszerzenia +4. W tym momencie nie trzeba próbować SUBSTR outować pierwszych 5 znaków dla kodu pocztowego.

+3

Zakładając, że kodujemy coś głupiego jak Pro * C, mając wystarczająco duże pole wzrostu, oznacza to, że kod nie będzie musiał być dotykany, jeśli zwiększy się użycie. – EvilTeach

+0

Tak, złamanie kodu pocztowego us na 5 i 4 cyfry może mieć sens, w zależności od tego, do czego zamierzasz go używać. Na przykład, jeśli robisz coś w rodzaju dopasowywania adresów, możesz najpierw dopasować na zip5 i rozwiązać sytuacje ambiwidualne przy pomocy zip 9. Pomaga także użyć kodu kraju – EvilTeach

1

Jeśli chcesz zintegrować kody pocztowe w bazie danych, najlepiej użyć bazy danych geonames. Mimo że jest to trudne do wykorzystania i zrozumienia, ale jest to największa geograficzna baza danych dostępna bezpłatnie dla użytkowników takich jak my.

Wszystkie inne podobne bazy danych mają mniej więcej takie same dane i strukturę. Po prostu usuwają dodatkowe/nadmiarowe informacje z bazy danych. Jeśli po prostu robisz to dla systemów o niskim obciążeniu, korzystaj z ich bezpłatnych usług, ograniczenia są atrakcyjne i zapewniają łatwiejszy interfejs za pomocą json i ajax. Można zobaczyć granice here

Dla Państwa informacji varchar (20) jest wystarczająca do przechowywania kodów pocztowych

16

Jak już podniesiony przez @ Neil-McGuigan, Wikipedia ma godnej strony na ten temat. Na tej podstawie należy wpisać 12 znaków: http://en.wikipedia.org/wiki/List_of_postal_codes

Artykuł wikipedia wymienia około 254 krajów, co jest całkiem niezłe w odniesieniu do UPU (Universal Postal Union) ma 192 kraje członkowskie.

+2

Wygląda na to, że Montserrat ma 13 znaków, przykład podany jako "MSR 1110-1350", w powyższym udostępnionym łączu. –

+0

Należy zauważyć, że Montserrat ma tylko 8 znaków, 1110-1350 oznacza zasięg. https://discovermni.com/about-montserrat/montserrat-post-codes/ –

+0

Prawdopodobnie Wikipedia wymaga edycji, ponieważ podobny wyglądający kod pocztowy dla Malty ma ogólny rodzaj, taki jak "AAA NNNN". Nie miałbym nic przeciwko, aby mieć nawet 15 znaków, ponieważ może to być tylko mniejszy problem później, jeśli będziemy musieli dostosować długość kolumny, również przy właściwym użyciu typów danych, nie powinno to mimo wszystko zajmować wszystkich 15 znaków (być może varchar lub nvarchar lub jak?) . –

0

UK zostały opublikowane standardy: UK Government Data Standards Catalogue

Max 35 characters per line 

Międzynarodowy Adres pocztowy:

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 

Brytyjski długość kodu pocztowego:

Minimum 6 and Maximum 8 characters 
Powiązane problemy