Zapoctovy test, 4.2.2009 [09:00]

Ellrohir at 2009-02-04 14:36:16

Zadání bylo tentokrát simulovat databázový příkaz SELECT

muselo to umět sežrat jakýkoliv vstup, ale "správný" byl pouze ve formátu

SELECT sloupec1 [, sloupec2, ...] FROM tabulka1 [, tabulka2, ...] WHERE sloupecX = "neco"

tabulky byly reprezentovány jako soubory tabulkaX.db a byly dány...struktura - první řádek názvy sloupců oddělené středníkem, další řádky hodnoty ve sloupcích oddělené středníkem...názvy sloupců v rámci tabulky unikátní a dvě tabulky mohly mít společný právě jeden název sloupce...data typu string a byla předpokládána jejich korektnost a korektnost formátu dat v tabulce...

nebyl požadavek na složitost nebo rychlost, pouze schopnost poradit si s libovolným vstupem a v případě korektně zadaného vstupu ho správně vyhodnotit...

zřejmě to nebyl tak extrémní problém, bohužel já jsem dojel na to, že jsem neumněl "joinovat" dvě (a více tabulek)...select mi fungoval relativně dobře na jednu tabulku, ale s více si to poradit neumělo a nepřišel jsem ani na myšlenku "jak na to"...možná je trochu problém, že asi ani přesně nevím, co to technicky znamená "joinovat dvě tabulky podle sloupce"...umím SQL na úrovni "vytvoř tabulku, něco vlož do *jedný *tabulky něco vyber z jedný tabulky, něco uprav v jedný tabulce"...že jde pracovat s víc tabulkama tuším, ale neovládám to...nevím o tom, že by se databáze nějak braly na přednášce (aspoň ve slajdech nic takového není) a předmět "Databázové systémy", kde bych se to zřejmě dozvěděl jsem ještě neabsolvoval, když je až v letním semestru druháku...takže v tomhle smyslu mi to přijde jako lehká podpásovka, ale možná je to jenom můj dojem umocněný tím, že tam v pátek musím znova...posuďte sami...

Osiris at 2009-02-04 15:33:01

No JOIN více tabulek je myslím strašně jednoduchej, měl jsi se ho na to asi zeptat, když jsi nevěděl. Prostě jenom uděláš kartézskej součin všech řádků ve všech tabulkách no a pak vyškrtáš ty řádky, kde nesouhlasej primární klíče a nesouhlasí ten filtrovací sloupec.

Ellrohir at 2009-02-04 15:44:35

tak on se mi ten dohlížející i trochu poradit snažil...ale problém je, že když to člověk neviděl někde krok po kroku vysvětlený, tak si to těžko představí (aspoň teda já)...a zase rozebírat to se mnou půl hodiny a do detailů nemoh...tak jsme se shodli na tom, že to necháme a dám si to příště...

mi to přijde jako třeba kdyby byl za úkol naprogramovat třeba "gaussovu eliminaci" a dostal by to člověk, kterej neabsolvoval Lineární Algebru I a nebral to na střední (my např. už ve třeťáku vč. té programové implementace)...podle mě by to ne každej dal jen na základě rychlého slovního popisu...možná se předpokládalo, že join je věc tak jednoduchá, že to každej umí (a taky se zdálo, že tam není snad nikdo jinej, kdo nechápe, co se po něm chce - aspoň to nedali najevo...), ale mě to holt nesedlo a stálo mě to 4 hodiny času a termín... :roll:

adam at 2009-02-04 21:23:15

Osiris wrote:No JOIN více tabulek je myslím strašně jednoduchej, měl jsi se ho na to asi zeptat, když jsi nevěděl. Prostě jenom uděláš kartézskej součin všech řádků ve všech tabulkách no a pak vyškrtáš ty řádky, kde nesouhlasej primární klíče a nesouhlasí ten filtrovací sloupec.

No, jestli je to tak jednoduchý, nevím, protože i Ty to IMHO trochu pleteš:): Čárka by měla dělat prachsprostý cross join, takže žádné vyškrtávání řádků, kde "nesouhlasí primární klíče" (ostatně primární, ani jiné, klíče v zadání ani nejsou). Výsledek dotazu tak může mít několik stejnojmenných sloupců. Takže otázka spíš je, jestli se zakáže na takové sloupce odvolávat v klauzuli WHERE nebo, jestli se povolí tečkování přes názvy tabulek (tabulka1.stejnýsloupec, tabulka2.stejnýsloupec). Jak to tedy bylo zadané?

Mám pocit, že při těchhle praktických testech (ať už z Javy nebo jiného jazyka) se moc nehraje na spravedlivost zadání:/. Prostě se předpokládá, že když to někomu nesedne, tak jde znova. Hádám, že je to pro zkoušející jednodušší než složitě vymýšlet ideální zadání.

Ellrohir wrote: stálo mě to 4 hodiny času a termín... :roll:

Můžete být rádi, že jste na to dostali hodinu navíc. Odpoledne bylo zadání podobné (jenže se dělalo CREATE, INSERT, DELETE a DROP, odpovídajícím způsobem zjednodušené, pokusím se to v dohledné době sepsat). A po třech hodinách a asi patnácti minutách byl zákaz dotýkat se klávesnice. Chybělo mi už jen pár řádek kódu, ale to by mohl říct každej, že jo. Spíš jsem na sebe naštvanej, že mi to trvalo tak dlouho. Zas tak těžký to nebylo, jen hodně psaní.

Co mě ovšem překvapilo příjemně, jsou nové počítače, které tolik nehučí a nešrotují:).

Ellrohir at 2009-02-05 01:01:28

no já sem počítal 4 hodiny i s cestou tam a zpátky, během které jsem pochopitelně neudělal nic jinýho...na psaní byl čas také 3 hodiny (a něco, protože dohlížející něco vyřizoval) - po téhle době jsme tam zůstali 4, z toho to 3 včetně mě vzdali a jeden byl během minuty připraven předvádět (jak dopadl nevím)

zadané to bylo, tak jak to píšu..."tečkování" téměř jistě ne...bylo ale řečeno, že 2 tabulky mají společně max. 1 sloupec - tedy buď nemají žádný, pak nejde joinovat a není co vypsat a nebo právě jeden...

Osiris at 2009-02-05 08:44:39

adam wrote:...

To je otázka. Co když tím byl myšlen NATURAL JOIN a ne CROSS JOIN?

adam at 2009-02-05 10:57:55

Osiris wrote:To je otázka. Co když tím byl myšlen NATURAL JOIN a ne CROSS JOIN?

Aha, tak asi máš pravdu, ale čárka je normálně CROSS JOIN. Jestli tedy mysleli NATURAL JOIN, tak moc nemá smysl to "2 tabulky mají společně max. 1 sloupec - tedy buď nemají žádný, pak nejde joinovat a není co vypsat a nebo právě jeden.". Protože NATURAL JOIN tabulek bez společných sloupců má být kartézský součin (je pak triviálně splněna podmínka, že hodnoty v KAŽDÉM společném (z těch žádných společných) se rovnají), ne prázdná tabulka.

Ellrohir at 2009-02-05 14:24:04

tak teď už vůbec nevím o čem to mluvíš a co se teda po mě vlastně chtělo :evil: ale tak možná jsem to nepochopil já a tady to i špatně tlumočím a zadaný to původně bylo dobře, regulérně a jasně...slovo od slova si zadání bohužel nepamatuju :roll: