Tôi đang làm việc trên một thiết kế DB PostgreSQL và tôi tự hỏi làm thế nào tốt nhất để lưu trữ dấu thời gian.
Giả định
Người dùng trong các múi giờ khác nhau sẽ sử dụng cơ sở dữ liệu cho tất cả các chức năng CRUD.
Tôi đã xem xét 2 lựa chọn:
timestamp NOT NULL DEFAULT (now() AT TIME ZONE 'UTC')
bigint NOT NULL DEFAULT
Vì timestamp
tôi sẽ gửi một chuỗi đại diện cho dấu thời gian (UTC) chính xác cho thời điểm INSERT.
Vì bigint
tôi sẽ lưu trữ chính xác điều tương tự, nhưng ở định dạng số. (các vấn đề về múi giờ được xử lý trước khi millis được bàn giao cho máy chủ, vì vậy luôn có millis trong UTC.)
Một lợi thế chính của việc lưu trữ bigint
có thể là việc lưu trữ và truy xuất dễ dàng hơn, vì việc truyền dấu thời gian được định dạng chính xác phức tạp hơn một số đơn giản (millis kể từ Unix Epoc).
Câu hỏi của tôi là cái nào sẽ cho phép thiết kế linh hoạt nhất và những gì có thể là cạm bẫy của mỗi phương pháp.