2017-03-11 1 views
0

Ich arbeite mit Daten, die ursprünglich in einer Oracle-Datenbank als varchar2 (12) Bytes mit den Bindestrichen (123-456-7890) gespeichert wurde. Es gab ursprünglich keine Validierung und die Leute speicherten alle Arten von schlechten Daten. In der Zukunft dachte ich, es wäre eine gute Idee, jeden Teil der Telefonnummer in separaten Spalten zu speichern. Ist das schlecht für die Leistung?Warum nicht eine Telefonnummer als 5 Spalten speichern: Ländercode, Vorwahl, Vorwahl, Zeilennummer und Durchwahl?

  • HOME_PHONE_CON Nummer (1)
  • HOME_PHONE_AREA Nummer (3)
  • HOME_PHONE_PREF Nummer (3)
  • HOME_PHONE_LINE Nummer (4)
  • HOME_PHONE_EXT Anzahl (4)

Antwort

0

= == Ihre Tabelle ===

Wenn Sie die Daten in 5 separaten speichern Spalten dann, wenn Benutzereingaben 123-456-7890, es ist wie dieses

HOME_PHONE_CON | HOME_PHONE_AREA | HOME_PHONE_PREF | HOME_PHONE_LINE | HOME_PHONE_EXT 
null | 123 | 456 | 7890 | null 

(Ich bin nicht in den USA so entschuldige mich für das falsche Format) wird

dann jemand für ein suchen haben Kunden/Nutzer mit dieser Nummer werden sie Eingang „123-456-7890“ oder „1234567890“

Sie müssen

  1. Split die Eingabe in 5 Teile
  2. Abfrage mit mehreren Zustand wie - wo HOME_PHONE_CON wie ('% Teil1%') und alle 5 Teile ...
  3. Sie indizieren 5 Spalten In

wollen kurz - es viel schneller zum Index für eine Spalte 12 Länge Text (falls Sie nicht alles tun, um die Benutzereingabe zu verifizieren)

ersetzen Sie einfach die Striche aus mit replace() Befehl wird gut

Verwandte Themen