Welcher Datentyp sollte für die Speicherung von Telefonnummern in SQL Server 2005 verwendet werden?

StackOverflow https://stackoverflow.com/questions/75105

  •  09-06-2019
  •  | 
  •  

Frage

Ich brauche Telefonnummern in einer Tabelle zu speichern. Bitte legt nahe, welchen Datentyp soll ich verwenden? warten. Bitte lesen Sie, bevor Sie antworten getroffen ..

Dieses Feld muss stark als Sales Rep indiziert werden kann dieses Feld für die Suche verwendet (einschließlich Wildzeichensuche).

Ab jetzt erwarten wir Telefonnummern in einer Reihe von Formaten zu kommen (aus einer XML-Datei). Muss ich einen Parser schreiben, um ein einheitliches Format zu konvertieren? Es könnte Millionen von Daten (mit Dubletten) sein und ich nicht die Server-Ressourcen binden will (in Aktivitäten wie Vorverarbeitung zu viel) jedes Mal ein paar Quelldaten durch .. kommen

Alle Vorschläge sind willkommen ..

Update: Ich habe keine Kontrolle über Quelldaten. Nur, dass die Struktur der XML-Datei ist Standard. Möchten Sie die XML-Analyse auf ein Minimum zu halten. Sobald es in der Datenbank ist, sollte Retrieval schnell sein. Ein verrückter Vorschlag hier los ist, dass es auch bei Ajax Autovervollständigen-Funktion funktionieren soll (so Vertriebsmitarbeiter die passend diejenigen sofort sehen können). OMG !!

War es hilfreich?

Lösung

Enthält diese enthalten:

  • International Zahlen?
  • Erweiterungen?
  • Weitere Informationen neben der tatsächlichen Anzahl (wie "fragen Sie nach bobby")?

Wenn alle diese nicht sind, würde ich ein 10 char-Feld verwendet und Streifen aus allen nicht-numerischen Daten. Wenn der erste ein Ja ist und die anderen beiden sind nicht, würde ich zwei varchar (50) Felder verwenden, eine für den ursprünglichen Eingang und einen mit allen nicht-numerischen Daten gestreift und für die Indizierung verwendet. Wenn 2 oder 3 ja sind, glaube ich, zwei Felder tun würde, und eine Art von verrückt-Parser, um zu bestimmen, was die Erweiterung oder andere Daten und angemessen damit umgehen. Natürlich können Sie die 2. Säule vermeiden, indem sie etwas mit dem Index zu tun, wo es um die zusätzlichen Zeichen Streifen aus, wenn der Indexerstellung, aber ich würde nur eine zweite Spalte machen und tun, wahrscheinlich das Abstreifen von Zeichen mit einem Trigger.

Update: Das AJAX Problem zu beheben, kann es nicht so schlimm, wie Sie denken. Ist dies realistisch der wichtigste Weg ist alles auf den Tisch fertig ist, speichert nur die Ziffern in einer zweiten Spalte wie gesagt, und dann den Index die gruppiert eine für diese Spalte machen.

Andere Tipps

Wir verwenden varchar (15) und sicherlich Index auf diesem Gebiet.

Der Grund dafür ist, dass internationale Standards können bis zu 15 Stellen unterstützen

Wikipedia - Rufnummernformate

Wenn Sie internationale Nummern unterstützen, empfehle ich die getrennte Lagerung von einer Welt Zone-Code oder Ländercode zur besseren Filterabfragen durch, so dass Sie sich nicht selbst finde das Parsen und die Überprüfung der Länge Ihrer Telefonnummer Felder die zurückgegebenen Anrufe zu begrenzen In den USA zum Beispiel

Mit CHAR (10), wenn Sie US-Telefonnummern werden nur gespeichert werden. Entfernen Sie alles außer den Ziffern.

Ich bin fehlt wahrscheinlich die offensichtlich hier, würde aber eine varchar nicht gerade lang genug für Ihre längste erwartete Telefonnummer Arbeit gut?

Wenn I am fehlt etwas offensichtlich, ich würde es lieben, wenn jemand es darauf hinweisen würde ...

würde ich eine varchar (22) verwenden. Groß genug, um eine nordamerikanische Telefonnummer mit der Erweiterung zu halten. Sie würden wollen, dass alle die böse abzustreifen out ‚(‘, ‚)‘, ‚-‘. Zeichen oder analysieren sie einfach alle in ein einheitliches Format

