Cách tốt nhất để thiết kế cơ sở dữ liệu và bảng để lưu giữ hồ sơ thay đổi?


15

Tôi cần thiết lập một tính năng lịch sử trên một dự án để theo dõi các thay đổi trước đó.

Hãy nói rằng tôi có hai bảng ngay bây giờ:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

Thí dụ: Tôi có một hàng trong ghi chú và người dùng muốn thay đổi tin nhắn. Tôi muốn theo dõi trạng thái của nó trước khi thay đổi và sau khi thay đổi.

Điều gì sẽ là cách tiếp cận tốt nhất để thiết lập một cột trong mỗi bảng này sẽ cho biết nếu một mục "cũ". 0 nếu hoạt động HOẶC 1 nếu bị xóa / ẩn.

Tôi cũng muốn tạo một AUDIT TRAILbảng lịch sử ( ) chứa idtrạng thái trước, idtrạng thái mới, bảng này có liên quan đến bảng nào?


Câu trả lời:


5

Vui lòng xem

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

Đây là một cách đọc rất tốt về các phương pháp để tạo Audit Trail trong thiết kế cơ sở dữ liệu của bạn. Đường mòn kiểm toán là cần thiết để thực hiện cơ sở dữ liệu. Bạn phải luôn có thể thấy hành động của người dùng cơ sở dữ liệu trong hệ thống.

Chúng tôi có thể theo dõi những hàng nào đã được thay đổi khi trong hệ thống PTA (Điểm trong thời gian) của chúng tôi bằng cách thêm một số cột PTA (điểm thời gian) tiêu chuẩn vào tất cả các bảng quan tâm PTA.

Tôi đề nghị như sau:

DateCreated  the actual date on which the given row was inserted.
DateEffective  the date on which the given row became effective.
DateEnd  the date on which the given row ceased to be effective.
DateReplaced  the date on which the given row was replaced by another row.
OperatorCode  the unique identifier of the person (or system) that created the row.

cách tốt nhất để áp dụng 'Giải pháp số 2: Bảng theo dõi dữ liệu chuyên dụng' cho ứng dụng OLTP.
AA.SC

Công ty tôi làm việc hiện đang sử dụng nhiều lược đồ, một lược đồ dành riêng cho đường mòn Kiểm toán. Bảng kiểm toán thực sự là một thiết kế khá đơn giản khi sử dụng Giải pháp số 2 (chính xác là những gì chúng tôi sử dụng ở đây trong công việc). Chia nhỏ các nhiệm vụ khác nhau (Bảng kiểm kê được cập nhật, Thông tin khách hàng được cập nhật hoặc xóa, Tín dụng được cung cấp cho khách hàng, v.v.) và xây dựng bảng kiểm toán dựa trên các hành động phổ biến mà người dùng có khả năng. Điều đó có trả lời câu hỏi của bạn liên quan đến việc áp dụng giải pháp 2 cho db của bạn không, nếu không vui lòng làm rõ. Cảm ơn!
Hector

Trên thực tế, chúng tôi đã kiểm tra dữ liệu bằng cách tiếp cận đầu tiên bằng Bảng kiểm toán, nhưng Dữ liệu kiểm toán đang trở nên rất lớn và bây giờ chúng tôi muốn chuyển đổi cách tiếp cận của mình bằng cách chỉ thu thập dữ liệu theo các cột đã thay đổi. Câu hỏi của tôi là làm thế nào tôi có thể đạt được phương pháp này? cách tốt nhất để theo dõi cột nào của bảng được thay đổi là gì? .. nếu một bảng có nhiều hơn 20 cột, một trong số chúng có Văn bản DataType.
AA.SC

9

Khi thiết kế các khả năng phiên bản trong dữ liệu của bạn, có một số yêu cầu tối thiểu (tôi nghĩ):

  • Mỗi phiên bản của dữ liệu phải được khép kín và độc lập với các phiên bản khác. Điều này có nghĩa là không có cờ hoặc chỉ báo nào khác cho biết phiên bản hiện tại và "lịch sử". Điều đó cũng có nghĩa là cập nhật thực thể có nghĩa là chỉ chèn một phiên bản mới - không cần cập nhật các phiên bản trước đó.
  • Tránh những gì tôi gọi là Phụ thuộc Spanning Row. Đó là nơi một trường (End_Date) của một hàng phải duy trì đồng bộ với một trường khác (Start_Date) của một hàng khác. Điều này làm cho việc làm việc với dữ liệu trở nên khó khăn hơn và là một nguồn bất thường tuyệt vời.
  • Phiên bản hiện tại và tất cả các phiên bản trước đây phải nằm trong cùng một bảng. Điều này cho phép sử dụng cùng một truy vấn để xem dữ liệu trong quá khứ "kể từ" một ngày cụ thể và để xem dữ liệu hiện tại.
  • Khóa ngoại đối với dữ liệu đã được phiên bản sẽ hoạt động giống như dữ liệu thông thường (không đảo ngược).
  • Thiết kế nên được hiểu đơn giản hoặc phổ biến đến mức đường cong học tập cho các nhà phát triển mới được giảm thiểu.

Dưới đây là các slide của một bài thuyết trình tôi đã thực hiện một vài lần tại các hội chợ công nghệ. Nó bao gồm làm thế nào tất cả các bên trên có thể được thực hiện. Và đây là một tài liệu đi sâu vào chi tiết hơn. Tôi phải đưa ra lời xin lỗi cho tài liệu - đây là một công việc đang được tiến hành và không phải tất cả các phần đều được hoàn thành. Nhưng nó sẽ cung cấp cho bạn tất cả các thông tin cần thiết để thực hiện bất cứ điều gì, từ phiên bản đơn giản đến truy cập hai chiều đầy đủ.


1
Điểm rất đẹp! Tuy nhiên, tôi hoàn toàn không hiểu điều này This means no flag or other indicator showing which is the current version and which are "history.", nếu không có cờ hoặc chỉ báo, làm thế nào để chúng tôi phân biệt phiên bản hiện tại với phiên bản lịch sử? Đặc biệt dựa trên điểm thứ ba của bạn mà bạn đề nghị họ nên ở trong cùng một bảng.
GMsoF

Bản trình bày cho thấy một thiết kế mẫu, bao gồm truy vấn để đọc dữ liệu hiện tại và / hoặc quá khứ từ các bảng. Nếu nó trông đủ thú vị để nhìn sâu hơn, tài liệu chứa nhiều chi tiết hơn.
TommCatt 27/03/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.