Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 为什么不将电话号码存储为5列:国家代码、区号、前缀、行号和分机号码?_Database Design - Fatal编程技术网

Database design 为什么不将电话号码存储为5列:国家代码、区号、前缀、行号和分机号码?

Database design 为什么不将电话号码存储为5列:国家代码、区号、前缀、行号和分机号码?,database-design,Database Design,我正在处理最初存储在oracle数据库中的数据,这些数据是带有破折号(123-456-7890)的varchar2(12)字节。最初没有进行验证,人们存储了各种不良数据。在将来,我认为将电话号码的每一部分存储到单独的列中可能是一个好主意。这对性能有影响吗 家庭电话号码(1) 家庭电话号码(3) 家庭电话号码(3) 家庭电话号码(4) 家庭电话分机号码(4) ==您的桌子=== 如果将数据存储在5个单独的列中 然后当用户输入123-456-7890时,它将是这样的 HOME_PHONE_CON

我正在处理最初存储在oracle数据库中的数据,这些数据是带有破折号(123-456-7890)的varchar2(12)字节。最初没有进行验证,人们存储了各种不良数据。在将来,我认为将电话号码的每一部分存储到单独的列中可能是一个好主意。这对性能有影响吗

  • 家庭电话号码(1)
  • 家庭电话号码(3)
  • 家庭电话号码(3)
  • 家庭电话号码(4)
  • 家庭电话分机号码(4)
==您的桌子===

如果将数据存储在5个单独的列中 然后当用户输入123-456-7890时,它将是这样的

HOME_PHONE_CON | HOME_PHONE_AREA | HOME_PHONE_PREF | HOME_PHONE_LINE | HOME_PHONE_EXT
null | 123 | 456 | 7890 | null
(我不在美国,请为错误的格式道歉)

然后必须有人用这个号码搜索客户/用户 他们将输入“123-456-7890”或“1234567890”

你必须

  • 将输入分成5个部分
  • 具有多个条件的查询,如-where HOME\u PHONE\u CON like(“%part1%”)和所有5个部分…
  • 您将需要索引5列
  • 简而言之-为12长度的文本列编制索引要快得多(以防您无法验证用户输入)

    只需将破折号替换为replace()命令即可