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

Thiết kế các sự kiện ngày-giờ không trùng lặp

Rất phổ biến khi làm việc với phạm vi ngày-giờ mà bạn sử dụng phạm vi bao gồm ở đầu và loại trừ ở cuối. Ví dụ:

(using ISO8601 formatting)

Start                  End
2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z

Giá trị nằm trong phạm vi khi nó nhỏ hơn hoặc bằng giá trị bắt đầu và lớn hơn (nhưng không bằng) giá trị cuối cùng. Trong ví dụ trên, 02:00 thuộc phạm vi thứ hai, không thuộc phạm vi thứ nhất. Nói cách khác:

Start <= value < End 

Hoặc tương đương,

Start <= value  AND  End > value

Trong Toán học, sử dụng Ký hiệu khoảng thời gian , đây được gọi là khoảng thời gian "nửa mở".

[Start, End)

Đây luôn là một cách tiếp cận tốt hơn so với ý tưởng sử dụng một giá trị như 01:59:59 . Cân nhắc xem tôi có trừ đi End - Start không để có được một khoảng thời gian. Tôi hy vọng câu trả lời là một giờ, không phải 59 phút và 59 giây.

Hầu hết các ví dụ sử dụng thuật ngữ Start/End , nhưng đôi khi bạn sẽ thấy Begin/End hoặc Start/Stop . Cá nhân tôi nghĩ rằng bộ điều khoản tốt nhất để sử dụng khi bạn có phạm vi bao gồm / độc quyền là Start/Until . Nó có thêm lợi thế là cả hai thuật ngữ đều có 5 ký tự, xếp theo thứ tự bảng chữ cái và truyền đạt rõ ràng rằng ngày kết thúc là độc quyền.

Ngoài ra, khi nói về các sự kiện riêng biệt, bạn nên ghi lại thời gian của mình dưới dạng UTC để tránh nhầm lẫn giữa các múi giờ. Điều này thậm chí còn quan trọng đối với các ứng dụng cục bộ, vì nhiều múi giờ trải qua quá trình chuyển đổi tiết kiệm ánh sáng ban ngày. Bạn không muốn các giá trị bạn ghi lại trong cơ sở dữ liệu bị mơ hồ. Trong MySQL, bạn có thể sử dụng TIMESTAMP kiểu dữ liệu để đảm bảo các giá trị được lưu trữ dưới dạng UTC hoặc bạn có thể sử dụng DATETIME loại dữ liệu nếu bạn có thể chắc chắn rằng bạn đang làm việc với các giá trị UTC trong mã ứng dụng của mình.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm hàng phù hợp nhất trong MySQL (InnoDB)

  2. Làm cách nào để tôi có thể tự động tạo địa chỉ email cho các thành viên trang web của mình?

  3. Tạo một mảng bằng php đệ quy từ mysql

  4. Cách tìm tên người dùng và mật khẩu cho cơ sở dữ liệu mysql

  5. Cách tốt nhất để trả về giá trị enum trong MySQL là gì?