Autor Zpráva
han5vk
Profil
Zdravím, vopred sa ospravedlňujem ak si pomyslíte že je toto ďalšia nezmyselná téma ako iné, no nejako sa z toho neviem sám vysomáriť.

Skladal som si vlastný RS už dlho, než som prišiel na to že je to vlastne celé oničom a v kóde som mal taký chaos, že som potreboval pol hodinu na pochopenie jednej vetvy ifu. Rozhodol som sa teda ho prekopať, zakomponovať OO PHP a celé to spraviť prehľadnejšie. S prehľadnosťou príchádza aj návrh tabuliek databázy. Kedže robím systém odznova, je mi jedno ako to bude, len aby to bolo najefektívnejšie. Takže,

1, je dobré mať jednu tabuľku používateľov, pričom tam mám len základné veci ako nick, mail, heslo a prípadne ďalšie jeho osobné údaje

2, a mať potom tabuľku logov, kde zapíšem keď napríklad napíše článok a teda nepotrebujem priradzovať jednotlivým článkom idečka autorov (čo by bolo ajtak problematické pri úpravách a verzovaní inými autormi)

3, články mať v jednej tabuľke o stĺpcoch id, nazov, text, id_rubriky a zmazane (pričom pri zmazanom článku by bola možnosť ho v určitej lehote z "koša" obnoviť)

4, základné info o rubrikách mať tiež v jednej tabuľke, teda názov rubriky, nejaký jej popis od autora a tiež možnosť ju len hodiť do koša nastavením zmazane=1 (je potrebné prepisovať tento stĺpček aj všetkým článkom v nej?)

5, v tabuľke logy uchovávať v podstate všetky udalosti ako registrácie používateľov, pridané články, rubriky, zmazanie, upravenie, nové verzie článkov a podobne

6, mať ďalšiu špecálnu "slovníkovú" tabuľku pre prípad rôznych jazykových verzií RS? Myslím tým niečo ako v dvoch stĺpcoch priradzovať napríklad takto : "chyba205"-"nenašla sa vami hľadaná rubrika" a potom ďalšiu tabuľku, napríklad slovnikEN, kde by bolo napríklad "The category you were looking for wasn't found.", pričom v PHPku by som nehardcodoval hlášky, ale ťahal ich z DB, čo mi ale zasa príde náročnejšie na počet dotazov, ajkeď je to očividne ľahšie upraviteľné pre rôzne úpravy hlášok či jazykovej verzie.

?

Pýtam sa, pretože nechcem začať na ieočm pracovať a potom to msieť celé preprábať, elbo zistím že je problém takto ťahať dáta. Ide mi o to čo najviac zmenšiť veľkosť databázy, teda napríklad neukladať do logov celé názvy rubrík ale iba idečka a podobne. Avšak potom napríklad pri výpise logov potrebujem dva dotazy, jeden na vytiahnutie riadku z logu a druhý na nájdenie názvu rubriky.

Nieco som si studoval a vyzera to tak, ze na pracu s DB pozijem PDO a prepared statements. Je nieco zle na tejto volbe o com by som mal vediet?

Snažím sa nájsť čo najoptimálnejší kompromis, a dúfam že mi tu niekto skúsenejší pomôže. Veľmi pekne ďakujem.
juriad
Profil
Domnívám se, že to není vhodné.
Měj klasicky u článku autor_id odkaz na id uživatele, který ho přidal.

Jazyky prostředí webových stránek bych spíše než přes databázi řešil přes soubory; jeden jazyk = jeden soubor
každý řádek bude ve tvaru: klíč = hodnota
Soubor si načteš celý a přetvoříš si ho do pole; pokud bude mít pár set hodnot, mělo by to být svižné. Stejně velkou část použiješ pokaždé.
A napíšeš si službu, které předhodíš klíč a ona ti vrátí překlad v aktuálním jazyce.

Pokud jde o překlady článků nebo jiných objektů, které vkládá sám uživatel, a tedy se mění, pak (snad) jedině přes databázi.
O tom píše Jakub Vrána.


Žádné dva dotazy bys nepotreboval, propojil bys záznamy přimo v databázi; nauč se používat JOINy.
PDO klidně používej, postará se o veškeré escapování.
han5vk
Profil
Dakujem za objasnenie, avsak neviem ci bude stacit id autora u clanku. Ako som spominal, budem potrebovat zaznamenat si aj upravy ci verzovanie, takisto aj cas. A to uz mi nepride vhodne uchovavat v tabulke s clankami. Radsej si nastudujem joiny a vytiahnem zaroven clanok aj s prislusnymi zaznamami z logov. Co vy na to?

Sice je to trocha mimo od databazy, ale nechcem zakladat novu temu. Neviem ako riesit pristup k DB v phpku. Mam napriklad triedu clanok a potrebujem v nej v DB upravit jeho text. Pride mi dost nevhodne predavat jej napr. V konstruktore objekt PDO. Preto rozmyslam nad nejakou triedou Data, ktora by obsahovala PDO objekt a trieda clanok by zavolala jej staticku metodu UpravTextClanku s parametrami id clanku a upraveny text a teda trieda Data by to ulozila do DB a vratila true, alebo hodila exception.. Ako sa toto inak bezne riesi? Robim s OO v phpku prvykrat, tak prepacte za primitivne otazky.

Dakujem.

Po prejdení nejakých tutoriálov a podobných záležitostí som sa utvrdil v používaní PDO s prepared statements, pričom spojenie a všetky dotazy bude vykonávať statická trieda Databaza. Čo sa týka prvej otázky, ukladania id autorov, ostanem asi pri svojom spôsobe, využijem ale joiny a nie viacero dopytov. Ak niekoho napadne ešte nejaký dišputát voči otázkam v [#1] či inde, pokojne nech to napíše, kým ešte nemám postavený systém...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0