sql >> Databasteknik >  >> RDS >> Sqlserver

Var ställer man in ett UTC datetime-värde i n-tier-applikation:Presentationslager, Domän eller Databas?

Jag röstar för att ställa in det i proceduren (eller standard för kolumnen, för infogning). Det finns ingen anledning att föra all denna information genom alla lager om du inte behöver mikrosekund noggrannhet för att skilja t.ex. när användaren klickade på knappen kontra när transaktionen genomfördes i databasen. Detta gäller särskilt om du har en distribuerad applikation - vill du lita på att alla dina webb-/applikationsservrar är synkroniserade, strunt i slutanvändararbetsstationer för klient-/serverappar? Du kan ha servrar i olika datacenter, alla med olika tidszoner, vissa observerar sommartid, andra inte, etc. DateTime.UtcNow borde utplåna de flesta av dessa skillnader, men jag skulle ändå gå tillbaka till att skicka runt all information utan anledning. Databasen vet vad klockan är; låt den lagra värdet åt dig och håll all logik borta från applikationen.

(Också om du lagrar UTC-tid, behöver du verkligen DATETIMEOFFSET ? Om så är fallet behöver du fortfarande ett sätt för proceduren att veta vilken tidszon denna information kom från. Om inte, bör du förmodligen bara använda SMALLDATETIME/DATETIME/DATETIME2 beroende på vilken noggrannhet som krävs.)




  1. Få poster baserade på kolumns maxvärde

  2. Dynamisk SQL-exekvering i SQL Server

  3. Rails rullar inte tillbaka transaktionen efter misslyckad save()

  4. mysql lagrad funktionsparameter