Strana 2 z 2

Re: Databáza - relácia 1:1

Napísané: 30 Mar 2021, 18:02
od používateľa Radus
Pekné, tak to už hej.
Ešte by som mal otázku na profesionála. Asi som si vypestoval zlý zlozvyk, nepoužívam totiž pre spájanie tabuliek JOIN. Keď potrebujem spojiť tabuľky robím to napr: SELECT d.dep FROM USER us, DEPARTMENT d WHERE us.id=d.userId AND userId = xxx, napr, to som len tak z hlavy.
Na koľko je takýto zápis zlý? Funguje rýchlejšie ak použijem JOIN?
Vďaka

Re: Databáza - relácia 1:1

Napísané: 30 Mar 2021, 20:17
od používateľa pocitujlasku
nie je to zle, len tam nesmies zabudnut to prepojenie.
ja pouzivam join, lebo sa mi zda krajsi zapis a hned vidim ako je tabulka prepojena. Navyse casto pouzivam skor left join, tak aby som mal jednotny zapis.
inac fajn vychytavky su aj temporary table a CTE.

Re: Databáza - relácia 1:1

Napísané: 30 Mar 2021, 20:41
od používateľa Radus
Ja sa v tomto považujem skôr za začiatočníka. Temporary table používam pri vnorených príkazoch, napríklad pre SELECT DISTINCT... a potom z toho ďalší SELECT. CTE mi nič nehovorí...ale vyzerá to zaujímavo čo som narýchlo vygooglil. Musím poštudovať. Ďakujem.

Re: Databáza - relácia 1:1

Napísané: 31 Mar 2021, 09:08
od používateľa pocitujlasku
na to ti staci subselect. CTE je super, len sa da pouzit iba v jednom hlavnom selecte. a taky cursor je fajn, je to vlastne obdoba foreach.
ja databazy ako take riesim vyse 10 rokov (oracle, firebird/interbase, mysql), a mssql poslednych 5 rokov.

Re: Databáza - relácia 1:1

Napísané: 31 Mar 2021, 09:48
od používateľa JohnnyElektro
Firebird/interbase je bomba, prisiel prvy s triggermi. Ja som si s jednym "on connection" triggerom zahatal pristup do databazy pretoze vyzadoval specificke heslo na sysdba ucet roota :potlesk:
Taketo zabezpecenie ostatne db nevedeli.
Na fb som spravil C# wrapper, ale uz asi je nieco take dostupne, je to uz 10 rokov. Ale ak by niekto chcel ten C# wrapper, zadarmo mu ho dam, len aby ho vytestoval, by som sa potesil, kontakt cez spravu ked tak.

Re: Databáza - relácia 1:1

Napísané: 31 Mar 2021, 09:55
od používateľa dan21
database trigger poznam uz hodne davno. Taky Informix to mal uz par desatroci dozadu :-)

Re: Databáza - relácia 1:1

Napísané: 31 Mar 2021, 10:59
od používateľa pocitujlasku
JohnyElektro: neviem, ci bol prvy, ale vela veci mala nie velmi stastne riesene. napr. procky, ked musis deklarovat aj vystupy a nevie vratit viac datasetov. Alebo pri par milionoch zaznamov to padalo. A peklo zvane transakcie a obcasne vytuhnutie, to bola klasika.
My sme to pouzivali, lebo stacilo pridat do projektu jednu dll a pre jednouzivatelsky pristup si nemusel instalovat cely engine. A navyse, kedze projekty boli v Delphi, a fb robila ta ista firma, tak implementacia bola hracka.

Re: Databáza - relácia 1:1

Napísané: 31 Mar 2021, 11:43
od používateľa JohnnyElektro
Fb sa vie odstavit, hlavne transakcie su velmi narocne, avsak su pomocky ako prepared statementy, tie som videl ako idu na 1000nasobok insertov a pod.

Re: Databáza - relácia 1:1

Napísané: 31 Mar 2021, 11:49
od používateľa pocitujlasku
my sme to mali v systeme, kde isli desiatky dotazov za sekundu, ale ked sme presli na interbase, tak to uz bolo o niecom inom. 3/4 roka sme ani netukli do systemu, lebo bezal ako hodinky.

Re: Databáza - relácia 1:1

Napísané: 31 Mar 2021, 23:25
od používateľa Radus
No, spomínate tu zase kopu cudzích slov a ktorých nemám šajnu :) Tak mi treba :P
Dnes som mal takú perličku, mám spravenú reláciu v jednej tabuľke. Napr - zoznam užívateľov, tie majú vlastné id, ale majú aj parameter ktorý určuje napr ich šéfa, teda šefId, a táto relácia sa zase spatne odkazuje na tú istú tabuľku. Najvyšší šéf má ako šéfId sám seba :) To je len príklad. Ako na jeden select dostanem meno šéfa pomocou užívateľského id? Hútal som kus nad tým, ale dosť som sa ponáhľal, tak som to zbúchal cez dva selecty, ale určite sa to dá aj jedným...však? :)
//a, už som aj prišiel na odpoveď:

Kód: Vybrať všetko

SELECT ub.name from USER ua, USER ub WHERE ua.id = ub.sefId AND ua.id = xx

