Cấu trúc dữ liệu tốt để lưu trữ số điện thoại trong các trường cơ sở dữ liệu là gì? Tôi đang tìm thứ gì đó đủ linh hoạt để xử lý các số quốc tế và cũng là thứ cho phép các phần khác nhau của số được truy vấn một cách hiệu quả.
Chỉnh sửa: Chỉ để làm rõ trường hợp sử dụng ở đây: Tôi hiện lưu trữ các số trong một trường varchar duy nhất và tôi để chúng ngay khi khách hàng nhập chúng. Sau đó, khi cần mã số, tôi sẽ chuẩn hóa nó. Vấn đề là nếu tôi muốn truy vấn vài triệu hàng để tìm số điện thoại phù hợp, nó liên quan đến một hàm, như
where dbo.f_normalizenum(num1) = dbo.f_normalizenum(num2)
mà không hiệu quả kinh khủng. Ngoài ra, các truy vấn đang tìm kiếm những thứ như mã vùng trở nên cực kỳ phức tạp khi nó chỉ là một trường varchar duy nhất.
[Biên tập]
Mọi người đã đưa ra rất nhiều đề xuất tốt ở đây, cảm ơn! Như một bản cập nhật, đây là những gì tôi đang làm bây giờ: Tôi vẫn lưu trữ các số chính xác như chúng đã được nhập, trong trường varchar, nhưng thay vì chuẩn hóa mọi thứ tại thời điểm truy vấn, tôi có một trình kích hoạt thực hiện tất cả những gì hoạt động khi các bản ghi được chèn vào hoặc cập nhật. Vì vậy, tôi có int hoặc bigint cho bất kỳ phần nào tôi cần truy vấn và những trường đó được lập chỉ mục để làm cho truy vấn chạy nhanh hơn.