Jaka jest dobra struktura danych do przechowywania numerów telefonów w polach bazy danych? Szukam czegoś, co jest wystarczająco elastyczne, aby obsługiwać numery międzynarodowe, a także czegoś, co umożliwia wydajne przeszukiwanie różnych części numeru.
Edycja: aby wyjaśnić tutaj przypadek użycia: obecnie przechowuję liczby w jednym polu varchar i zostawiam je tak, jak wprowadził je klient. Następnie, gdy numer jest potrzebny przez kod, normalizuję go. Problem polega na tym, że jeśli chcę przeszukać kilka milionów wierszy, aby znaleźć pasujące numery telefonów, obejmuje to funkcję, taką jak
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
co jest strasznie nieefektywne. Również zapytania, które szukają rzeczy, takich jak numer kierunkowy, stają się niezwykle trudne, gdy jest to tylko jedno pole varchar.
[Edytować]
Ludzie podali tutaj wiele dobrych sugestii, dzięki! Jako aktualizacja, oto, co teraz robię: nadal przechowuję liczby dokładnie tak, jak zostały wprowadzone, w polu varchar, ale zamiast normalizować rzeczy w czasie zapytania, mam wyzwalacz, który działa, gdy rekordy są wstawiane lub zaktualizowany. Mam więc ints lub biginty dla wszystkich części, które muszę zapytać, a te pola są indeksowane, aby zapytania działały szybciej.