GalDrnovsek / Fuzbal

MIT License
0 stars 0 forks source link

Avtentikacija #1

Open jaanos opened 7 years ago

jaanos commented 7 years ago

Trenutno imate na repozitoriju datoteko auth_public.r s podatki za prijavo z uporabnikom javnost. To boste vključili v končno aplikacijo, da jo bo lahko kdorkoli uporabljal. Seveda boste morali dati zadostne pravice uporabniku javnost - poglejte si nocmatic/prevozi#4.

V programih za uvoz namesto auth_public.r vključite datoteko auth.R, kjer naj ima vsak od vas svoje geslo za prijavo na bazo (za nastavitev zadostnih pravic si poglejte prejšnjo povezavo). To datoteko imate v .gitignore, tako da je git ne bo ponudil za dodajanje na repozitorij.

GalDrnovsek commented 7 years ago

Zdravo, ko poženem ukaz library(RPostgreSQL), mi javi, da ta paket ne obstaja. Ali veste, v čem je težava?

jaanos commented 7 years ago

Očitno paketa nimaš nameščenega. Pojdi pod Tools / Install Packages... in vpiši RPostgreSQL, da ga namestiš.

GalDrnovsek commented 7 years ago

Hvala, zdaj dela. Ne vem, zakaj včeraj RStudio ni našel tega paketa pod Install Packages.

GalDrnovsek commented 7 years ago

Ali mogoče veste, zakaj mi vedno, ko z R-om v SQL bazo uvozim kakšno tabelo, SQL naredi še eno prazno tabelo z istim imenom ? Koda je v datoteki SQL.r Hvala za pomoč.

jaanos commented 7 years ago

Ni mi sicer povsem jasno zakaj, ampak ustvarjanje tabele z dbSendQuery naredi tabelo z malimi črkami, čeprav je v imenu navedena tudi velika črka. To ne velja za dbWriteTable, ki navedene tabele ne vidi in zato ustvari novo (in jo napolni s podatki).

Najbolje bo torej, če imate tabele samo z malimi črkami. Nobene potrebe ni, da se ime vsake tabele začne s tabela - tabele naj bodo torej igralec, ekipa in tekma. Tabela vodstvo ni potrebna, saj lahko podatka o managerju in kapetanu daste kar v tabelo ekipa. Prav tako ni potrebe po tabelah za vsako ekipo posebej - podatke tako ali tako že imate v tabeli igralec. Poskrbite tudi za tuje ključe - pri igralcih naj bo ekipa tuji ključ na tabelo ekipa, pri tekmah pa naj bosta domača in gostujoča ekipa referenci na tabelo ekipa - vsakič kot ID-ji.

Pri ekipi naj bo kapetan tuji ključ na igralca - morda imate celo skupaj ID ekipe in kapetana kot tuji ključ na ustrezna stolpca v tabeli igralec (tako ne bo mogoče, da bi kakšna ekipa imela kapetana iz druge ekipe). Seveda to pomeni, da ne boste mogli vseh podatkov vnesti hkrati - lahko npr. kapetane pustite prazne (NULL, oziroma NA v R) pri uvozu ekip, pa jih potem nastavite (z ustreznimi stavki UPDATE) po uvozu igralcev. Druga možnost bi bila, da tuji ključ nastavite šele po vstavljanju podatkov (dodaste ga lahko z ALTER TABLE).

jaanos commented 7 years ago

Še to: sedaj imate na repozitoriju datoteko auth.R, ki pa je HTML datoteka in kot taka ni uporabna za povezavo na bazo. Seveda imate to datoteko navedeno v .gitignore, tako da niti ne bi smela biti na repozitoriju. Svetujem torej, da jo pobrišete (najbolje kar na GitHubu) - pri sebi pa naj ima vsak svojo datoteko auth.R, ki izgleda kot auth_public.r, le da je notri vaše uporabniško ime in geslo.

V SQL.r na začetku uvozite uvoz.r, a je ta datoteka v mapi uvoz. Da bo pravilno uvozilo brez potrebe po nastavljanju delovnega imenika, jo uvozite kot uvoz/uvoz.r.

GalDrnovsek commented 7 years ago

Hvala, Če napišem imena tabel povsod z malimi začetnicami (v dbSendQuery in dbWriteTable), mi javi napako, da stolpec Id pri nobeni tabeli ne obstaja (ne vem zakaj). Če pa zakomentiram tisti del z dbSendQuery, mi normalno uvozi vse tabele v bazo enkrat, ne glede na to, ali imajo malo ali veliko začetnico, vendar pa tam ne morem pisati tipov stolpcev in referenc ter glavnih in tujih ključev. Ali je najbolje, da vsako tabelo uvozim v bazo dvakrat (enkrat z dbSendQuery in enkrat z dbWriteTable) ?

jaanos commented 7 years ago

Tudi imena stolpcev se ustvarijo z malimi črkami - najbolje bo, da imajo tudi imena stolpcev v razpredelnicah same male črke. Tabele lahko tako ustvarite z dbSendQuery (stavek CREATE TABLE), podatke pa uvozite z dbWriteTable s parametrom append = TRUE.

GalDrnovsek commented 7 years ago

Hvala, zdaj dela. Še to: ali mislite, da je smiselno imeti pri vseh tabelah id kot glavni ključ ? Npr., pri tabeli tekma sta stolpca domača ekipa in gostujoča ekipa tipa TEXT, zato ne moreta biti referenci na id ekipe. Če pa v tabeli ekipa nastavim stolpec ekipa (kjer so imena ekip) za glavni kjuč, sta lahko pri tabeli tekma stolpca domača in gostujoča ekipa referenci na ime ekipe, vendar pa pri tabeli igralec stolpec ekipa ne more biti tuji ključ ne ime ekipe, ker pri vnosu podatkov javi napako, da je pri tabeli igralec kršena omejitev tujega ključa.

jaanos commented 7 years ago

Vsi glavni ključi naj bodo ID-ji, prav tako vse reference. Nočete namreč, da se podatki (v tem primeru imena ekip) podvajajo - zato jih nadomestite z ID-ji, ki zavzamejo manj prostora in jih lahko baza hitreje primerja.

Seveda bo potrebno ekipe uvoziti prej kot igralce, da bodo lahko ti imeli reference na ekipe. Kot sem že napisal, s s kapetani pojavijo krožne reference, kar pa rešite tako, da te nastavite šele, ko uvozite igralce (stolpec za kapetana torej ne sme imeti nastavljeno NOT NULL).

Da nadomestite imena ekip oziroma igralcev z njihovimi ID-ji, si pomagajte s funkcijo inner_join iz knjižnice dplyr, ki deluje tako za R-jeve razpredelnice kot tudi za tabele v bazi.