Původně jsem si myslel, že tak třeba jeden díl seriálu o Ruby on Rails týdně bude akorát. Samozřejmě to byla hrozně naivní představa, do které pořád něco lezlo. A přestože jsem perfekctionista a rád po sobě nechávám kvalitní práci, tak tentokrát jsem se rozhodnul ze svých požadavků trochu slevit, aby vůbec někdy něco vzniklo. Takže zkrátka jsem nevěnoval tolik času zkoušení – pokud narazíte na nějaké nepřesnosti, tak budu rád, když se o ně podělíte v komentářích. Pro začátek je zde popis konvencí pro návrh databáze, jejichž používáním si můžete v RoR ušetřit spoustu psaní.

RoR dodržují zásadu „convention over configuration“. Jednoduše řečeno – používejte konvence místo psaní konfiguračních souborů. Pokud vám to zatím nic neříká, tak se nic neděje, v některém dalším dílu se k tomu brzo dostanu. Zatím to berte třeba tak, že jde o opravdu dobrý nápad, jak si ušetřit práci.
Prozatím se zde nebudu zabírat případem, kdy se názvy databázových objektů od konvencí odchylují. Ale určitě se k němu někdy dostanu.

Názvy tabulek

Konvence v RoR je jednoduchá a i s příklady vypadá takto:

  • Pro tabulky se používají anglické názvy objektů, které reprezentují v množném čísle a malými písmeny:
    Tabulka pro hráče se tedy jmenuje players
  • Pokud je název víceslovný, tak se jednotlivá slova oddělují podtržítkem:
    Zde žádný příklad není, ale třeba tabulka pro Flashové bannery by se jmenovala flash_banners
  • Tabulky, které realizují vztah M:N používají názvy obou tabulek, které spojují, v abecedním pořadí, oddělené podtržítky:
    Tabulka pro hráče ve hrách se tedy jmenuje games_players
  • Pluralizace názvů (množná čísla) se dá globálně vypnout přidáním nastavení
    ActiveRecord::Base.pluralize_table_names = false
    do config/evnironment.rb

Primární klíče

Výchozí konvence v RoR je, že každá tabulka (kromě pro vztahy M:N) má sloupec id, který je typu integer. Pokud chcete používat nějaký přirozený klíč (přezdívky, e-maily, čísla smluv nebo třeba rodná čísla), tak se to dá opět nastavit, ale doporučuju to prostě nedělat – kromě toho, že jsem dost proti používání přirozených klíčů hlavně z důvodu jejich špatné změny (pokud slouží jako cizí klíč jinde), tak se RoR potom chovají trochu zmateně. V databázích, které navíc cizí klíče nepodporují (MySQL při použití MyISAM tabulek) může být udržování referenční integrity s měnitelnými primárními klíči peklo.
Všechny tabulky kromě games_players obsahují sloupec id, který je unsigned integer a auto_increment.

Cizí klíče

Cizími klíči se myslí jednoduše všechny sloupce, které odkazují na primární klíč nějaké jiné tabulky, nezávisle na tom, jestli tak jsou definované. Jejich pojmenování je jednoduché – název odkazované tabulky v jednotném čísle (odkazují totiž na JEDEN záznam) a k tomu přidané _id.
Rozkazy odkazují do tabulky hráčů přes sloupec player_id a do tabulky tahů přes sloupec turn_id.

Ostatní sloupce

Zde se používá název vlastnosti, kterou popisují, v jednotném čísle. Takže pouze dvě poznámky:

  • Pro data se většinou používá doplněk _at, nebo _from a _to. Tohle ale není konvence, přispívá to jenom k větší přehlednosti.
  • MySQL typ ENUM není v tuto chvíli podporován.

Závěr

Možná není všechno úplně přesné, možná něco chybí. Pro základní představu jak fungují v RoR konvence pro návrh databázových tabulek to ale určitě stačí. Příště zkusím napsat jak RoR vlastně funguje a hned potom proč se těmito konvencemi vůbec řídit. Aktuální návrh s popsanými příklady je zde ke stažení.

Zanechej komentář

K zanechání komentáře ke článku musíte být přihlášen. Přihlásit »