19 Stimmen

Rufnummernspalten in einer Datenbank

In den letzten 3 Unternehmen, in denen ich gearbeitet habe, sind die Spalten mit den Telefonnummern vom Typ varchar(n). Der Grund dafür ist, dass sie vielleicht Durchwahlen (ext. 333) speichern wollen. Aber in jedem Fall werden die "-"-Zeichen beim Einfügen und Aktualisieren herausgenommen. Ich verstehe nicht, warum die ".ext"-Zeichen gespeichert werden dürfen, das "-"-Zeichen aber nicht. Hat das noch jemand erlebt und welche Erklärung fällt Ihnen dafür ein? Wenn Sie nur die Zahlen speichern wollen, sollten Sie dann nicht besser ein int-Feld verwenden? Wenn Sie dagegen die Zahl als String/Varchar speichern wollen, warum behalten Sie dann nicht alle Zeichen und machen sich keine Gedanken über die Formatierung beim Anzeigen und die Bereinigung beim Schreiben?

Ich bin auch daran interessiert, zu erfahren, wie die Speicherung von Telefonnummern an anderen Orten umgesetzt wird.

0voto

ZombieSheep Punkte 29085

Das Entfernen einiger Zeichen und das Zulassen anderer kann Auswirkungen haben, wenn die Datenbanktabelle ein anderes System ansteuert, z. B. eine Art IP-Telefonie. Je nach den beteiligten Systemen kann es legitim sein, etc.333 als Suffix zu verwenden, während die Entwickler das "-" in der Zeichenkette möglicherweise nicht berücksichtigt haben (und ja, ich rate hier...)

Was die Speicherung als varchar statt als int betrifft, so ist dies für mich einfach nur gesunder Menschenverstand. Wie bereits erwähnt, können führende Nullen in einem int-Feld entfernt werden, die Abfrage eines int-Feldes kann implizite mathematische Funktionen ausführen (was auch das Entfernen von "-" aus dem Text erklären könnte, Sie wollen ja nicht 555-1234 eingeben und es als -679 gespeichert haben, oder?)

Kurz gesagt, ich kenne die genauen Gründe nicht, kann aber einige Möglichkeiten ableiten.

0voto

Jim C Punkte 5009

Ich würde mich dafür entscheiden, die Ziffern als String zu speichern und die verschiedenen "()" und "-" in meinem Anzeigecode hinzuzufügen. Bei internationalen Nummern wird es schon schwieriger. Wir handhaben das so, dass wir je nach Land verschiedene "internationalisierte" Anzeigeformate haben.

0voto

Darryl Hein Punkte 138311

Wenn ich weiß, dass die Telefonnummern nur in einer bestimmten Region, z. B. Nordamerika, vorkommen, ändere ich die Eingabe in 4 Felder. 3 für die Ortsvorwahl, 3 für die Vorwahl, 3 für die Leitung und vielleicht 5 für die Durchwahl. Diese füge ich dann als 1 Feld mit '-' und vielleicht einem 'e' für die Durchwahl ein. Die Suche muss natürlich nach demselben Verfahren ablaufen. Auf diese Weise erhalte ich regelmäßigere Daten und kann die Nummer sogar zum Telefonieren verwenden, sobald das "-" und die Durchwahl entfernt sind. Ich kann auch leicht zu den ursprünglichen 4 Feldern zurückkehren.

0voto

Gut gemacht! Der Hauptpunkt scheint zu sein, dass die Formatierung der Telefonnummer nicht wirklich Teil der Daten ist, sondern ein Aspekt des Herkunftslandes ist. Indem man den Durchwahlteil der Nummer beibehält, könnte man jedoch das Modell der Trennung von Formatierung und Daten durchbrechen. Ich bezweifle, dass alle Länder dieselbe Syntax bzw. dasselbe Format zur Beschreibung einer Nebenstelle verwenden. Wenn die Integration mit einem Telefonsystem eine (mögliche) Anforderung ist, wäre es außerdem besser, die Durchwahl separat zu speichern und die Nachricht so zu erstellen, wie sie erwartet wird. Mark weist aber auch darauf hin, dass es, wenn man konsistent ist, wahrscheinlich egal ist, wie man sie speichert, da man sie auch konsistent abfragen und verarbeiten kann.

Danke Eric für den Link zu der anderen Frage.

0voto

user2661347 Punkte 181

Wenn ein automatisches Telefonsystem ein Feld verwendet, um einen Anruf zu tätigen, kann es unter Umständen nicht wissen, welche Zeichen es beim Wählen verwenden und welche es ignorieren soll. Ein Mensch sieht vielleicht ein "(" oder ")" oder ein "-"-Zeichen und weiß, dass es sich dabei um Trennzeichen handelt, die die Vorwahl, npa und nxx der Telefonnummer voneinander trennen. Denken Sie jedoch daran, dass jedes Zeichen ein binäres Muster darstellt, das von einem automatischen Wählsystem eingegeben würde, sofern es nicht so vorprogrammiert ist, dass es ignoriert wird. Um dies zu berücksichtigen, ist es besser, nur das Äquivalent der Zeichen zu speichern, die ein Benutzer auf dem Telefonhörer drücken würde, und noch besser, die einzelnen Werte in separaten Spalten zu speichern, damit das Wählgerät einzelne Felder verwenden kann, ohne die Zeichenfolge analysieren zu müssen.

Auch wenn Sie keine Wählautomatik verwenden, ist es eine gute Praxis, Dinge zu speichern, die Sie in Zukunft nicht aktualisieren müssen. Es ist viel einfacher, Zeichen zwischen Feldern hinzuzufügen, als sie aus Zeichenketten zu entfernen.

In Bezug auf die Verwendung eines String- gegenüber einem Integer-Datentyp, wie oben erwähnt, sind Strings der richtige Weg, um Telefonnummern zu speichern, die von Land zu Land unterschiedlich sind. Es gibt einen wichtigen Vorbehalt, dass zwar während der Aggregation von Statistiken für die Berichterstattung (dh SUMME von wie viele Zahlen oder Anrufe) Zeichenfolgen sind viel langsamer als ganze Zahlen zu zählen. Um dies zu berücksichtigen, ist es wichtig, eine Integer-Spalte als Identitätsspalte hinzuzufügen, die Sie für die Zählung anstelle des Datentyps eines varchar- oder char-Feldes verwenden können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X