Một bảng nhật ký nên có một trường id hoặc khóa chính?


12

Tôi có một bảng nhật ký ghi lại dấu thời gian khi các tệp nhất định được xuất sang hệ thống khác.

Bảng exportLog hiện có ba trường:

id                (primary key)
messageId         (int)
exportedDateTime  (datetime)

Xem lại điều này tôi thấy rằng idlĩnh vực này không phục vụ mục đích nào, vì không có sự tham gia nào vào bảng này. Điều duy nhất làm việc trên bảng này là chèn công việc hàng loạt xử lý các thông báo và chèn vào bảng nhật ký này.

Tôi có nên loại bỏ các idlĩnh vực?

Tôi có nên có một khóa chính trên một trong hai messageIdhoặc exportedDateTimehay cả hai?


2
DBMS này dùng để làm gì?
ypercubeᵀᴹ

Câu trả lời:


10

Tôi có nên xóa trường id không?

Tôi khuyên bạn nên giữ nó.

Bạn có thể không cần trường ngay bây giờ , nhưng trong tương lai, nó thực sự có thể giúp bạn ra ngoài - nếu bạn cần lưu trữ chi tiết của các tệp cho mỗi mục nhập nhật ký thì sao?

Tôi không biết bảng này sẽ lớn đến mức nào và nhanh như thế nào, nhưng thêm một cột vào một bảng lớn thường là một hoạt động tốn kém. Nếu bảng tương đối nhỏ, thì đó không phải là vấn đề lớn để giữ về không gian lưu trữ. IMO, giữ cột và lưu đau đầu tiềm năng sau này.

Tôi nên có một khóa chính trên messageId hoặc exportDateTime hoặc cả hai?

Có vẻ như messageIdmột mình nó sẽ là duy nhất trong bảng này (mặc dù tôi có thể sai) và việc tạo ra tính duy nhất trên cột ngày / giờ có thể có khả năng tạo ra các bản sao (và do đó có lỗi). Tùy chọn duy nhất còn lại là khóa 2 cột, không đặc biệt hấp dẫn với kịch bản tôi đặt ra ở trên.


Về cơ bản, quan điểm của tôi về câu trả lời này là việc giữ cột không phải là vấn đề lớn (tôi giả định), nhưng cần nó sau này có thể là một vấn đề lớn và / hoặc yêu cầu thêm công việc để đưa nó trở lại.


6
  • Nếu bạn không tham gia trên bảng này, không có cập nhật và không xóa, thì bạn hoàn toàn không cần khóa.

  • Nếu đây không phải là trường hợp và messageIdlà duy nhất, thì bạn có thể biến nó thành khóa chính.

  • Nếu nó không phải là duy nhất, nhưng (messageId, exportedDateTime), thì hãy biến nó thành một khóa chính tổng hợp.

  • Nếu thậm chí sự (messageId, exportedDateTime)kết hợp có thể cung cấp các bản sao cập nhật và xóa có thể cần thiết (nói để loại bỏ các hàng vô tình được chèn), tốt hơn hết bạn nên rời khỏi idtrường.


0

Khóa chính sẽ không bị tổn thương ... nếu bạn xem xét mục đích của đường dẫn đăng nhập / kiểm toán, có thể nó sẽ được sử dụng (truy vấn) trong tương lai để giải quyết vấn đề hoặc khôi phục dữ liệu, v.v. và có thể sẽ được kết nối với người khác các bảng không đăng nhập / kiểm toán hiện có để thực hiện loại công việc đó.

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.