Đây là một vấn đề phổ biến và không có giải pháp hoàn hảo. Một số giải pháp:
1. Xác định X trường kiểu varchar2, trường Y kiểu số và Z trường kiểu ngày tháng. Điều đó có khả năng gấp 3 lần số lượng trường tùy chỉnh nhưng bạn sẽ không bao giờ gặp bất kỳ vấn đề chuyển đổi nào nữa.
Ví dụ của bạn sẽ xuất hiện như sau:
Id Name field_char1 field2_char2 field_char3 ... field_num1 field_num2 ...
1 lap1 lappy lappy lappy ... 12 13
2 lap2 lappy2 lappy2 lapp2 ... 13 12
Trong ví dụ của bạn, bạn có cùng một số giá trị số và giá trị ký tự trên cả hai hàng nhưng nó không phải như vậy:ví dụ:hàng thứ ba có thể không có trường số.
2. Xác định các trường X thuộc loại varchar2 và có áp dụng hàm bijective để lưu trữ trường số hoặc ngày (ví dụ:Ngày có thể được lưu trữ dưới dạng YYYYMMDDHH24miss
). Bạn cũng sẽ cần một trường bổ sung sẽ xác định ngữ cảnh của hàng. Bạn sẽ áp dụng to_number
hoặc to_char
chỉ hoạt động khi các hàng thuộc loại tốt.
Ví dụ của bạn:
Id Name context field1 field2 field3 field4 field5
1 lap1 type A lappy lappy 12 13 lappy
2 lap2 type B lappy2 13 lappy2 lapp2 12
Bạn có thể truy vấn bảng bằng DECODE hoặc CASE:
SELECT *
FROM laptop
WHERE CASE WHEN context = 'TYPE A' THEN to_number(field3) END = 12
Thiết kế thứ hai là thiết kế được sử dụng trong Oracle Financials ERP (trong số những thiết kế khác). Ngữ cảnh cho phép bạn xác định ràng buộc KIỂM TRA với thiết kế này (ví dụ:CHECK (CASE WHEN context = 'TYPE A' THEN to_number(field3) > 0
) để đảm bảo tính toàn vẹn.