» »

SQL rabim pomoč

SQL rabim pomoč

jack968 ::

Začel sem se ucit SQL in mi malo nagaja.
Recimo da imam v lasti (CD / DVD) zbirko glasbe in filmov. To posojam prijateljem in nevem več komu sm kaj posodu, kdo je vrnu in kdo ni.
V bazi bi mogu met podatke o CD in DVD katere imam, imena in priimke prijateljev ter vodit evidenco kateremu prijatelju sem posodu nek glasbeni (CD/DVD) ali film, in kdaj mi je priajtelj to vrnil.
No naredu sm nek ER diagram k ga moram normalizirat v 3F. Pa bi prosu za pomoč k se šele učim in mi ni jasno kako bi to izlgledal. Uključno z PK, FK.

http://imgur.com/krIAMAQ
To sm do sedaj naredu. Pa nej mi en pove če je to uredu. Pa kak naj bi 3F tabele izgledale da si lahko predstavljam za nek drugi primer v prihodnosti.

smacker ::

Najprej moraš razrešit relacije mnogo proti mnogo: v tem primeru je relacija "Prijatelj" - "Medij" mnogo proti mnogo, ker si en prijatelj lahko izposodi več medijev, isti medij pa si lahko izposodi več prijateljev. Razrešiš z vmesno tabelo "Izposoja", v katero zapišeš kateri prijatelji so si izposojali katere medije + dodaš podatke o izposoji (datum od/do,...).

Pri 3F gre bolj za logičnost, kot neka huda pravila, kot to zgleda ko profesor na faksu postopke nalima na tablo. Pride s časom v kri in znaš hitro načrtovat 3F tabele, brez izvajanja postopkov normalizacije.
1F: Zapisi se ne smejo podvajat. Recimo če bi hotel v tabeli Izposoja zapisat "ime", "priimek", "starost",... prijatelja, bi se ti deli večkrat ponovili. Te atribute daš v novo tabelo in v ptvozni ohraniš en atribut, ki služi kot FK. Narobe bi bilo tudi, če bi pri 15 različnih medijih imel podatek o žanru "komedija". Take atribute moraš dat v posebno tabelo, zato da obstaja le en zapis "komedija" in se nanj večkrat sklicuješ preko IDja.
2F: podatki ne smejo bit odvisni med seboj. Naprimer če bi hotel shraniti naslov prijatelja v 1 tabeli, bi atribut pošta bil odvisen od atributa poštna številka (Ko bo poštna številka "2000", bo pošta "Maribor" itd.). Take atribute moraš spravit v novo tabelo, v prvotni pa ohranit le 1 atribut ki služi kot FK.
3F. Vsi atributi morajo opisovat PK, ne FKjev. Recimo v tabeli "izposoja" datum-od opisuje izposojo. Atribut "tel_prijatelja" bi opisoval prijatelja. Take atribute moraš premaknit v ustrezno tabelo, v tem primeru v tabelo "prijatelj" ali ustvarit novo tabelo, če ta še ne obstaja.

Tabele za ta primer:
Prijatelj: ID, ime, priimek,....
Vrsta medija: ID, vrsta (zapisi "CD", "DVD", "Bluray",...)
Tip vsebine: ID, tip (zapisi "glasba", "film", ....)
Žanr: ID, žanr (zapisi "komedija", "akcija",... "pop", "rock",...)
Medij: ID, ID_vrsta_medija, ID_tip_vsebine, ID_žanr, naslov, leto_izdaje,...
Izposoja: ID, ID_prijatelj, ID_medij, datum_od, datum_do, vrnjeno(0/1)

Vsi "ID" so PK, vsi "ID_nekaj" pa FK.

jack968 ::

smacker bom zvečer uploadal na imgur pa če boš lahko bi te prosu da mi pregledaš. Hvala ti.

jack968 ::

Nevem če sm te pravilno razumel. Zadnje dve tabeli ne razumem (Medij, Izposoja) Imamo MedijID in IzposojaID ki sta primarna ključa. Ne vidim povezave malo si mi zaklompliciral
tole nalogo hahaha. Poglej pa mi sporoči prosim. Zadnje 2 tabele nism izpolnil k so same šifre pa nevem kak dodelit.

http://imgur.com/a/iBFof

jack968 ::

Razumem zdaj k sm upisal not imena namesto šifer kak je to povezano. Sam povej mi če je to uredu pa če moram šifre drugače dodelit da nebo vse 1,2,3 1,2 ...

jack968 ::

http://imgur.com/a/iy5cC
A je to to? Sam še zmer v zadnji tabeli ni vidljiv film kateri je bil posojen.
A je kaj za popravit?

smacker ::

V tabeli medij ti manjkajo atributi naslov, leto_izdaje,... ki bi dalo podatke o filmu. Pa v zadnji tabeli v ID_medij lahko daš samo 1 zapis. Če pa si prijatelj izposoja več medijev hkrati, pa je treba uvest novo tabelo, da ohraniš normalizirano obliko. Pol zgledata ti tabeli tako:
Izposoja: IzposojaID, ID_prijatelj, datum_od, datum_do, vrnjeno("DA" ali "NE" oz 0/1)
IzposojaPostavka: ID, ID_izposoja, ID_medij

"Izposoja" si predstavljaj "račun", ki pride iz blagajne in ga izstaviš prijatelju ob izposoji, "IzposojaPostavka" pa je posamezna vrstica na tem računu.

Šifre lahko podeljuješ poljubno, pomembno je da so unikatne. V praksi se pogosto uporablja kar auto incremented integer (1,2,3,...), lahko pa si kako svojo logiko zmisliš, pazit moraš samo da se ne podvajajo (recimo ko en zapis zbrišeš, pa potem novega vstaviš).

jack968 ::

http://imgur.com/a/6GIAs

Sm preskoču IzposojaPostavka k moram to še v bazo spravit pa da nebom preveč zgubljen.

A je sedaj uredu? šifre ? Je povezano?

A moram tudi ER diagram spremenit?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL query za datume, ki se ne prekrivajo

Oddelek: Programiranje
212139 (1770) omnimint
»

Pomoč pri E-R diagramu

Oddelek: Programiranje
81976 (1819) f1ghter4
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211474 (958) Mitja Bonča
»

podatkovna baza

Oddelek: Programiranje
51782 (1603) scarymovie
»

Access in malo večja baza

Oddelek: Programska oprema
7904 (799) |Luka|

Več podobnih tem