Airtable je perfektní nástroj, který umožňuje ukládat, propojovat a různě zobrazovat data. Je často využívaný při návrhu tzv. no-code aplikací, kde slouží jako databáze. Zní to složitě, ale Airtable dělá všechno jednodušším. Co za vás ale Airtable nevyřeší, je znalost základních principů relačních databází. Airtable je totiž relační databáze. Co to znamená?
Relační databáze je systém, kde můžete ukládat data do tabulek a vytvářet mezi nimi vztahy. Typickou ukázkou může být škola v mém příkladu. V bázi (tak se říká "souboru" v Airtablu) najdete několik tabulek:
- Žáci
- Skříňky
- Třídy
- Výpůjčky
- Knihy
Mezi těmito tabulkami jsou vztahy – každý žák má přidělenou skříňku a chodí do jedné třídy. Třída může mít více žáků. Každý žák si může vypůjčit více knih. Dalo by se pokračovat do nekonečna. Relační databáze často popisují vztahy mezi různými objekty (v odborné hantýrce se jim říká entity) tak, jak fungují v realitě. Proč?
Relační databáze často stojí jako úložiště dat pro nástroje (software, aplikace), které používáme pro řízení procesů z reálného světa. A pokud mají tyhle nástroje dobře fungovat, musí mít databáze správný design. A to platí i pro Airtable, bez ohledu na to, jak moc všechny koncepty relačních databázi zjednodušuje.
Jaké jsou tedy vztahy mezi tabulkami a jak je v Airtablu nastavit?
Vazba 1:1 (one-to-one)
Vazba 1:1 neboli one-to-one znamená, že se ke jednomu řádku v první tabulce vztahuje vždy pouze jeden řádek v druhé tabulce. V naší ukázce jde o situaci, kdy má každý žák ve škole pouze jednu skříňku (skříňku není možné sdílet).
V Airtablu je potřeba nastavit v obou tabulkách propojení pouze s jedním řádkem v druhé tabulce.


Vazba 1:M (one-to-many)
Vazba 1:M neboli one-to-many znamená, že se ke jednomu řádku v první tabulce vztahuje více řádků v druhé tabulce. V našem příkladě jde o vztah žáků a tříd. Žák může být členem vždy jen jedné třídy. Třída naopak může mít více žáků. Můžete se setkat i s vazbou, kde je počet "M" omezen – např. každá třída může mít jen 20 žáků. Toto v Airtablu zatím nelze omezit (ale řešení existují).
V první tabulce Třídy
je potřeba aktivovat možnost Allow linking to multiple fields
.

V druhé tabulce Žáci
je naopak potřeba zajistit, abyste mohli přidat jen jeden řádek.

Vazba M:N (many-to-many)
Vazba M:N neboli many-to-many je takový chyták. V reálném světě se vyskytuje překvapivě často a není jiný způsob, jak takovou realitu podchytit, než vytvořit tzv. spojovací tabulku. V našem příkladu chceme evidovat zápůjčky knih v knihovně. Každý ze žáků (tedy více žáků) si může během jedné výpůjčky odnést několik knih. Tabulka Výpůjčky je naší spojovací tabulkou.
Nastavení vazby many-to-many je o něco složitější, ale rozhodně to není něco, co by vás mělo zastavit. V první tabulce Žáci
zaktivujeme možnost připojit více řádků z propojovací tabulky Výpůjčky
.

V tabulce Výpůjčky
pak nastavíme, aby se jedna výpůjčka vztahovala vždy pouze k jednomu žákovi.

Ve stejné tabulce Výpůjčky
nastavíme, aby si žák mohl vypůjčit více knih. Pokud bychom to neumožnili, žák by si mohl vypůjčit jen jednu knihu a to by se stopro negativně projevilo na jeho studijním prospěchu. Ano, design databáze má dopad na společnost :).

V tabulce Knihy
pak musíme nastavit, aby každá kniha mohla být spojena s více výpůjčkami – jinak by si danou knihu mohl půjčit člověk jen jednou.

Všimli jste si problému? Toto současné nastavení neřeší, zda je kniha dostupná a nemá ji někdo zapůjčenou. I to lze řešit, ale už je to nad rámec tohoto článku. Ve zkratce – podle data výpůjčky zjistíte, zda je kniha vypůjčená. Vytvoříte vzorec, který zobrazí ano, pokud je dnešní datum nižší nebo stejné jako datum konce poslední výpůjčky u dané knihy. V opačném případě zobrazíte ne. V nastavení vztahu v tabulce Výpůjčky
pak omezíte možnosti pouze na knihy, které nejsou zapůjčené. K tomu využijete funkci Limit record selection to a view
. Podívejte se na celé video, kde ukazuji, jak tento problém řešit.
Co dál?
A co když někdo knihu nevrátí? Mohli bychom pokračovat dál a dál, až bychom nakonec měli neprůstřelný systém. Mohli bychom posílat e-maily s připomenutím konce výpůjčky. Mohli bychom evidovat pokuty. S Airtablem můžeme cokoliv.
Design databáze je mnohem širší téma než jen řešení vztahů mezi tabulkami. Dalším tématům se budu věnovat někdy v budoucnu.