Navrh databaze: Kniha jizd
Zdravim,
dostal jsem ve skole za ukol navrhnout databazi, ktera predstavuje knihu jizd. Zadani znelo:
Databáze má umožnit evidenci najetých km pro jednotlivá služební vozidla, dle jednotlivých řidičů.
Vozidla používají různé pohonné hmoty, které mají různé ceny.
Moc se v tom nevyznam. Zatim, jsem vymyslel toto:
Budu vdecny za jakekoliv rady a pripominky.
Diky!
MaSo
Jen ta v rychlosti, co me napadlo na prvni pohled:
Nedelej FK vazana na SPZ nebo Rodne cislo. Samozrejme to jde, ale znemoznis si dodatecnou opravu RC ridice, pokud by doslo k preklepu.
Tabulka vozidel:
Nedelal bych jako primarni klic SPZ, ale ID_Vozidla
Vozidlo muze mit vychoziho ridice nebo cloveka, ktery se o ne stara - ma je prideleno
Tabulke jizd:
1. jizdy mohou bit vicedenni
2. jizdy mohou mit vice etap (vice cilu) - zalezi na tom, zda to chces zachytit
3. u jizdy bys mel evidovat zacatek a konec i casove
Tabulka paliva:
cena paliva neni stala a jestli nechces pro kazde tankovani zakladat novy zaznam, tezko muzes pridelit cenu k palivu (pokud nejde o zjednoduseny skolni priklad). Cenu bys musel psat primo k tankovani
Tabulka tankovani:
zde by mel byt odkaz na vozidlo, ne naopak
mel by tu byt stav tachometru vozidla pri tankovani
mela by zde byt cena, protoze ta se lisi pri kazdem tankovani
Vicedenni a viceetapove jizdy neresim. Konec a zacatek jsem pridal. Tou cenou u paliva jsem myslel cenu za litr, to by tak podle me byt mohlo. To tankovani jsem upravil, ale stejne tomu nerozumim. Hold, databazista ze me nebude, tady jde hlavne o ten zapocet. Diky moc za odpoved. Jeste pridam, co mam ted:
Nad carou by mel byt primarni klic.
RIDIC
- co kdyz se 2 budou jmenovat stejne ? Jak je rozpozna obsluha programu ? Pridej tam jeste nejakou informaci
JIZDA
- pridej ID_Jizdy a caru udelej pod tim
- vyhod datum, mas tam prece zacatek a konec, doporucuji typ DateTime, budes mit soucasne reseny i vicedenni jizdy
- vzdalenost zmena na Pocet_KM. Jmeno "vzdalenost" je zavadejici.
- Start a Cil bych prejmenoval, neni mozne poznat, ze jde o nazvy, jestly to chces hodne zkracene, tak aspon Odkud, Kam
VOZIDLA
- vyhod stav tachometru, tady k nicemu neni
- uprav si preklep - "Tovrani_znacka"
- pridej prumernou spotrebu, to byva pri vyhodnocovani zajimavy udaj - podle tankovani pak muzes pocitat skutecnou spotrebu
TANKOVANI
- caru posun pod ID_Tankovani
- pridej stav tachometru pri tankovani
Ano, ale ty (FK) mi tam automaticky doplnil case nastroj, kdyz jsem udelal relace, takze s tim asi nic neudelam.
Nerikej, ze tam Case nastroj doplnil datum jizdy. To je tam jedine, pokud by bylo soucasti primarniho klice a tam je to zbytecne, protoze mas ID_Jizdy
Datum jizdy nemyslim, to jsem tam udelal ja. Myslel jsem ty (FK). Tak, snad uz posledni verze:
Ted jeste vymyslet nejaky trapny Trigger. Napada me traba takovy, co auto vyrazene (smazane obsluhou) z tabulky Vozidel, automaticky zapise to tabublky Vyrazena_vozidla. Jeste jednou diky moc za pomoc.
JIZDY
- pridej ID_Jizdy jako primarni klic
TANKOVANI
- stale mi tam chybi pocet km pri tankovani
- proc je ten FK pod carou?
Trigger
- napada me par moznosti - u vozidla mit pocet jizd nebo pocet km, ktere by trigger po zmene jizd aktualizval jako okamzitou statistiku
- aktualni spotreba u auta, kterou by trigger po zapsani tankovani spocital
Teda vazne nevim, co bych si bez tebe pocal... Diky za ty napady na trigger, to uz zvladnu sam v SQL.
To zrejme dela, existencni zavislost (carkovana relace) u Tankovani <- Palivo.
Sekvence u tohoto úkolu se počítají k dobru, takže je možné je použít třeba u všech PK?
Na SQL serverech i u nekterych souborovych databazi je primarni klic povinny. Obvykle je vyhodnejsi pouzit nejake autoincrement pole (pokud neexistuje v tabulce primo nejake jednoznacne pole) jako primarni klic nez jej skladat napr. ze 4 poli. Do tabulky se pak doplni dalsi indexy v zavislosti na pouziti.
Já to myslel tak, že při vložení každého nového záznamu, který má primární klíč nějaké ID, by se ID samo zvedlo o 1.
Na to se typicky pouziva Autoincrement pole. U MS SQL je to Integer, kteremu nastavis vlastnosti, MySQL ma primo typ apod.
Metoda s autoincrementm je vhodna v pripade, kdy potrebujes jednoznacne identifikovat zaznam bez dalsi zavislosti (treba pouziti jako FK).
Pri pouziti jako zavisleho klice, bych hodne premyslel, zda nebudu muset data sehravat, prihravat apod. protoze v tomto pripade by mi autoincrement situaci velmi zkomplikoval.
Aha. Dobrá. Díky.
Já bych tam vůbec nemotal ta rodná čísla. K čemu tam jsou?
Chtel nejak jednoznacne identifikovat ridice.
Problem by byl napr. u zahranicnich ridicu...
K datum, ktera obsahuji citlive osobni udaje (coz RC je) je zakonem narizeno se chovat jinak nez k datum, ktera citlive osobni udaje neobsahuji. To je dostatecne padny duvod RC do knihy jizd vubec nemotat.
jo, kvůli ochraně osobních údajů jsem to psal...
to JaFi: v případě stejných jmen by mohl identifikovat řidiče nějaký číselným kódem, který by přiřadil (klidně 001, 002 apod.)
Souhlas - rodné číslo neuvádět, uváděla bych číslo (kód) řidiče, který má ve firmě v evidenci zaměstnanců. To by bylo dobré i kvůli provázání dat ohledně odpracovaných hodin, přesčasů, cestovních náhrad, ale třeba i náhrady škody.
Ja to myslel z jineho duvodu. Pokud uvidite nekde sestavu a tam bude Franta Novak 1 a Franta Novak 2, nikomu to nic nerekne.
Kdyz tam bude Franta Novak, Bubakov a Franta Novak, Strasetice, tak to bude hned jasne.
Mechanicky to rozlisit jde velmi jednoduse, ale me slo o "lidske" rozliseni
Kdyby nekoho zajimalo jak vypada moje "ostra" verze:
Jeste jednou diky vsem za pomoc, hlavne teda JaFimu.
Ted jsem zjistil, ze zapocet udelen...
Tak kam nás pozveš?
Co treba na peevo? Mas aspon 3 u me! Nebo vydrz az dodelam vysku, vydelam svuj prvni milion dolaru a pozvu te do sveho silda, kde si dame pravou Tequillu i s cervama
Tak to možná dáme blitzky, JF si koupil Fritze 9 ...