Mamy zespół, który projektuje tabele i relacje dla programistów. W naszej organizacji ściśle przestrzegają normalizacji 3NF - co, szczerze mówiąc, zgadzam się z tym, biorąc pod uwagę wielkość naszej organizacji i zmiany potrzeb lub klientów w czasie. Jest tylko jedna dziedzina, dla której nie mam jasności co do powodów ich decyzji projektowej: adresy.
Chociaż dotyczy to głównie adresów w Stanach Zjednoczonych, myślę, że może to dotyczyć każdego kraju, który to robi. Każda część adresu otrzymuje własną kolumnę w tabeli adresów. Weźmy na przykład ten adres w Stanach Zjednoczonych:
Attn: Jane Doe
485 1/2 N Smith St SW, APT 300B
Chicago, IL 11111-2222
Zostałby podzielony w bazie danych w następujący sposób:
- Numer ulicy: 485
- Ułamek uliczny: 1/2
- Ulica jednokierunkowa: N (północ)
- Nazwa ulicy: Smith
- Typ ulicy: ST (ulica)
- Ulica post-kierunkowa: SW (Southwest)
- Miasto: Chicago
- Stan: IL (Illinois)
- Kod pocztowy: 11111
- Kod pocztowy: 2222
- Kraj (przyjmuje się, że jest to USA)
- Uwaga: Jane Doe
- Skrytka pocztowa: NULL
- Rodzaj mieszkania: APT (Apartament)
- Numer mieszkania: 300B
I byłoby jeszcze kilka innych kolumn związanych z trasami wiejskimi i trasami kontraktowymi. Ponadto nasza konkretna aplikacja będzie prawdopodobnie zawierać kilka międzynarodowych adresów. Projektanci danych powiedzieli, że dodają kolumny specyficzne dla adresów międzynarodowych, które byłyby normalnymi polami linii 1, linii 2.
Na początku myślałem, że to za DROGA. Wyszukiwanie online wielokrotnie odnosi się do korzystania z wiersza adresu 1, 2, 3 i ewentualnie 4, a następnie podziału miasta, regionu i kodu pocztowego. Mamy jeden przypadek użycia dla naszej nowej aplikacji, w której ta szczegółowość jest korzystna. Musimy sprawdzić, czy użytkownik nie tworzy duplikatu firmy, a sprawdzenie adresu jest jedną z weryfikacji. My może zmusić go do pracy w wierszu adresu 1 i 2, ale byłoby trudniejsze.
Jeśli chodzi o naszą konkretną aplikację, musimy przechowywać wiele rodzajów adresów dla firm i osób (adres fizyczny, mailing, wysyłka itp.). My może trzeba wygenerować druku listów, jednak wymóg ten nie został omówiony tak daleko.
Niektóre inne rzeczy, które aplikacje w naszej organizacji muszą obsługiwać:
- Audyt (z pełnymi tabelami historii)
- Drukowanie etykiet adresowych
- Generowanie formularzy drukowanych
- Raportowanie (dla rządów krajowych i regionalnych)
Chociaż nasza aplikacja może nie robić wszystkiego, co robi każda inna aplikacja, dzielenie adresów na wiele komponentów to standard korporacyjny, w którym pracuję. Niezależnie od tego, czy nasza aplikacja skorzystałaby na tym, jesteśmy do tego zmuszeni.
Częściowo powiązane pytanie StackOverflow: Gdzie jest dobry parser adresów, który został zamknięty, ale ilustruje, jak trudne mogą być parsowanie adresów.
Aby lepiej zrozumieć ich decyzję projektową i sprzedać naszemu klientowi pomysł ...
Jakie problemy rozwiązuje się, dzieląc adres ulicy na poszczególne kolumny?
Punkty bonusowe dla każdego, kto wdrożył taki system, ponieważ napotkał problemy.