Různý formát dat pro stejnou datovou informaci?

Určitě jste to už zažili. Máte rozšířit či upravit stávající systém, který jste částečně pomáhali vytvořit. Jen takovou drobnost. Změnit formát dat z jednoho na druhý. Rychlá úprava. Peklo na celý následující týden. Ano, jedná se o způsob ukládání dat do databáze.

V čem přesně je problém?

V rámci projektů by měla být určitá konzistence způsobu ukládání dat. Čísla ukládat jako čísla (ne text nebo varchar), čas jako jeden z možných typů (datetime, timestamp) a podobně. Tyto datové typy nebyly navrženy jen tak, že se někdo nudil, ale mají své využití.

Bohužel praxe je odlišná. Hlavně v open source projektech (např. Drupal 7) je možné uložit stejnou datovou informaci různými způsoby. Většinou jsou všechny nevhodné. Možná že je některý formát dat pro člověka. Ale pro stroj rozhodně není. Například čas uložený DD-MM-YYYY HH:II:SS se krásně čte při procházení DTB, ale strašně špatně se podle něj řadí.

Pokud budete využívat pro stejnou datovou informaci (například již zmíněný čas) různý formát dat, musíte si zároveň někde v DTB udržovat informaci o tom, jaký formát se kde používá.

Jednotný formát dat všude

Je výrazně jednodušší tato date udržovat vždy ve stejném formátu napříč celým systémem. Důvod je velmi prostý. K načítání a ukládání dat do DTB máte jednu jednoduchou funkci pro každou operaci. Žádná výjimka z výjimky, ale čistý a jednoduchý kód.

Další výhodou je, že nepotřebujete udržovat nikde v systému konfiguraci daného pole v tabulce. Jednoduše víte, že je takové, jak na první pohled vypadá.

A pokud potřebujete hromadu různých jiných podob/formátů těchto dat, jednoduše si je můžete převést pomocí nějaké transformační funkce, která bude dostupná v celém systému. Takovýchto funkcí můžete mít celou řadu a je jen na vás, jestli si uděláte jednu univerzální (dle mě nepřehlednou), anebo sérii menších a přehlednějších.

Zároveň pokud je napíšete „pěkně“, nemusíte řešit opačný převod dat. Jednoduše použijete stejnou funkci k obousměrné transformaci. Je to jednoduché a elegantní.