Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có nên sử dụng id hoặc dấu thời gian để xác định thứ tự tạo của các hàng trong bảng cơ sở dữ liệu không? (có khả năng đặt đồng hồ hệ thống không chính xác)

Sử dụng id tuần tự sẽ đơn giản hơn vì nó có thể là (?) là khóa chính và do đó được lập chỉ mục và truy cập nhanh hơn. Cho rằng bạn có user_id , bạn có thể nhanh chóng xác nhận các chỉnh sửa cuối cùng và trước đó.

Sử dụng timestamp cũng có thể áp dụng, nhưng nó có thể là một mục nhập dài hơn và chúng tôi không biết liệu nó có được lập chỉ mục hay không, cộng với khả năng xảy ra va chạm. Bạn chỉ ra đúng rằng đồng hồ hệ thống có thể thay đổi ... Trong khi id tuần tự không thể.

Đã cung cấp bản cập nhật của bạn:

Vì rất khó để biết các yêu cầu chính xác của bạn là gì, tôi đã bao gồm điều này làm bằng chứng về những gì một dự án cụ thể yêu cầu đối với 200K + tài liệu phức tạp và hàng triệu bản sửa đổi.

Từ kinh nghiệm của riêng tôi (xây dựng hệ thống tài liệu / hồ sơ có thể kiểm tra đầy đủ) cho một nhóm nội bộ gồm hơn 60 nhà nghiên cứu toàn thời gian. Chúng tôi đã kết thúc bằng cả id và một số trường khác (bao gồm timestamp ) để cung cấp khả năng kiểm tra theo dõi và lập phiên bản đầy đủ.

Hệ thống mà chúng tôi đã xây dựng có hơn 200 trường cho mỗi hồ sơ và do đó việc tạo phiên bản cho một tài liệu phức tạp hơn nhiều so với việc chỉ lưu trữ một khối văn bản / nội dung đã thay đổi cho mỗi trường; Tuy nhiên, mỗi hồ sơ có thể được, chỉnh sửa, phê duyệt, từ chối, cuộn lại, xuất bản và thậm chí xuất dưới dạng PDF hoặc định dạng khác dưới dạng MỘT tài liệu.

Cuối cùng, những gì chúng tôi đã làm (sau rất nhiều chiến lược / lập kế hoạch) là lưu trữ các phiên bản tuần tự của hồ sơ, nhưng chúng được khóa chủ yếu trên một id lĩnh vực .

Dấu thời gian

Dấu thời gian cũng được ghi lại dưới dạng kiểm tra thứ cấp và chúng tôi đảm bảo giữ cho đồng hồ hệ thống chính xác (trong số một cụm máy chủ) thông qua việc sử dụng các tập lệnh cron để kiểm tra căn chỉnh thời gian thường xuyên và sửa chúng khi cần thiết. Chúng tôi cũng đã sử dụng Ntpd để tránh bị trôi đồng hồ.

Dữ liệu đã thu thập khác

Dữ liệu khác được thu thập cho mỗi lần chỉnh sửa cũng được bao gồm (nhưng không giới hạn):

User_id
User_group
Action
Approval_id

Ngoài ra còn có các bảng khác đáp ứng các yêu cầu nội bộ (bao gồm cả chú thích được tạo tự động cho tài liệu) - vì một số chỉnh sửa hồ sơ được thực hiện bằng cách sử dụng dữ liệu từ bot (được xây dựng bằng NER / machine learning / AI), nhưng yêu cầu phê duyệt bởi một trong các nhóm trước khi các chỉnh sửa / cập nhật có thể được xuất bản.

Một nhật ký hành động cũng được lưu giữ tất cả các hành động của người dùng, để trong trường hợp kiểm tra, người ta có thể xem xét các hành động của một người dùng cá nhân - ngay cả khi họ không có quyền thực hiện hành động đó, nó vẫn được ghi lại. .

Về vấn đề di chuyển, tôi không thấy đó là một vấn đề lớn, vì bạn có thể dễ dàng bảo toàn các chuỗi id trong việc di chuyển / kết xuất / chuyển dữ liệu. Có lẽ vấn đề duy nhất là nếu bạn cần hợp nhất các tập dữ liệu. Bạn luôn có thể viết một kịch bản di chuyển trong sự kiện đó - vì vậy từ góc độ cá nhân, tôi cho rằng nhược điểm đó đã giảm bớt phần nào.

Có thể đáng xem xét các cấu trúc bảng Stack Overflow để có trình khám phá dữ liệu (khá phức tạp). Bạn có thể xem cấu trúc bảng tại đây: https://data.stackexchange.com/stackoverflow/query / mới , xuất phát từ một câu hỏi trên meta: SO lưu trữ như thế nào sửa đổi?

Là một hệ thống sửa đổi, SO hoạt động tốt và chức năng đánh dấu / sửa đổi có lẽ là một ví dụ điển hình để lựa chọn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. FIND_IN_SET với hai chuỗi

  2. Mysql:thêm khóa ngoại không đưa ra cảnh báo / lỗi trên bảng MyISAM

  3. Đọc phụ, đọc-ghi thiết lập chính

  4. Lỗi Laravel PDOException trong Connector.php dòng 55

  5. cách nhập tệp excel (XLSX) vào mysql bằng cách sử dụng nodejs