Những điều giá như tôi đã biết về Postgres
- Khối lượng tài liệu đồ sộ của Postgres: Tài liệu chính thức của Postgres rất xuất sắc, nhưng quá đồ sộ nên kỹ sư mới vào nghề khó có thể đọc từ đầu đến cuối.
Chuẩn hóa dữ liệu
- Chuẩn hóa dữ liệu: Đây là quá trình loại bỏ dữ liệu trùng lặp trong schema cơ sở dữ liệu. Ví dụ, thay vì đặt cột
user_email trong bảng documents, nên liên kết tới bảng users bằng khóa ngoại.
- Sự cần thiết của phi chuẩn hóa: Đôi khi phi chuẩn hóa là cần thiết để đọc một số dữ liệu nhanh hơn. Tuy nhiên, dữ liệu phi chuẩn hóa đi kèm chi phí là dễ gây không nhất quán dữ liệu hoặc làm tăng độ phức tạp khi ghi.
Làm theo lời khuyên của những người tạo ra Postgres
- "Những điều không nên làm" trên Postgres Wiki: Wiki chính thức của Postgres có danh sách "những điều không nên làm". Dù chưa hiểu hết, bạn vẫn có thể tránh được sai lầm.
- Khuyến nghị: Dùng kiểu
text để lưu mọi văn bản, dùng timestampz/time with time zone để lưu mọi dấu thời gian, và đặt tên bảng theo snake_case.
Những điểm kỳ lạ phổ biến của SQL
- SQL không phân biệt chữ hoa chữ thường: Từ khóa SQL không phân biệt chữ hoa chữ thường. Điều này không chỉ riêng Postgres.
- Tính chất đặc biệt của NULL:
NULL trong SQL có nghĩa là "không biết", và khi kết hợp với hầu hết toán tử thì kết quả cũng là NULL. Có thể so sánh NULL bằng các toán tử như IS NULL, IS NOT NULL.
Làm cho psql hữu ích hơn
- Cải thiện khả năng đọc đầu ra: Có thể cấu hình terminal pager để dễ xem các đầu ra dài. Có thể đặt
less làm pager.
- Làm rõ NULL dễ gây mơ hồ: Trong
psql, có thể đặt chuỗi đại diện cho NULL để hiển thị rõ ràng hơn trong đầu ra.
- Sử dụng tự động hoàn thành:
psql hỗ trợ tự động hoàn thành, giúp nhập từ khóa SQL hoặc tên bảng dễ hơn.
Tác dụng của việc thêm chỉ mục
- Định nghĩa chỉ mục: Chỉ mục là cấu trúc dữ liệu giúp truy vấn dữ liệu nhanh hơn.
- Giới hạn của chỉ mục: Nếu cơ sở dữ liệu cục bộ gần như không có dòng nào thì chỉ mục có thể không hữu ích. Khi lập chỉ mục trên nhiều cột, thứ tự rất quan trọng.
Cách sử dụng JSONB
- Ưu và nhược điểm của JSONB: Postgres cung cấp khả năng lưu trữ và truy vấn JSON hiệu quả, nhưng nếu dùng sai có thể làm giảm hiệu năng.
- Giới hạn về cấu trúc của JSONB: Cột JSONB không đảm bảo cấu trúc, nên không tự mô tả rõ ràng như schema bảng tiêu chuẩn.
Các mẹo hữu ích khác
- Vấn đề của transaction dài: Nếu transaction kéo dài quá lâu, nó có thể cản trở các client khác truy cập cơ sở dữ liệu.
- Những tính năng mạnh mẽ của Postgres: Postgres mang lại các thế mạnh của cơ sở dữ liệu hướng tài liệu và cho phép lưu trữ, truy vấn dữ liệu hiệu quả thông qua JSONB.
2 bình luận
Những điều không nên làm, chắc phải đọc thử một lần vào lúc nào đó.
Ý kiến trên Hacker News
Postgres phân biệt chữ hoa chữ thường, nhưng việc viết từ khóa bằng chữ in hoa trong truy vấn là để tăng khả năng đọc. Đây không phải yêu cầu bắt buộc, nhưng việc định dạng truy vấn để dễ nhìn hơn khi debug rất hữu ích
actuallyUsingCaseInIdentifiersĐây là lần đầu tiên biết đến mục wiki "Don't Do This", và nó rất hữu ích
Phần lớn nội dung không chỉ áp dụng riêng cho Postgres (ví dụ: sự kỳ quặc của
null, thứ tự cột trong chỉ mục)nulltương tác với chỉ mục và ràng buộc duy nhất cũng không hề trực quan trong MySQLnullvà cột tên người dùng cho phépnull, nếu có ràng buộc duy nhất như(email, username)thì vẫn có thể chèn nhiều lần cùng một email với tên người dùng lànullCần thận trọng với lời khuyên rằng phải chuẩn hóa dữ liệu
Mong các lập trình viên quan tâm nhiều hơn đến việc chuẩn hóa và ngừng nhét mọi thứ vào cột JSON(b)
Từ "hành trình" bị dùng quá mức nên đọc trong blog thấy khá khó chịu
Phần mã trên di động rất bất tiện, gần như không thể cuộn được
Trong đặc tả JSON,
nulllà một giá trị hằng, khác vớiNULLtrong SQLThêm chỉ mục cũng có thể hoàn toàn không mang lại tác dụng gì
Đọc những bài như thế này và hiểu được 90% khiến người viết cảm thấy tự hào về công việc mình từng đảm nhiệm