データベースフィールドに電話番号を格納するための適切なデータ構造は何ですか?国際番号を処理するのに十分な柔軟性があるもの、および番号のさまざまな部分を効率的に照会できるものを探しています。
編集:ユースケースをここで明確にするために:私は現在、単一のvarcharフィールドに数値を格納し、顧客が入力したとおりに数値を残しています。次に、コードで番号が必要な場合は、正規化します。問題は、数百万行をクエリして一致する電話番号を検索する場合、次のような関数が含まれることです。
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
これはひどく非効率的です。また、市外局番などを検索するクエリは、varcharフィールドが1つだけの場合、非常に扱いにくくなります。
[編集]
人々はここでたくさんの良い提案をしました、ありがとう!更新として、これが私が今行っていることです:数値を入力されたとおりにvarcharフィールドに格納しますが、クエリ時に物事を正規化する代わりに、レコードが挿入されるときにすべての機能を実行するトリガーがありますまたは更新されました。したがって、クエリを実行する必要のある部分にはintまたはbigintsがあり、これらのフィールドにはインデックスが付けられており、クエリをより高速に実行できます。