Ahoj, chtěl bych si udělat forum, ale bohužel mi nenapadla
lepší tabulka než tahle. Tak bych na ní chtěl slyšet váš názor,
popř. jak jí vylepšit. díky
id -- id témat a odpovědí
sekce -- udává kategorii (zde např. PHP, HTML)
nazev -- nazev tématu a pokud se jedná o odpověď tak id tématu ke kterému patří
autor -
datum - datum zadání tématu či odpovědi
zprava -
Fórum › MySQL
Forum
No, já bych to udělal asi takto:
kategorie
- kategorie_id
- nazev
tema
- tema_id
- kategorie_id
- nazev
prispevek
- prispevek_id
- tema_id
- autor_id
- datum
- zprava
Krom toho, že to jsou tři tabulky, komentář doufám netřeba :)
Nevypadá to špatně :-)
Tak to abych se začal učit spojování tabulek :-)
stejně už to 3 měsíce voddaluju.
řazení předpokládam
1. tabulka kategorie_id
2. tabulka kategorie_id
3. tabulka tema_id
takhle se mi to zdá asi nejrychlejší
To Michall: na tom se je co učit?
BTW: ještě bych to rozšířil o popis kategorie
To Michall: Ani tak nejde o spojování tabulek, jako třeba o to, jak bys v tvé verzi udělal SQL dotaz na výpis témat v jedné kategorii a co kdyby uživatel zadal název tématu jako číslo. Navíc si představ, že tam máš několik tisíc příspěvků a všechny je musíš procházet pokaždé, když vypisuješ seznam kategorií a i seznam témat v kategorii. Takhle to bude míň náročné a dotazy budou jednodužší.
K tomu řazení, chápu to tak, že tím myslíš, jak jsou seřazeny řádky přímo v databázi na disku?
A asi bych to celé ještě doplnil o pár vychytávek. Ke kategoriím bych přidal číselný pořadník, protože je asi nebudeš chtít řadit abecedně. Taky bych k tématu přidal datum posledního příspěvku, ať je podle toho může vypisovat, případně i autora příspěvku. Stejně tak bych tam přidal autora tématu. A dal bych uživatelům možnost editovat příspěvky, což je datum poslední editace navíc. A pro DeaLera ještě popis kategorie. Takže asi tak:
kategorie
- kategorie_id
- nazev
- popis
- poradi
tema
- tema_id
- kategorie_id
- nazev
- autor_id
- pos_datum
- pos_autor_id
prispevek
- prispevek_id
- tema_id
- autor_id
- datum
- editace
- zprava
A šlo by to doplňovat o nové funkce donekonečna :-) Třeba přístup do určité kategorie jen pro registrované členy, seskupení několika kategorií do větších tematických sekcí, označení příspěvků moderátorem jako spam s tím, že ho vidí jen autor příspěvku ;-) Atp.
To řazení se myslel podle, kterého sloupce se budou záznamy řadit, protože kdybych
třeba tabulku tema řadil podle tema_id, tak bude pomalejsi než když bych jí řadil podle
kategorie_id (všechny témata pro určitou kategorii budou u sebe a nebude se muset
prohledávat celá tabulka). Jetli tu plácam nesmysly, tak mě omluvte :-D
A vylepšovat funkce taky budu, ale ted potřebuju základ fóra, abych měl co vylepšovat :-)
Myslim ze chyba velmi pouzivana funkcia fora a to moznost odpovdat na nejaky prispevok... takze este treba pridat nejaky stlpec "parent_id", aby si vedelo ktory prispevok na co odpoveda...
To dalaman: to by bylo vhodné v případě možnosti stromového zobrazení, jinak je to myslím k ničemu
dalaman píše:#
# ...treba pridat nejaky stlpec "parent_id", aby si vedelo ktory prispevok na co odpoveda...
Velice zajímavý postřeh ;-) s tím souvisí i možnost optimalizovat počet dotazů do databáze, protože si myslím že 90% programátorů by to napsalo jako rekurzivní volání databáze... když k tomu připočteme absenci 'connection pooling', tak je to samozřejmě velmi pomalé (jako nedostatečné řešení se to ovšem projeví až při větší návštěvnosti).
TIP: Možností je přenést rekurzivní volání databáze na XSL transformaci. Například Oracle umí XML generovat přímo, v MySQL by šlo použít stored proceduru nebo si vytvořit PHP kontroler, který převede data z databázového kurzoru do XML.
No já to pravě řeším taky. mám následující tabulku:
id integer primary key auto_increment,
datum date,
cas time,
autor varchar(25),
reakce smallint,
vazba tinyint,
predmet varchar(50),
prispevek text)";
reakce značí číslo kolikrát na tento přispěvek bylo reagovano, vazba znací u každého řádku tabulky na který řádek je to reakce. Priklad:
Jestli reaguji na řádek číslo 10, tak na řádku číslo 10 nastavím hodnotu reakce na 1(pomoci incrementu aby číslo dávalo počet reakcí) a na řádku, kde je vlastní reakce(třeba 30) nastavim vazbu na cislo 10(ID řádku na který je danná reakce). Nejsem si jistý jestli je to dobrý způsob, ale v každým případě vím, že nejsem schopný udělat výpis tak aby byly všechny reakce pěkně za sebou. Chci vytvořit něco podobného jak je na www.formule1.cz. Můžete poradit jestli dělám neco špatně? nebo by jste to udělaly jinak? Zatím mě jde pouze o setřídění příspěvků, rozšiřující pole tabulky dodám a upravým až budu schopny ji setřídit.
Jakým způsobem ukládat "hierarchické" struktury v databázi je popsáno dobře v článku na Intervalu:
http://interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-databazich/
Záleží samozřejmě i na databázi, kterou máte. Např. Oracle v sobě podporu hierarchických dotazů obsahuje (PostgreSQL po doplnění patche také, viz Root.cz).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Moderátoři diskuze