Bạn đang nghĩ đến thiết kế cơ sở dữ liệu để ghi nhật ký kiểm tra? Hãy nhớ lại những gì đã xảy ra với Hansel và Gretel:họ nghĩ rằng để lại một dấu vết vụn bánh mì đơn giản là một cách tốt để theo dõi các bước của họ.
Khi chúng tôi thiết kế mô hình dữ liệu, chúng tôi được đào tạo để áp dụng triết lý rằng bây giờ là tất cả những gì tồn tại . Ví dụ:nếu chúng ta thiết kế một lược đồ để lưu trữ giá cho một danh mục sản phẩm, chúng ta có thể nghĩ rằng cơ sở dữ liệu chỉ cần cho chúng ta biết giá của mỗi sản phẩm tại thời điểm hiện tại. Nhưng nếu chúng tôi muốn biết liệu giá có được sửa đổi hay không và nếu có thì những sửa đổi đó xảy ra khi nào và như thế nào, chúng tôi sẽ gặp rắc rối. Tất nhiên, chúng tôi có thể thiết kế cơ sở dữ liệu đặc biệt để lưu giữ hồ sơ theo thứ tự thời gian về các thay đổi - thường được gọi là dấu vết kiểm tra hoặc nhật ký kiểm tra.
Ghi nhật ký kiểm tra cho phép cơ sở dữ liệu có "bộ nhớ" về các sự kiện trong quá khứ. Tiếp tục với ví dụ về bảng giá, nhật ký kiểm tra thích hợp sẽ cho phép cơ sở dữ liệu cho chúng tôi biết chính xác thời điểm giá được cập nhật, giá trước khi được cập nhật, ai đã cập nhật và từ đâu.
Giải pháp ghi nhật ký kiểm tra cơ sở dữ liệu
Sẽ thật tuyệt nếu cơ sở dữ liệu có thể lưu giữ một bản chụp nhanh về trạng thái của nó cho mọi thay đổi xảy ra trong dữ liệu của nó. Bằng cách này, bạn có thể quay lại bất kỳ thời điểm nào và xem dữ liệu tại thời điểm chính xác đó như thế nào giống như thể bạn đang tua lại một bộ phim. Nhưng cách tạo nhật ký kiểm toán đó rõ ràng là không thể; khối lượng thông tin kết quả và thời gian cần thiết để tạo nhật ký sẽ quá cao.
Các chiến lược ghi nhật ký kiểm tra chỉ dựa trên việc tạo các đường dẫn kiểm tra cho những dữ liệu có thể bị xóa hoặc sửa đổi. Bất kỳ thay đổi nào trong chúng đều phải được kiểm tra để khôi phục các thay đổi, truy vấn dữ liệu trong bảng lịch sử hoặc theo dõi hoạt động đáng ngờ.
Có một số kỹ thuật ghi nhật ký kiểm toán phổ biến, nhưng không có kỹ thuật nào phục vụ cho mọi mục đích. Những thứ hiệu quả nhất thường đắt tiền, sử dụng nhiều tài nguyên hoặc làm giảm hiệu suất. Những người khác rẻ hơn về mặt tài nguyên nhưng không hoàn thiện, khó bảo trì hoặc đòi hỏi sự hy sinh về chất lượng thiết kế. Bạn chọn chiến lược nào sẽ tùy thuộc vào các yêu cầu ứng dụng và giới hạn hiệu suất, tài nguyên và nguyên tắc thiết kế mà bạn cần tôn trọng.
Các giải pháp ghi nhật ký ngoài hộp
Các giải pháp ghi nhật ký kiểm tra này hoạt động bằng cách chặn tất cả các lệnh được gửi đến cơ sở dữ liệu và tạo nhật ký thay đổi trong một kho lưu trữ riêng biệt. Các chương trình như vậy cung cấp nhiều tùy chọn cấu hình và báo cáo để theo dõi hành động của người dùng. Họ có thể ghi nhật ký tất cả các hành động và truy vấn được gửi đến cơ sở dữ liệu, ngay cả khi chúng đến từ những người dùng có đặc quyền cao nhất. Các công cụ này được tối ưu hóa để giảm thiểu tác động đến hiệu suất, nhưng điều này thường phải trả giá bằng tiền.
Giá của các giải pháp theo dõi kiểm tra chuyên dụng có thể hợp lý nếu bạn đang xử lý thông tin có độ nhạy cảm cao (chẳng hạn như hồ sơ y tế) trong đó bất kỳ thay đổi nào của dữ liệu phải được theo dõi và kiểm tra một cách hoàn hảo và theo dõi kiểm tra phải không thay đổi được. Nhưng khi các yêu cầu về đường mòn kiểm tra không nghiêm ngặt như vậy, chi phí cho một giải pháp ghi nhật ký chuyên dụng có thể quá cao.
Các công cụ giám sát gốc được cung cấp bởi hệ thống cơ sở dữ liệu quan hệ (RDBMS) cũng có thể được sử dụng để tạo ra các đường kiểm tra. Các tùy chọn tùy chỉnh cho phép lọc những sự kiện nào được ghi lại, để không tạo ra thông tin không cần thiết hoặc làm quá tải công cụ cơ sở dữ liệu với các hoạt động ghi nhật ký sẽ không được sử dụng sau này. Các bản ghi được tạo theo cách này cho phép theo dõi chi tiết các hoạt động được thực hiện trên các bảng. Tuy nhiên, chúng không hữu ích cho việc truy vấn các bảng lịch sử, vì chúng chỉ ghi lại các sự kiện.
Tùy chọn kinh tế nhất để duy trì lộ trình đánh giá là thiết kế riêng cơ sở dữ liệu của bạn để ghi nhật ký đánh giá. Kỹ thuật này dựa trên các bảng nhật ký được điền bởi các trình kích hoạt hoặc cơ chế dành riêng cho ứng dụng cập nhật cơ sở dữ liệu. Không có cách tiếp cận được chấp nhận rộng rãi để thiết kế cơ sở dữ liệu ghi nhật ký kiểm toán, nhưng có một số chiến lược thường được sử dụng, mỗi chiến lược đều có ưu và nhược điểm.
Kỹ thuật thiết kế ghi nhật ký kiểm tra cơ sở dữ liệu
Tạo phiên bản hàng để ghi nhật ký kiểm tra tại chỗ
Một cách để duy trì dấu vết kiểm tra cho một bảng là thêm một trường cho biết số phiên bản của mỗi bản ghi. Phần chèn vào bảng được lưu với số phiên bản ban đầu. Bất kỳ sửa đổi hoặc xóa thực sự trở thành hoạt động chèn, trong đó các bản ghi mới được tạo với dữ liệu cập nhật và số phiên bản được tăng lên một. Bạn có thể xem một ví dụ về thiết kế đăng nhập tại chỗ kiểm tra này bên dưới:
Lưu ý:Không thể liên kết các thiết kế bảng với lập phiên bản hàng được nhúng bằng các mối quan hệ khóa ngoài.
Ngoài số phiên bản, một số trường bổ sung sẽ được thêm vào bảng để xác định nguồn gốc và nguyên nhân của mỗi thay đổi được thực hiện đối với bản ghi:
- Ngày / giờ ghi lại thay đổi.
- Người dùng và ứng dụng.
- Hành động được thực hiện (chèn, cập nhật, xóa), v.v. Để quá trình đánh giá có hiệu quả, bảng chỉ được hỗ trợ các thao tác chèn (không được phép cập nhật và xóa). Bảng cũng nhất thiết phải yêu cầu khóa chính thay thế, vì bất kỳ tổ hợp trường nào khác sẽ phải lặp lại.
Để truy cập dữ liệu bảng đã cập nhật thông qua các truy vấn, bạn phải tạo một dạng xem chỉ trả về phiên bản mới nhất của mỗi bản ghi. Sau đó, bạn phải thay thế tên của bảng bằng tên của chế độ xem trong tất cả các truy vấn ngoại trừ những truy vấn nhằm mục đích cụ thể để xem trình tự thời gian của bản ghi.
Ưu điểm của tùy chọn lập phiên bản này là nó không yêu cầu sử dụng các bảng bổ sung để tạo đường dẫn kiểm tra. Thêm vào đó, chỉ một số trường được thêm vào các bảng đã được kiểm toán. Nhưng nó có một nhược điểm rất lớn:nó sẽ buộc bạn mắc phải một số lỗi thiết kế cơ sở dữ liệu phổ biến nhất. Chúng bao gồm việc không sử dụng tính toàn vẹn tham chiếu hoặc khóa chính tự nhiên khi cần thiết, khiến việc áp dụng các nguyên tắc cơ bản của thiết kế sơ đồ mối quan hệ-thực thể là không thể. Bạn có thể truy cập các tài nguyên hữu ích này về các lỗi thiết kế cơ sở dữ liệu, vì vậy bạn sẽ được cảnh báo về những phương pháp khác nên tránh.
Bảng bóng
Một tùy chọn đường mòn đánh giá khác là tạo một bảng ẩn cho mỗi bảng cần được đánh giá. Các bảng bóng có chứa các trường giống như các bảng mà chúng kiểm tra, cộng với các trường kiểm tra cụ thể (các trường tương tự được đề cập cho kỹ thuật lập phiên bản hàng).
Bảng bóng sao chép các trường giống như bảng mà chúng kiểm tra, cộng với các trường cụ thể cho mục đích kiểm tra.
Để tạo các đường kiểm tra trong bảng bóng, tùy chọn an toàn nhất là tạo trình kích hoạt chèn, cập nhật và xóa, đối với mỗi bản ghi bị ảnh hưởng trong bảng gốc sẽ tạo một bản ghi trong bảng kiểm tra. Trình kích hoạt phải có quyền truy cập vào tất cả thông tin kiểm tra mà bạn cần ghi lại trong bảng ẩn. Bạn sẽ phải sử dụng chức năng cụ thể của công cụ cơ sở dữ liệu để lấy dữ liệu như ngày và giờ hiện tại, người dùng đã đăng nhập, tên ứng dụng và vị trí (địa chỉ mạng hoặc tên máy tính) nơi bắt đầu hoạt động.
Nếu sử dụng trình kích hoạt không phải là một tùy chọn, thì logic để tạo các đường kiểm tra phải là một phần của ngăn xếp ứng dụng, trong một lớp có vị trí lý tưởng ngay trước lớp duy trì dữ liệu, để nó có thể chặn tất cả các hoạt động hướng tới cơ sở dữ liệu.
Loại bảng nhật ký này chỉ nên cho phép chèn bản ghi; nếu họ cho phép sửa đổi hoặc xóa, dấu vết kiểm tra sẽ không còn thực hiện chức năng của nó. Các bảng cũng phải sử dụng khóa chính thay thế, vì không thể áp dụng các mối quan hệ và phụ thuộc của bảng gốc.
Nếu bảng mà bạn đã tạo đường dẫn kiểm tra có các bảng phụ thuộc vào bảng đó, thì các bảng này cũng phải có các bảng bóng tương ứng. Điều này để đường dẫn kiểm tra không bị bỏ sót nếu các thay đổi được thực hiện đối với các bảng khác.
Bảng bóng tối thuận tiện vì tính đơn giản của chúng và vì chúng không ảnh hưởng đến tính toàn vẹn của mô hình dữ liệu; các dấu vết kiểm tra vẫn nằm trong các bảng riêng biệt và dễ truy vấn. Hạn chế là sơ đồ không linh hoạt:bất kỳ thay đổi nào trong cấu trúc của bảng chính phải được phản ánh trong bảng bóng tương ứng, điều này gây khó khăn cho việc duy trì mô hình. Ngoài ra, nếu việc ghi nhật ký kiểm tra cần được áp dụng cho một số lượng lớn các bảng, thì số lượng bảng ẩn cũng sẽ nhiều, khiến việc bảo trì lược đồ càng khó hơn.
Các bảng chung để ghi nhật ký kiểm tra
Tùy chọn thứ ba là tạo các bảng chung cho nhật ký kiểm tra. Các bảng như vậy cho phép ghi nhật ký của bất kỳ bảng nào khác trong lược đồ. Chỉ cần hai bảng cho kỹ thuật này:
Bảng tiêu đề ghi lại:
- Ngày và giờ thay đổi.
- Tên của bảng.
- Khóa của hàng bị ảnh hưởng.
- Dữ liệu người dùng.
- Loại hoạt động được thực hiện.
Bảng chi tiết ghi:
- Tên của từng trường bị ảnh hưởng.
- (Các) giá trị trường trước khi sửa đổi.
- (Các) giá trị trường sau khi sửa đổi. (Bạn có thể bỏ qua điều này nếu cần, vì nó có thể đạt được bằng cách tham khảo hồ sơ sau đây trong quá trình đánh giá hoặc hồ sơ tương ứng trong bảng đã được đánh giá.)
Việc sử dụng các bảng nhật ký kiểm tra chung đặt ra giới hạn đối với các loại dữ liệu có thể được kiểm tra.
Lợi thế của chiến lược ghi nhật ký kiểm tra này là nó không yêu cầu bất kỳ bảng nào ngoài hai bảng được đề cập ở trên. Ngoài ra, các bản ghi chỉ được lưu trữ trong đó cho các trường bị ảnh hưởng bởi một hoạt động. Điều này có nghĩa là không cần sao chép toàn bộ hàng của bảng khi chỉ một trường được sửa đổi. Ngoài ra, kỹ thuật này cho phép bạn lưu giữ nhật ký bao nhiêu bảng tùy thích - mà không làm lộn xộn lược đồ với một số lượng lớn các bảng bổ sung.
Điểm bất lợi là các trường lưu trữ giá trị phải thuộc một loại duy nhất - và đủ rộng để lưu trữ ngay cả trường lớn nhất trong số các trường của bảng mà bạn muốn tạo nhật ký kiểm tra. Thông thường nhất là sử dụng các trường kiểu VARCHAR chấp nhận một số lượng lớn ký tự.
Ví dụ:nếu bạn cần tạo nhật ký kiểm tra cho một bảng có một trường VARCHAR gồm 8.000 ký tự, thì trường lưu trữ các giá trị trong bảng kiểm tra cũng phải có 8.000 ký tự. Điều này đúng ngay cả khi bạn chỉ lưu trữ một số nguyên trong trường đó. Mặt khác, nếu bảng của bạn có các trường kiểu dữ liệu phức tạp, chẳng hạn như hình ảnh, dữ liệu nhị phân, BLOB, v.v., bạn sẽ cần tuần tự hóa nội dung của chúng để chúng có thể được lưu trữ trong các trường VARCHAR của bảng nhật ký.
Chọn thiết kế nhật ký kiểm tra cơ sở dữ liệu của bạn một cách khôn ngoan
Chúng tôi đã thấy một số lựa chọn thay thế để tạo nhật ký kiểm tra, nhưng không có lựa chọn nào trong số đó thực sự tối ưu. Bạn phải áp dụng chiến lược ghi nhật ký không ảnh hưởng đáng kể đến hiệu suất của cơ sở dữ liệu, không làm cho nó phát triển quá mức và có thể đáp ứng các yêu cầu truy xuất nguồn gốc của bạn. Nếu bạn chỉ muốn lưu trữ nhật ký cho một vài bảng, bảng bóng có thể là lựa chọn thuận tiện nhất. Nếu bạn muốn ghi nhật ký bất kỳ bảng nào một cách linh hoạt, thì các bảng ghi nhật ký chung có thể là tốt nhất.
Bạn đã phát hiện ra một cách khác để giữ nhật ký kiểm tra cho cơ sở dữ liệu của mình chưa? Hãy chia sẻ nó trong phần bình luận bên dưới - những nhà thiết kế cơ sở dữ liệu đồng nghiệp của bạn sẽ rất biết ơn!