Đây là một câu hỏi giả định hoàn toàn: giả sử tôi có một cơ sở dữ liệu nơi tôi cần lưu trữ tư cách thành viên cho người dùng, có thể kéo dài trong một khoảng thời gian cụ thể (1 tháng, 3 tháng, 6 tháng, 1 năm, v.v ...).Trong cơ sở dữ liệu, tốt hơn là lưu trữ một khoảng thời gian làm ngày bắt đầu/kết thúc, hoặc ngày bắt đầu và thời lượng?
Là nó tốt hơn để có một bảng Memberships
có các trường (mỗi ngày được lưu trữ như một dấu thời gian unix):
user_id INT
, start_date INT
, end_date INT
hoặc để lưu trữ nó như:
user_id INT
, start_date INT
, length INT
Dù bằng cách nào, bạn có thể truy vấn người dùng có thành viên đang hoạt động hông (ví dụ). Đối với trường hợp thứ hai, số học sẽ cần phải được thực hiện mỗi khi truy vấn được chạy, trong khi tình huống trước đây chỉ yêu cầu ngày kết thúc được tính một lần (khi chèn). Từ quan điểm này, có vẻ như thiết kế cũ là tốt hơn - nhưng có bất kỳ hạn chế nào đối với nó không? Có bất kỳ vấn đề phổ biến có thể tránh được bằng cách lưu trữ chiều dài thay thế, mà không thể tránh được bằng cách lưu trữ ngày?
Ngoài ra, có phải dấu thời gian unix là con đường để đi khi lưu trữ dữ liệu thời gian/ngày hoặc là một cái gì đó như ưu tiên DATETIME không? Tôi đã chạy vào các vấn đề với cả hai kiểu dữ liệu (chuyển đổi quá mức) nhưng thường giải quyết trên dấu thời gian unix. Nếu một cái gì đó như DATETIME được ưa thích, làm thế nào điều này thay đổi câu trả lời cho câu hỏi thiết kế trước đây của tôi?
Câu trả lời cho câu hỏi này có phụ thuộc vào hệ thống không? Cả hai giải pháp có vẻ tốt với tôi nhưng nếu không có truy vấn nào của bạn quan tâm đến thời lượng thì trường hợp đầu tiên sẽ tốt hơn. Nếu không, nó có thể là cách khác. Ngoài ra nếu bạn có truy vấn nặng sử dụng độ dài và truy vấn nặng sử dụng ngày kết thúc, bạn có thể muốn lưu trữ cả hai giá trị trong cơ sở dữ liệu của mình. –