DATETIME başlangıç DATETIME bitiş
Bunun yerine event_start ve event_end gibi etiketlenmiş iki DATETIME değeri kullanmanızı rica ediyorum .
Zaman karmaşık bir iştir
Dünyanın çoğu, doğru ya da yanlış çoğu ölçüm için artık denery tabanlı metrik sistemi benimsemiştir. Bu genel olarak iyidir, çünkü en azından hepimiz ag'nin bir ml olduğu ve bir cm küp olduğu konusunda hemfikir olabiliriz. En azından yaklaşık olarak. Metrik sistemin birçok kusuru vardır, ancak en azından uluslararası olarak tutarlı bir şekilde kusurludur.
Ancak zamanla elimizde; Saniyede 1000 milisaniye, 60 saniyeden bir dakikaya, 60 dakikadan 1 saate, her yarım günde 12 saat, söz konusu aya ve hatta yıla göre değişen ayda yaklaşık 30 gün, her ülkenin diğerlerinden farklı zaman aralığı vardır , her ülkede zamanın biçimlendirme şekli farklılık gösterir.
Hazmetmesi gereken çok şey var, ancak bu kadar karmaşık bir senaryonun basit bir çözüme sahip olması uzun ve kısası imkansız.
Bazı köşeler kesilebilir, ancak yapmamanın daha akıllıca olduğu yerler vardır.
Buradaki en iyi yanıt, gece yarısından sonra bir tam sayı kaydetmenizin tamamen mantıklı görünebileceğini gösterse de, bunu zor yoldan yapmaktan kaçınmayı öğrendim.
İki DATETIME değerini uygulamanın nedenleri doğruluk, çözünürlük ve geri bildirimdeki artış içindir.
Bunların hepsi, tasarım istenmeyen sonuçlar doğurduğunda çok kullanışlıdır.
Gerekenden daha fazla veri depoluyor muyum?
Başlangıçta ihtiyaç duyduğumdan daha fazla bilgi depolanıyor gibi görünebilir, ancak bu isabeti almak için iyi bir neden var.
Bu ekstra bilgiyi saklamak neredeyse her zaman bana uzun vadede zaman ve emek tasarrufu sağlıyor, çünkü kaçınılmaz olarak birine bir şeyin ne kadar sürdüğü söylendiğinde, aynı zamanda olayın ne zaman ve nerede gerçekleştiğini de bilmek isteyeceklerini görüyorum.
Bu büyük bir gezegen
Geçmişte, bu gezegende benimkinden başka ülkeler olduğunu görmezden gelmekle suçluydum. O zamanlar iyi bir fikir gibi görünüyordu, ancak bu HER ZAMAN sorunlara, baş ağrısına ve daha sonra hattın aşağısında boşa zaman kaybına neden oldu. DAİMA tüm zaman dilimlerini göz önünde bulundurun.
C #
DateTime, C # 'da bir dizeye güzelce işlenir. ToString (dize Biçimi) yöntemi kompakttır ve okunması kolaydır.
Örneğin
new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")
SQL Server
Ayrıca, veritabanınızı uygulama arayüzünüzden ayrı olarak okuyorsanız, dateTimes bir bakışta okumaktan memnuniyet duyar ve bunların üzerinde hesaplamalar yapmak kolaydır.
Örneğin
SELECT DATEDIFF(MINUTE, event_start, event_end)
ISO8601 tarih standardı
SQLite kullanıyorsanız, buna sahip değilsiniz, bunun yerine bir Metin alanı kullanın ve ISO8601 formatında saklayın, örn.
"2013-01-27T12: 30: 00 + 0000"
Notlar:
Bu, 24 saatlik biçimi kullanır *
ISO8601'in saat farkı (veya +0000) kısmı, doğrudan bir GPS koordinatının boylam değeriyle eşleşir (gün ışığından yararlanma veya ülke genelini hesaba katmadan).
Örneğin
TimeOffset=(±Longitude.24)/360
... burada ± doğu veya batı yönünü ifade eder.
Bu nedenle, verilerle birlikte boylam, enlem ve yüksekliği kaydetmeye değip değmeyeceğini düşünmeye değer. Bu, uygulamada değişiklik gösterecektir.
ISO8601, uluslararası bir formattır.
Vikipedi, daha fazla ayrıntı için http://en.wikipedia.org/wiki/ISO_8601 adresinde çok iyidir .
Tarih ve saat uluslararası saatte saklanır ve fark, saatin dünyanın neresinde saklandığına bağlı olarak kaydedilir.
Deneyimlerime göre, projeye başladığımda olduğunu düşünsem de, her zaman tam tarih ve saati kaydetme ihtiyacı vardır. ISO8601, bunu yapmanın çok iyi ve geleceğe yönelik bir yoludur.
Ücretsiz ek tavsiyeler
Ayrıca olayları bir zincir gibi bir arada gruplandırmaya değer. Örneğin, bir yarış kaydediliyorsa, tüm olay yarışçı, yarış_devre, devre denetimi noktaları ve devre turlarına göre gruplandırılabilir.
Tecrübelerime göre, kaydı kimin sakladığını belirlemek de akıllıca olacaktır. Tetikleyici aracılığıyla doldurulan ayrı bir tablo olarak veya orijinal tablo içinde ek bir sütun olarak.
Ne kadar çok koyarsan, o kadar çok dışarı çıkarsın
Alan konusunda olabildiğince ekonomik olma arzusunu tamamen anlıyorum, ancak nadiren bilgi kaybetme pahasına bunu yapardım.
Veritabanlarıyla ilgili temel bir kural, başlığın dediği gibi, bir veritabanı size yalnızca verilere sahip olduğu kadarını söyleyebilir ve geçmiş veriler arasında geri dönüp boşlukları doldurmak çok maliyetli olabilir.
Çözüm, onu ilk seferde doğru yapmaktır. Bunu söylemek kesinlikle yapmaktan daha kolaydır, ancak artık etkili veritabanı tasarımı hakkında daha derin bir kavrayışa sahip olmalısınız ve daha sonra bunu ilk seferde doğru yapma şansınız çok artmış olmalıdır.
İlk tasarımınız ne kadar iyi olursa, onarımlar daha sonra o kadar az maliyetli olacaktır.
Tüm bunları söylüyorum, çünkü zamanda geri dönebilseydim, oraya gittiğimde kendime söyleyeceğim şey buydu.