Re: Databáza - relácia 1:1

Napísané: 01 Apr 2021, 09:26
od používateľa epto
Trochu odbocim,

databazove systemy sme mali na skole, celkom ma to bavilo, teda az na profesorku a jej sposob vyucby...
Ale co sa chcem opytat:
Priklad - mate databazu ludi s roznymi udajmi o nich (vek, vyska, vaha, farba oci, vlasov, bydlisko...)
Zadanie bolo, vyhladat v tabulke rysavych muzov vo veku od 30 do 50 rokov, ktori vedia po anglicky, nie su z BA a su lavaci. Vysledok zotriedit podla ich vysky.
Odpoved bolo treba napisat do formulara na prvy krat. Otazka za 6 bodov a vyhodnocoval ju pocitac. Cize, ak dostal z vasho prikazu presne to, co ocakaval, mali ste 6 bodov. Ak mu vasa odpoved vyhodila nieco ine, bolo to za nula.
Tychto otazok bolo asi 6 co dava dokopy 36 bodov co je uz tretina z maxima. Samozrejme vyhodnotenie som mal vsetky za 0 pretoze vsade bola chybicka (OK, jednu odpoved som totalne domrvil). Profesorke som argumentoval s tym, ze vsak nikto to neda na prvy sup (okrem profikov) a ze postune by som ku vysledku dosiel, ak by som mal moznost zadavat prikazy postupne a pozerat, co mi databaza vypluje. Skoro sme sa pohadali ale nakoniec som jej len na papier pisal ako by som postupoval. Skoncilo to tak, ze ak by som za kazdy ten priklad dostal 4-5 bodov, zo skusky by som dostal B, no nechcela mi dat lepsie ako E.

Tak sa vas, profikov, chcem, opytat ze ak vytvarate request na data podla viacerych parametrov, ci to vzdy date na prvy krat bez chyby alebo sa ku zelanemu vysledku dopracujete postupne.

Re: Databáza - relácia 1:1

Napísané: 01 Apr 2021, 10:41
od používateľa pocitujlasku
epto: to mi pripomina pohovor u mimozemstana, tiez chceli, aby som pisal na papier.
v inej firme ma posadili za pocitac a povedali: tu je zadanie a ries. samozrejmostou bol pristup na internet. Neriesili, ci to pisem z hlavy, ale to, ako rychlo to viem vyriesit a ako efetivne - naco vymyslat koleso, ked v diskusnych forach nieco podobne uz riesili.

A odpoved na tvoju otazku: urcite nie. Nieco vies z hlavy, ak to casto pouzivas, ale ja strasne vela veci riesim postupne. Robim ciastkove selecty, aby som dostal co potrebujem a potom hladam moznosti, ako to co najefektivnejsie pospajat. Casto to skonci tak, ze je to nakoniec uplne iny select :)
Preto v normalnych firmach maju 3 prostredia. DEV/TEST/PROD -
na DEV sa hras, skusas, proste je to tvoj piesok. ked domrvis, nic sa nedeje, obnovis z test prostredia.
TEST - to uz je funkcny celok, kde to testuju testeri, a kde odchytavaju skor chyby, co sa tyka dat, alebo logiky
PROD - to je produkcia, ostra db

Re: Databáza - relácia 1:1

Napísané: 01 Apr 2021, 10:50
od používateľa pocitujlasku
Radus: najvyssi sef nemoze mat sefa ma sefa, lebo to by si zacyklil. on tam bude mat null.
Stromovu strukturu v db som riesil, bolo to sialenstvo, ale dal som to. a potom len stacilo naplnit tabulku, spustit procku a ta vratila krasne stromove data (vyse 100 udajov a bezne tak 3-4 vnorenia)

Kód: Vybrať všetko

SELECT ub.name
FROM USER ua
LEFT JOIN USER ub ON ua.sefId=ub.id
WHERE ua.id=xx
alebo subselect

Kód: Vybrať všetko

SELECT ub.name
FROM USER ub 
WHERE ub.id=(SELECT ua.sefId FROM USER ua WHERE ua.id=xx)

Re: Databáza - relácia 1:1

Napísané: 01 Apr 2021, 13:09
od používateľa dan21
Este pekna vec su kaskadne operacie :-)

Re: Databáza - relácia 1:1

Napísané: 01 Apr 2021, 13:33
od používateľa Radus
@pocitujlasku: Nevedel som že FK môže mať hodnotu aj null. Ale áno, máš pravdu, keby som nato poštval rekurzívnu funkciu, tak by sa to zacyklilo, ale v mojom prípade ktorý som riešil, mohlo dôjsť aj k tomu že užívateľ bude mať priradený daný parameter aj sám k sebe - príklad ktorý som uviedol bol len fiktívny. Ale čo už, vyznáš sa, čo dodať, klobúk dole...

Re: Databáza - relácia 1:1

Napísané: 01 Apr 2021, 13:58
od používateľa pocitujlasku
to su roky praxe, nic ine. Navyse ma bavi vymyslat kadejake vychytavky. Na fk je super vec aj tie kaskady. zmazes zaznam v hlavnej tabulke, tak ti automaticky zmaze ten zaznam vo vsetkych, kde je ten dany fk :)