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

Đặt giá trị ngày giờ UTC ở đâu trong ứng dụng n-tier:Lớp trình bày, Miền hoặc Cơ sở dữ liệu?

Tôi bỏ phiếu cho việc đặt nó trong thủ tục (hoặc mặc định cho cột, cho phần chèn). Không có lý do gì để chuyển tất cả thông tin này qua tất cả các lớp trừ khi bạn cần độ chính xác đến micro giây để phân biệt, ví dụ:khi người dùng nhấp vào nút so với khi giao dịch được cam kết trong cơ sở dữ liệu. Điều này đặc biệt đúng nếu bạn có một ứng dụng phân tán - bạn có muốn dựa vào tất cả các máy chủ web / ứng dụng của mình để được đồng bộ hóa, đừng bận tâm đến các máy trạm người dùng cuối cho các ứng dụng máy khách / máy chủ? Bạn có thể có các máy chủ ở các trung tâm dữ liệu khác nhau, tất cả đều có múi giờ khác nhau, một số quan sát DST, một số thì không, v.v. DateTime.UtcNow nên xóa bỏ hầu hết những khác biệt đó nhưng tôi vẫn quay lại chuyển tất cả dữ liệu đó mà không có lý do gì. Cơ sở dữ liệu biết mấy giờ rồi; hãy để nó lưu trữ giá trị cho bạn và giữ tất cả logic đó khỏi ứng dụng.

(Ngoài ra, nếu bạn đang lưu trữ thời gian UTC, bạn có thực sự cần DATETIMEOFFSET không ? Nếu vậy, bạn vẫn cần một số cách để thủ tục biết thông tin này đến từ múi giờ nào. Nếu không, bạn có thể chỉ nên sử dụng SMALLDATETIME/DATETIME/DATETIME2 tùy thuộc vào độ chính xác được yêu cầu.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF 6 - Cách thực hiện chính xác các truy vấn song song

  2. Cách đổi tên Ràng buộc khóa chính cho nhiều bảng trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 64

  3. Siêu dữ liệu SQL Server trong intellisense?

  4. Cách lấy số đúng / sai từ một trường bit thành hai cột riêng biệt

  5. Chuyển danh sách trống cho tham số loại bảng do người dùng xác định trên một hàm vô hướng