Was ist eine gute Datenstruktur zum Speichern von Telefonnummern in Datenbankfeldern? Ich suche etwas, das flexibel genug ist, um internationale Nummern zu verarbeiten, und das es ermöglicht, die verschiedenen Teile der Nummer effizient abzufragen.
Bearbeiten: Nur um den Anwendungsfall hier zu verdeutlichen: Ich speichere derzeit Nummern in einem einzelnen Varchar-Feld und lasse sie so, wie der Kunde sie eingegeben hat. Wenn die Nummer dann vom Code benötigt wird, normalisiere ich sie. Das Problem ist, dass, wenn ich ein paar Millionen Zeilen abfragen möchte, um passende Telefonnummern zu finden, dies eine Funktion beinhaltet, wie z
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
das ist schrecklich ineffizient. Auch Abfragen, die nach Dingen wie der Vorwahl suchen, werden extrem schwierig, wenn es sich nur um ein einzelnes Varchar-Feld handelt.
[Bearbeiten]
Die Leute haben hier viele gute Vorschläge gemacht, danke! Als Update mache ich jetzt Folgendes: Ich speichere Zahlen immer noch genau so, wie sie eingegeben wurden, in einem Varchar-Feld, aber anstatt die Dinge zur Abfragezeit zu normalisieren, habe ich einen Auslöser, der alles erledigt, was beim Einfügen von Datensätzen funktioniert oder aktualisiert. Ich habe also Ints oder Bigint für alle Teile, die ich abfragen muss, und diese Felder sind indiziert, damit Abfragen schneller ausgeführt werden.