NDBI025 Databázové systémy
Studijní materiály
Prezentace
Na webu předmětu v levém sloupci "Slides". V SISu jsou staré!
Skripta
SQL a relační algebra: tirpitz.ms.mff.cuni.cz/ndbi025/ přihlášení student/student Registration stačí Nickname Self-study nebo Self-study (RA) nahoře Next podle obtížnosti
Poznámky
Kosákovy poznámky - teorie + příklady ze cvik
Záznamy
Přednášky z ZS 23/24 - Nejaktuálnější, chybí první dvě přednášky (více na webu předmětu)
Záznamy ze cvičení, na zkoušce je 9 - 12
Návody
normálnější software níž
Zakončení předmětu
Zápočet
Zápočet se získává za napsání zápočtového testu. Ten je spíše prakticky zaměřený a je rozdělený do několika částí dle témat. Obecně se vyplatí získat vouchery, které lze získat za dobré napsání "minitestíku" z některého z témat. Ty se píší přibližně během třetího až šestého cvičení. Vouchery vám pak splní danou část testu, ke které se vztahují.
Zkouška
Je dobré umět se podepsat
Je dobré to udělat v předtermínu
Připojení k databázi
... třeba i na Linuxu. Funguje DBeaver, byť je lehce nepřehledný. Heslo přijde začátkem semestru emailem. Furt teda netuším, k čemu se nám to hodí.
Voucher z relační algebry
Random zápisky, úpravy welcome.
poradi random bylo potřeba 14 bodů z 16 Schéma: Band(_id_, name, foundingyear) Musician(_id_, _name_, surname, professional) BandMember(_idm, idb_) idb in band.id; idm in musician.id select max(foundingyear) Band[FoundingYear] - (Band[FoundingYear<FY]Band<FoundingYear→FY>)[FoundingYear] ??? (Band<name→bname,id→idb>(FoundingYear=1960)*BandMember*Musician<name→mname,id→idm>)[bname, mname] all attrs of bands with unique name Band - (Band[id!=id2 and name=name2]Band<id→id2,name→name2,foundingyear→fy2>)[id, name, foundingyear] musicians with the same name as surname or different name as surname Musician lmao select name from band where id not in (select idb from bandmember) aneb select jmena bands ktera nemaji membery Band[Name] - (Band[id=idb]BandMember)[Name] name and surname of musicians that appear more than once (priserne zadana otazka, mysleno dvojice (name,surname) ktera nejsou unikatni) (Musician[name=n2 and surname=s2 and id!=id2]Musician<name→n2,surname→s2,id→id2>)[name, surname] select foundingyear from band where name='Beatles' Band(name='Beatles')[foundingyear] names of oldest bands Band[name] - (Band[foundingyear>fy2]Band<foundingyear→fy2,name→n2>)[name] (to name->n2 je tam aby nebyl konflikt (stejně pojmenované sloupce)) ids of musicians who play in all bands founded since 2000 (pry by se tu mohla hodit operace deleni, idfk) (BandMember[idb=id]Band(FoundingYear>2000))[idm] (joo, to moje vybere ty ktere hraji v NEJAKE nove band; my chceme membery kteri jsou cleni VSECH novych bands, ale byly tam špatný data takže fungovalo i to moje lol) select name from band where name in (select name from musician) aka select jmena ktera jsou zaroven jmeno kapely i hudebnika (Band[name=mname]Musician<name→mname>)[name] (opet, rename name->mname je potreba aby [name] bylo unikatni) funguje treba band[name]*musician[name] nebo i musician[name] cap band[name] groups where only professional musicians play (pozor ze bez name-nameb tak [] vybre musician.name :(((( ) Band - (Musician<id→idm>(professional=0)*BandMember*Band<id→idb,name→nameb>)[idb, nameb, foundingyear] select distinct B.* from band b inner join bandmember on .=. inner join musician on .=. where m.professional = 1 (Band<id→idb>*BandMember*Musician<id→idm,name→namem>(professional=1))[idb, name, foundingyear] bands where no professional musician plays (lol) Band - (Band<id→idb>*BandMember*Musician<id→idm,name→namem>(professional=1))[idb,name,foundingyear] name & surname of professional musicians without a band (Musician - (Musician[id=idm]BandMember)[id, name, surname, professional])[name, surname] (nejak mi tam chybi ten professional=1 filter lol) alternativne: (wtf mam tam zavorku navic) (Musician[name, surname] - (Musician[id=idm]BandMember)[name, surname] name of bands where Rigo Starr worked (Musician<name→namem,id→idb>(namem='Ringo' and surname='Starr')*BandMember*Band<id→idb>)[name]

