Những ưu tiên mang tính định hướng rõ ràng để viết các kịch bản di chuyển lược đồ cơ sở dữ liệu (database schema migrations) an toàn, không gây gián đoạn dịch vụ (zero-downtime).
# Di Chuyển Cơ Sở Dữ Liệu (Database Migrations) taste - Giữ mọi thay đổi lược đồ trong một tệp migration được quản lý phiên bản và commit ngay cạnh đoạn mã nguồn cần đến nó. Độ tin cậy: 0.95 - Viết các tệp migration bằng ngôn ngữ SQL thuần túy thay vì dùng các đoạn mã so sánh (diffs) do ORM tự sinh ra mà bạn chưa đọc kỹ. Độ tin cậy: 0.80 - Không bao giờ chỉnh sửa một tệp migration đã được chạy trên môi trường dùng chung; thay vào đó hãy thêm một tệp migration mới. Độ tin cậy: 0.95 - Sử dụng mô hình mở rộng và thu hẹp (expand and contract): thêm cột mới, điền bù dữ liệu cũ (backfill), chuyển luồng đọc sang cột mới, sau đó mới xóa cột cũ ở một bản phát hành sau. Độ tin cậy: 0.90 - Đảm bảo mọi tệp migration đều an toàn để chạy trong khi phiên bản ứng dụng trước đó vẫn đang phục vụ lưu lượng truy cập. Độ tin cậy: 0.90 - Thêm các cột mới ở dạng cho phép giá trị rỗng (nullable) hoặc có giá trị mặc định là hằng số để tránh việc phải ghi lại toàn bộ bảng kéo dài. Độ tin cậy: 0.85 - Tạo chỉ mục (index) trên các bảng Postgres lớn bằng lệnh CREATE INDEX CONCURRENTLY nằm ngoài giao dịch (transaction). Độ tin cậy: 0.90 - Thiết lập giá trị lock_timeout và statement_timeout ngắn ngay ở đầu mỗi tệp migration. Độ tin cậy: 0.85 - Chạy các tác vụ điền bù dữ liệu lớn (large backfills) dưới dạng các tiến trình chạy ngầm theo lô (batched background jobs), không chạy ngay bên trong tệp migration. Độ tin cậy: 0.90 - Chỉ giữ một thay đổi hợp lý duy nhất trong mỗi tệp migration để khi xảy ra lỗi sẽ dễ dàng đọc hiểu và chạy thử lại. Độ tin cậy: 0.80 - Đặt tên cho các tệp migration bằng tiền tố dấu thời gian UTC kèm theo một cụm động từ ngắn gọn như 20261017_add_orders_status. Độ tin cậy: 0.75 - Ưu tiên các tệp migration chỉ tiến về phía trước (forward-only) và sửa sai bằng một tệp migration mới thay vì phụ thuộc vào các kịch bản hoàn tác (down scripts). Độ tin cậy: 0.70 - Chạy các tệp migration như một bước triển khai (deploy) tách biệt trước khi mã ứng dụng mới bắt đầu khởi chạy. Độ tin cậy: 0.85 - Kiểm thử mọi tệp migration trong quy trình CI trên một cơ sở dữ liệu hoàn toàn mới và trên một bản sao dữ liệu có quy mô tương đương môi trường thực tế (production). Độ tin cậy: 0.80 - Thêm các khóa ngoại (foreign keys) và ràng buộc kiểm tra (check constraints) với tùy chọn NOT VALID trước, sau đó mới xác thực chúng ở một bước riêng biệt. Độ tin cậy: 0.80 - Chỉ đổi tên cột và bảng thông qua một khung nhìn (view) hoặc giai đoạn ghi kép (dual-write), không bao giờ đổi tên ngay trong một bước duy nhất. Độ tin cậy: 0.75 - Lưu trữ lịch sử các bản migration đã áp dụng trong cơ sở dữ liệu và cho dừng lỗi quá trình triển khai nếu phát hiện sai lệch (drift). Độ tin cậy: 0.85 - Duyệt (review) các tệp migration cẩn thận như duyệt mã nguồn ứng dụng, với câu lệnh SQL được tạo ra hiển thị rõ ràng trong pull request. Độ tin cậy: 0.90 - Tách biệt dữ liệu khởi tạo (seed) và dữ liệu mẫu kiểm thử (fixture) ra khỏi các tệp migration lược đồ. Độ tin cậy: 0.80
Đánh giá các bảng PostgreSQL và MySQL (tệp schema.sql, bản dump hoặc lệnh CREATE TABLE trong pull request) để tìm ra các lỗi thiết kế có thể sửa dễ dàng và ít tốn kém trước khi có dữ liệu thực tế - thiếu khóa chính, lưu tiền tệ bằng cột số thực (float), khóa ngoại lệch kiểu dữ liệu hoặc thiếu chỉ mục (index), ID 32-bit, dấu thời gian (timestamp) không kèm múi giờ, các cờ (flags) cho phép NULL, trạng thái dạng văn bản tự do, đặt tên trùng từ khóa dành riêng và email duy nhất (unique) nhưng phân biệt chữ hoa chữ thường. Trả về mã DDL đã được hiệu chỉnh. Bao gồm một công cụ linter viết bằng thư viện chuẩn Python có hỗ trợ cờ --self-test.
Đánh giá các bản di chuyển lược đồ (schema migrations) của PostgreSQL và MySQL (SQL thuần hoặc do ORM tạo ra) để phát hiện tình trạng khóa bảng, ghi lại toàn bộ bảng, mất dữ liệu và các thay đổi gây lỗi tương thích, sau đó đề xuất cách viết lại an toàn không gây gián đoạn dịch vụ (zero-downtime) kèm theo phán quyết rõ ràng.
Đánh giá lược đồ (schema) và các truy vấn SQL chạy chậm, đề xuất các chỉ mục phức hợp (composite indexes) theo đúng thứ tự cột (so sánh bằng, sắp xếp, khoảng giá trị) kèm các cột bao phủ (covering columns) và sự đánh đổi hiệu năng, gắn cờ các bộ lọc không thể tận dụng chỉ mục (non-sargable) như dùng hàm trên cột hoặc LIKE có ký tự đại diện ở đầu, đồng thời cảnh báo về các chỉ mục trùng lặp, dư thừa và có độ chọn lọc thấp. Sử dụng khi người dùng chia sẻ một truy vấn chậm, kết quả EXPLAIN, hoặc schema và hỏi "tôi cần chỉ mục nào?" hoặc "có quá nhiều chỉ mục không?". Bao gồm công cụ hỗ trợ bằng thư viện chuẩn Python đã được kiểm thử.
Đánh giá các truy vấn SQL và kết quả EXPLAIN tùy chọn nhằm phát hiện các vấn đề hiệu năng phổ biến như SELECT *, dùng hàm hoặc ép kiểu (cast) trên các cột đã đánh chỉ mục, LIKE có ký tự đại diện (wildcard) ở đầu, vòng lặp truy vấn N+1, dùng OR giữa nhiều cột so với UNION ALL, lỗi thứ tự ưu tiên AND/OR, truy vấn con NOT IN, phân trang OFFSET sâu, quét tuần tự (seq scan) và sắp xếp trên ổ đĩa (disk sort). Giải thích từng vấn đề và cung cấp câu truy vấn viết lại. Đi kèm công cụ kiểm tra bằng thư viện chuẩn Python có hỗ trợ --self-test.