Autor Zpráva
anonymníí
Profil *
Ahoj,

ač všude používám pro ukládání data date nebo datetime, nyní jsem dostal do správy už druhý projekt od dvou různých programátorů, kteří používají pro ukládání data sloupec typu INT a v něm skladují timestamp.

Kromě toho, že timestamp má (pokud se nepletu) vlastní typ a neměl by být skladován jako INT, napadla mě otázka PROČ.
Je nějaký rozdíl mezi ukládáním timestampů a datumů, pokud ano, jaký a kdy který sloupec použít? Je využívání date(time) všude chybou?

Děkuji.
Camo
Profil
anonymníí:
Myslím že to je len vec názoru. Datetime ti umožní použiť natívne funkcie databázy pre prácu s dátumom. Timestamp ako integer logicky nie. Ale to nieje problém. Iba porovnávaš čísla. Typ timestamp v DB je podobný typu datetime ale ukladá aj časovú zónu https://dev.mysql.com/doc/refman/5.5/en/datetime.html
Alphard
Profil
Viz třeba stackoverflow.com/questions/409286/datetime-vs-timestamp.

Nemyslím, že je to jen otázka názoru. Od data očekáváme některé vlastnosti navíc oproti číslu, proto dává smysl použít pro ně vyšší vrstvu.
Já třeba kvůli konzistenci u projektů, které vedu, prosazuji datetime, nemícháme to dohromady. Pokud naopak přijdete k projektu, který vede někdo jiný a používá timestampy, beru jako rozumné dodržet stejný styl (pokud je to možné), ale začít je používat sám i na nové projekty se mi zdá hloupé.
Camo
Profil
Alphard:
Predsa nieje žiadny problém previesť timestamp na dátum. Môžešmi upresniť čo myslíš pod pojmom "nekteré vlastnosti navíc" ktoré by sa nedali použiť pri timestampe?
Alphard
Profil
Otázka se sice týká datových typů v databázi, ale já to dost spojuji s reprezentací data v aplikaci. A to už je otázka, jak vyvíjíš. Někdo se snaží o správný objektový návrh a někomu vyhovuje používat prakticky jen čísla a stringy.

Činnost, která je typické pro datum, je např. přičtení dne. Tím nemyslím přičtení nějaké konstanty 5*24*3600 k číselné proměnné, ale opravdu metodu addDay(5) třídy reprezentující datum. Vedle toho máme např. metodu addWorkDay(5), která přičte 5 pracovních dní (to už konstantou nevyřešíš) a mnoho dalších.

Samozřejmě můžeš totéž udělat bez objektů pomocí funkcí, ale to už bychom se dostávali k výhodám a nevýhodám OOP obecně. A když přistoupíme na to, že je rozumné datum v aplikaci reprezentovat výhradně jako instance vhodné třídy, je podle mě logické, že budeme speciální datový typ používat i v databázi. Opět proto, že i na úrovni databáze se provádí nějaká aritmetika s datem a chceme ji mít jednotnou. Nebudu mít v databázi vedle sebe sloupce reprezentující stejný typ dat s různým datovým typem, to je otázka konzistence.

Konverze mezi db a aplikační reprezentací je pak zcela automatická, ručně nic převádět nebudu.
Camo
Profil
Alphard:
Díky. Ja súhlasím.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0