NDBI025 Databázové systémy

Učitel:RNDr. Michal Kopecký, Ph.D.
SISu:Odkaz do SISu
Diskuze:Discord kanál
Web předmětu:Odkaz na web

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/ \rightarrow přihlášení student/student \rightarrow Registration \rightarrow stačí Nickname \rightarrow Self-study nebo Self-study (RA) \rightarrow nahoře Next podle obtížnosti

Poznámky

Záznamy

Návody

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]