Skočiť na obsah

Databáza


sedimin

Odporúčané príspevky

mam jednu otazku pre ludi, ktori maju s databazami vacsie skusenosti, ako ja..

 

Predstavte si, ze mate webovu aplikaciu, ktora obsahuje nejake clanky. Kazdy z clankov obsahuje niekolko verzii (revizii), z ktorych je jedna aktualna. Je to tak, ako na mediawiki (wikipedia a podobne projekty).

 

Dajme tomu, ze to reprezentujem pomocou dvoch tabuliek v databaze :

 

Clanky (id, aktualne_id_revizie)

Revizie (id, id_clanku, text)

 

Ako vidite, je tam dvojity odkaz - clanok odkazuje na reviziu a revizia na clanok. Neviem, ako sa tohto zbavit -

aktualne_id_revizie pouzivam na to, aby som vedel vybrat aktualne texty clankov

a id_clanku pouzivam na to, aby som napriklad mohol zobrazit vsetky revizie daneho clanku)

 

Napadlo ma riesenie, ze by tabulka clanky obsahovala len (id) stlpcek

a revizie: (id, id_clanku, flag_aktualna_revizia, text) - pricom stlpec flag_aktualna_revizia by mal dve mozne hodnoty (napr {0, 1}), ktore by specifikovali, ci tato revizia je aktualnou reviziou pre svoj clanok

 

ale nemoze tu vzniknut nejaka anomalia pri aktualizovani databazy? teda dalo by sa na databazovej urovni osetrit, aby neboli dve revizie nastavene ako aktualne?

(mozno trigger pred vkladanim riadku / updatom riadku v tabulke revizii - ktory by vsetkym reviziam s rovnakym id_clanku nastavil flag_aktualna_revizia na 0 a az potom spravil insert/update)..

 

ak niekto nieco viete, skuste pomoct :lol:

Odkaz na príspevok
Zdieľať na iných stránkach

  • Odpovedí 4
  • Vytvorené
  • Posledná odpoveď

Top prispievatelia v tejto téme

  • sedimin

    3

  • Darkman

    2

Top prispievatelia v tejto téme

problem teraz je, ze ak by som chcel zmazat v sucasnom systeme

(clanky: id, id_aktualnej_revizie) (revizie: id, id_clanku, text)

vsetky revizie, ktore nie su aktualne, tak ako by som to spravil cisto pomocou sql prikazu?

napada ma riesenie pomocou kurzora,

v ktorom by som presiel kazdy clanok a zmazal vsetky revizie ktore k nemu patria a sucasne nie su aktualne

nieco ako v pseudo-sql

 

for each @clanok in (select * from clanky)

delete from revizie where id_clanku = @clanok[id] AND id != id_aktualnej_revizie

 

toto bude operacia, ktoru by som spustal manualne, z casu na cas, takze nie je dolezita rychlost atd

 

skor mi ide o to, ze ci nie je aj nejake jednoduchsie riesenie, bez pouzitia, neviem zatial, ako si mysql poradi s kurzormi a hlavne ci mi ich webhosting povoli pouzit,

povodne mali zakazane aj pohlady...

Odkaz na príspevok
Zdieľať na iných stránkach

Vytvorte si účet alebo sa prihláste, aby ste mohli písať príspevky

Ak chcete odoslať príspevok, musíte byť členom

Vytvoriť konto

Zaregistrujte si nový účet v našej komunite. Je to ľahké!

Zaregistrovať si nové konto

Prihlásiť sa

Máte už konto? Prihláste sa tu.

Prihlásiť sa teraz

×
×
  • Vytvoriť nové...

Dôležitá informácia

Táto stránka používa súbory cookies, pre zlepšenie používania stránok tohto webu. Pre viac informácií kliknite sem. Ďalšie informácie nájdete na stránke Zásady ochrany osobných údajov