Mějme následující structures.txt:
V jiné podobě tatáž data jako CSV-soubor:
O tomto souboru dat můžeme uvažovat jako o jakési primitivní databázi, ve které můžeme kupříkladu vyhledávat:
Ale vidíme, že to v podstatě znamená strukturu souboru pokaždé znovu načíst do paměti (rozložení na id, inchikey, smiles, name) a pro každé vyhledávání napsat smyčku přes všechny dostupné údaje. (Nemluvě o tom, že dané CSV by se navíc parsovalo ne tak přímočaře jako výše uvedený text.) Nešlo by to i nějak jinak?
Databáze (relační) jsou kolekce dat uspořádaných do tabulek, přičemž mezi jednotlivými tabulkami mohou (ale také nemusí) být různé vztahy.
Přitom struktura jednotlivých tabulek je určena příslušným databázovým schématem. Např. tabulka z předchozího příkladu by mohla vypadat takto:
id | name | inchikey | smiles |
---|---|---|---|
7 | 9-ethylpurin-6-amine | MUIPLRMGAXZWSQ-FSHFIPFOCP | CCN1C=NC2=C1N=CN=C2N |
11 | 1,2-dichloroethane | WSLDOOZREJYCGB-UHFFFAOYAL | C(CCl)Cl |
12 | benzene-1,2,3,5-tetrol | RDJUHLUBPADHNP-UHFFFAOYAO | C1=C(C=C(C(=C1O)O)O)O |
13 | 1,2,4-trichlorobenzene | PBKONEOXTCPAFI-UHFFFAOYAE | C1=CC(=C(C=C1Cl)Cl)Cl |
19 | 2,3-dihydroxybenzoic acid | GLDQAMYCGOIJDV-KZFATGLACE | C1=CC(=C(C(=C1)O)O)C(=O)O |
33 | 2-chloroacetaldehyde | QSKPIOLLBIHNAC-UHFFFAOYAP | C(C=O)Cl |
34 | 2-chloroethanol | SZIFAVKTNFCBPC-UHFFFAOYAF | C(CCl)O |
... |
Ohromnou výhodou (relačních) databází je, že jsou specializovanými nástroji na správu ohromného množství takto uspořádaných dat, přičemž jsou (většinou) vybaveny speciálním dotazovacím jazykem SQL (Structured Query Language), který slouží k výběru dat z databáze podle zadaného kritéria. Např. program z předchozího slajdu bychom v SQL zreprodukovali takto:
Žádná smyčka přes všechny vstupní řádky, žádné rozdělování právě zpracovávané řádky na jednotlivé údaje… Prostě jen dotaz do databáze na tabulku s uvedenou podmínkou.
.schema
vrátí SQL použité pro vytvoření příslušné databázeSELECT
; kromě vlastních dat obsahuje i metainformace o nich (jako např. názvy a typy sloupců)