Alex

SQL Server 2005 ist ziemlich gut für Teilzeichenfolge Abfragen für Text in indizierten varchar Felder optimiert. Für das Jahr 2005 führten sie neue Statistiken auf die String Zusammenfassung für Indexfelder. Dies trägt wesentlich dazu bei mit Volltextsuche.

varchar verwenden ist ziemlich ineffizient. das Geld verwenden, Typ und erstellen aus ihm einen Benutzer deklarierten Typ „Telefonnummer“, und erstellen Sie eine Regel nur positive Zahlen zu ermöglichen.

, wenn Sie erklären ihn als (19,4) Sie können sogar speichern Sie eine 4-stellige Erweiterung und sein groß genug für internationale Nummern, und dauert nur 9 Byte Speicherplatz. Auch Indizes sind schnell.

nvarchar mit Vorverarbeitung sie so weit wie möglich zu standardisieren. Sie werden wahrscheinlich Erweiterungen extrahiert werden sollen und speichern sie in einem anderen Bereich.

Normalisieren die Daten dann als varchar speichern. Normalisieren könnte schwierig sein.

Das sollte ein einmaliger Hit. Dann, als ein neuer Rekord in kommt, sind Sie es zu normalisierten Daten zu vergleichen. Sollte sehr schnell sein.

Da Sie viele verschiedene Rufnummernformate aufnehmen müssen (und wahrscheinlich auch Dinge wie Erweiterungen etc.) kann es am meisten Sinn machen, nur zu behandeln es wie jedes andere varchar. Wenn Sie die Eingabe steuern könnten, könnten Sie eine Reihe von Ansätzen, um die Daten nützlicher zu machen, aber es funktioniert nicht so klingen.

Wenn Sie sich entscheiden, um es einfach wie jede andere Zeichenfolge zu behandeln, um die unvermeidlichen Fragen auf die Überwindung über schlechte Daten, mysteriös Telefonnummer Formatierung und was sonst öffnet sich konzentrieren können. Die Herausforderung wird für die Daten in dem Aufbau eine gute Suchstrategie sein und nicht, wie Sie speichern es meiner Meinung nach. Es ist immer eine schwierige Aufgabe mit einem großen Haufen von Daten zu tun, die Sie keine Kontrolle über Sammel hatten.

Verwenden Sie SSIS zu extrahieren und die Informationen zu verarbeiten. Auf diese Weise werden Sie die Verarbeitung der XML-Dateien von SQL Server getrennt haben. Sie können auch die SSIS-Transformationen auf einem separaten Server tun, wenn nötig. Speichern Sie die Telefonnummern in einem Standardformat mit VARCHAR. NVARCHAR wäre unnötig, da wir über Zahlen reden und vielleicht ein paar anderen Zeichen, wie ‚+‘, ‚‘, ‚(‘, ‚)‘ und ‚-.‘

Verwenden Sie ein varchar Feld mit einer Längenbeschränkung.

Es ist ziemlich üblich, ein „x“ oder „ext“ zu verwenden Erweiterungen, um anzuzeigen, erlaubt so 15 Zeichen (für volle internationale Unterstützung) plus 3 (für „ext“) plus 4 (für die Erweiterung selbst), was insgesamt von 22 Zeichen. Das sollten Sie sicher halten.

Alternativ am Eingang normalisieren so dass jeder "ext" wird zu "x" übersetzt, maximal 20 geben.

Ich weiß, dieser Thread ist alt, aber es lohnt sich einen Vorteil der Speicherung als numerischen Typ für die Formatierung Zwecke, speziell in .NET Framework zu erwähnen.

IE

.DefaultCellStyle.Format = "(###)###-####" // Will not work on a string

Es ist immer besser, getrennte Tabellen für Multi bewerteten Attribute wie Telefonnummer zu haben.

Wie Sie also keine Kontrolle über Quelldaten verfügen, können Sie die Daten aus XML-Datei analysieren und sie in das richtige Format konvertieren, so dass es keine Frage sein, mit Formaten eines bestimmten Landes und speichert sie in einer separaten Tabelle so dass Indizierung und Retrieval beide werden effizient sein.

Danke.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top