Cộng đồng PostgreSQL đang tích cực thảo luận về một bộ các phương pháp toàn diện về cơ sở dữ liệu, nhấn mạnh việc những hướng dẫn đừng làm điều này tưởng chừng nghiêm ngặt thường có những ngoại lệ và sắc thái quan trọng. Cuộc thảo luận này bắt nguồn từ một tài liệu chi tiết trên PostgreSQL.org đã làm dấy lên những cuộc tranh luận thú vị về các kịch bản triển khai thực tế.
Bản chất của Hướng dẫn Cơ sở dữ liệu
Những gì ban đầu xuất hiện như một danh sách các điều cấm nghiêm ngặt đã phát triển thành một cuộc thảo luận sâu sắc hơn về việc ra quyết định theo ngữ cảnh trong thiết kế cơ sở dữ liệu. Như một thành viên cộng đồng đã nhận xét chính xác:
Hầu hết các điểm ở đây là đừng làm điều này, nhưng nếu bạn làm thì cũng không phải vấn đề. Nên đổi tên thành Hãy cẩn thận về điều này
Tranh cãi về Xử lý Timestamp
Cộng đồng đặc biệt quan tâm đến các khuyến nghị về xử lý timestamp. Trong khi tài liệu chính thức mạnh mẽ ủng hộ việc sử dụng timestamptz thay vì timestamp không có múi giờ, các chuyên gia đã chỉ ra những trường hợp sử dụng thực tế cho cả hai phương pháp. Một số nhà phát triển đề xuất việc áp dụng UTC nội bộ trong khi chuyển đổi sang múi giờ địa phương để hiển thị có thể là một chiến lược hợp lý, đặc biệt trong các hệ thống đặt chỗ, nơi múi giờ được ghi lại không thực sự quan trọng.
Các Thực Hành Gây Tranh Cãi Chính:
- Xử lý mốc thời gian: timestamptz so với timestamp không có múi giờ
- Lựa chọn kiểu dữ liệu: char(n), serial, money
- Phương thức xác thực: trust so với các loại xác thực khác
- Lưu trữ văn bản: varchar(n) so với text
Tranh luận về Lựa chọn Kiểu dữ liệu
Các khuyến nghị không nên sử dụng một số kiểu dữ liệu như char(n) và serial đã tạo ra nhiều cuộc thảo luận đáng kể. Một số nhà phát triển thách thức những hướng dẫn này, chỉ ra các trường hợp cụ thể mà những kiểu này có thể phù hợp. Ví dụ, trong khi tài liệu khuyên không nên dùng char(n), các thành viên cộng đồng đã xác định những tình huống mà char(1) có thể là lựa chọn hợp lý cho các trường 1-byte rất nhỏ gọn, mặc dù điều này cũng đã gây ra tranh luận về giải pháp lưu trữ ở cấp độ byte phù hợp.
Công cụ được cộng đồng khuyến nghị:
- schemalint : Gói NPM dùng để kiểm tra sự tuân thủ schema
- Có sẵn tại: https://www.npmjs.com/package/schemalint
Nhấn mạnh về Bảo mật Xác thực
Cộng đồng mạnh mẽ ủng hộ quan điểm của tài liệu về bảo mật xác thực, đặc biệt là những cảnh báo về việc sử dụng xác thực trust qua kết nối TCP/IP. Đây là một trong số ít các lĩnh vực mà chỉ thị đừng làm điều này nhận được sự đồng thuận gần như tuyệt đối, đặc biệt là đối với môi trường sản xuất.
Hỗ trợ Công cụ và Triển khai
Việc triển khai thực tế các hướng dẫn này đã được hỗ trợ bởi các công cụ do cộng đồng phát triển. Các nhà phát triển đã chỉ ra các công cụ linting có thể tự động kiểm tra lược đồ cơ sở dữ liệu cho những vấn đề tiềm ẩn này, giúp việc thực thi các phương pháp tốt nhất một cách có hệ thống dễ dàng hơn.
Cuộc thảo luận nhấn mạnh cách các phương pháp tốt nhất của PostgreSQL tiếp tục phát triển cùng với các mô hình sử dụng trong thực tế, nhấn mạnh tầm quan trọng của việc hiểu lý do đằng sau mỗi khuyến nghị thay vì tuân theo một cách mù quáng.
Nguồn tham khảo: Don't Do This