Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: kve 25. 06. 2018, 17:52:00
-
Ahoj,
poslední dobou se tu řeší mraky OT hovadin, tak přicházím se svou troškou do mlejna. Po delší době jsem dostal chuť si zase něco pro radost napsat a nejen jednoduchý skript v Bashi, nebo v Pythonu.
Používám v podstatě už jen webový prohlížeč a terminál, takže jsem si řekl, že zkusím něco webového. Chci si trošku oťukat PHP, JS, CSS a MariaDB.
Pro začátek jsem si řekl, že si napíšu webovou knihu jízd. ať dělám něco, co sám použiji. Aktuálně to řeším jednoduchou tabulkou, nebo přesněji texťákem v mobilu se strukturou:
Datum, stav tachometru, A,B,C
Kde A,B,C je zkratka cílového místa, typu Ms – Microsoft.
Pro první pocit, že to něco dělá, jen tenhle texťák použil jako vstup. Mám pole objektů záznam, který má atributy s datem, stavem tachometrů a tím zbytkem, metodu, co mi rozpitvá navštívená místa na jednotlivé lokality, vypočítá ujeté km od jiného záznamu a podobně.
Tím se ale zabývat nechci, chci zkusit použít databází a tady jsem trošku narazil. O SQL toho moc nevím a nerad bych si tabulku založil blbě pak to nějak krkolomně řešil programově mimo SQL.
A)
1. ujedu 10 km a navštívím jedno místo a 2. navštívím 30 míst. To mám mít kvůli tomu tabulku o 32, nebo raději 50 sloupcích s rezervou? To se mi moc nelíbí.
B)
Můžu mít tři sloupce, stejně jako teď, ale tím si odříznu (odříznu?) relaci na jinou tabulku, aby mi to ze zkratek vracelo rovnou celé názvy cílových míst.
C)
Den o 30 jízdách můžu rozsekat na 30 záznamů, ale já nevím kolik jsem ujel mezi jednotlivými místy. Ztratím tu možnost si jednoduše spočíst denní km mezi řádky, opticky to nebude tak přehledné, ale u dat v databázi to je asi fuk.
C mi připadá asi jako nejmenší zlo, ale moc nadšený z toho nejsem. Nejde mi o to to nějak ubastlit. Udělal bych to všemi způsoby, fungovalo by to a při těch pár záznamech bez dopadu na výkon. Chci to ale udělat maximálně čistě. Potřeboval bych nasměrovat na tu správnou cestu a to klidně i na D), co má vstup zarostlý křovím.
Dík
-
A) Den/jízda/záznam bude mít ID a v druhé tabulce bude seznam míst pro dané ID.
B) JOIN
C) VIEW
-
bych to klidně ukládal vše do jedné tabulky.
-
Ja by som ako prvé odniekiaľ zobral nejakú knihu alebo skriptá o databázach, a prečítal si niečo o normálnych formách či ako sa to presne volá. Lebo naprasiť niečo napráskaním dát bez ladu a skladu sa dá, ale na to potom netreba relačnú databázu...
-
A)
1. ujedu 10 km a navštívím jedno místo a 2. navštívím 30 míst. To mám mít kvůli tomu tabulku o 32, nebo raději 50 sloupcích s rezervou? To se mi moc nelíbí.
Není třeba. Klidně můžeš porušit 1NF a všechna města můžeš strčit do jednoho sloupce a oddělit třeba čárkami, Zůstanou tedy jen 3 sloupce: Datum, stav tachometru, navštívená místa.
Pokud bys však města chtěl mít oddělena, tak už budeš potřebovat dvě tabulky:
- cesta(id, datum, tachometr)
- misto(id, cesta_id, zkratka)
Ve sloupci cesta_id bude tzv. cizí klíč, který ukazuje na cesta.id. Vazba bude 1:N, tedy v rámci jedné cesty namůžeš navštívit více měst.
Pokud budeš chtít místa uvádět zkratkami, tak na ně budeš potřebovat ještě třetí tabulku:
- mesto(zkratka, nazev)
-
Ja by som ako prvé odniekiaľ zobral nejakú knihu alebo skriptá o databázach, a prečítal si niečo o normálnych formách či ako sa to presne volá. Lebo naprasiť niečo napráskaním dát bez ladu a skladu sa dá, ale na to potom netreba relačnú databázu...
Pokud důsledně aplikuješ normální formy, tak už vlastně relační databázi nepotřebuješ. Relační databáze s přehledem zvládají 0NF. Pouze to nepůsobí profesionálně a blbě se to rozšiřuje.
-
Kite, dík! Z prvního příspěvku jsem nebyl moc chytrý, ale po zagooglení, co znamená 0NF, jsem se ocitl na Wiki a po demonstračních tabulkách 1NF už jsem v obraze. To je to, co jsem hledal.
https://cs.wikipedia.org/wiki/Normalizace_datab%C3%A1ze#Prvn%C3%AD_norm%C3%A1ln%C3%AD_forma_(1NF)