1. Lưu trữ dữ liệu dạng json trong database
Trong khi phát triển phần mềm việc thay đổi thiết kế là điều thường xuyên xảy ra. Đặc biệt sẽ có những trường hợp mà cấu trúc database sẽ bị thay đổi.
Một trong những cách giúp tránh thay thay đổi cấu trúc database là sử dụng 1 column để lưu trữ dữ liệu dạng json. Tuy nhiên việc lưu trữ dữ liệu dạng json trong database cũng sẽ gây khó khi cần query lấy dữ liệu ra.
Thông thường sau khi lấy chuỗi json từ database ra chúng ta sẽ khôi phục lại dữ liệu từ chuỗi json này. Nhưng có 1 số trường hợp dữ liệu json quá lớn hoặc không cần thiết phải khôi phục tất cả mà chỉ cần lấy 1 phần trong chuỗi json.
Vì thế SQL Server cung cấp 1 số function để truy vấn dữ liệu trong json ngay khi query
2. JSON_VALUE trong SQL Server
Để dễ hiểu mình sẽ lấy 1 ví dụ như sau
Trong database có 1 table NhanVien dùng để lưu thông tin của các nhân viên. Các thông tin bao gồm id, tên, tuổi, lương, sở thích.
Trong column SoThich sẽ lưu tên sở thích và thông tin liên quan đến sở thích đó. Ví dụ nếu sở thích là bóng đá thì sẽ lưu thêm tên cầu thủ yêu thích.
Cấu trúc chuỗi json của nhân viên Nguyen Van A:
Cấu trúc chuỗi json của nhân viên Nguyen Van B:
Khi muốn tìm các nhân viên có sở thích bóng đá ta sẽ query như sau:
1 2 |
Select * from NhanVien Where JSON_VALUE(CAST(Nhanvien.Sothich AS nvarchar(MAX)), '$.bongda') IS NOT NULL |
Khi muốn tìm các nhân viên có sở thích bóng đá và đều hâm mộ messi ta sẽ dùng query như sau:
1 2 |
Select * from NhanVien WHERE JSON_VALUE(CAST(Nhanvien.Sothich AS nvarchar(MAX)), '$.bongda') = 'messi' |
3. Kết luận
Việc thiết kế database và lưu dữ liệu dang json như trên rất thuận tiện cho việc mở rộng thông tin cho sở thích của nhân viên.
Có thể có nhiều cách khác để xử lý vấn đề trên (ví dụ sử dụng bảng sở thích riêng và đặt quan hệ 1 nhiều với bảng nhân viên) tuy nhiên đối với mình mình vẫn thích phương pháp dùng json này.
Ngoài JSON_VALUE ra SQL Server còn có các hàm xử lý json khác như JSON_QUERY, JSON_MODIFY. Tham khảo thêm ở đây