Semestrální práce "Diskusní fórum"

Logo CVUT-FEL

Záhlaví


Jméno studenta: David Šafránek
Studijní skupina: 442
Semestr, školní rok: zimní 2004/2005
Katedra: počítačů (K 13136)
Předmět: Databázové systémy (36DBS)
Seminář: úterý 14:30
Cvičící: Ing. Martin Molhanec, CSc.
Přednášející: Ing. Ivan Halaška
Datum: 24.10.2004

Analytická část

Zadání (odborný článek)

Zde předkládanou práci jsem vytvořil samostatně s využitím těchto informačních zdrojů: [použitá literatura]

Projekt je zaměřen na zprostředkování debaty mezi uživately, pomocí textových příspěvků. Příspěvek může obsahovat také přiložený soubor, či mít v hlavičce identifikační ikonu. Uživatel může být nepřihlášený (neregistrovaný), nebo se může zaregistrovat, zadáním několika osobních údajů, jako jméno, heslo, automaticky se vytvoří datum zřízení konta a identifikační číslo. Jeho role pak bude administrátor, moderátor daného fóra, nebo běžný uživatel. V diskusi jsou různá fóra. Přidávat a upravovat je může administrátor, ten také může modifikovat uživatele, přidělovat práva pro moderování daného fóra, měnit fóra, modifikovat zprávy ve fórech, a nebo cokoliv vyhledat.

Komunikace s databází může pro všechny probíhat přes http protokol.

Vytipování uživatelských rolí

Administrátor:
Přihlášení/odhlášení
Vytvoření/smazání uživatele
Vytvoření/smazání fóra
Vytvoření/smazání zprávy ve fóru

Uživatel:
Přihlášení/odhlášení
Vytvoření/smazání vlastní zprávy ve fóru

Neregistrovaný uživatel:
Vytvoření zprávy ve fóru

Údržba:
Smazání nepoužitých položek v tabulce Soubor
Korektnost datu

Scénáře

E-R schéma úložiště dat


E-R schéma
Obrázek E-R schématu dle Martin notace - Datový soubor programu SUniCaT

SQL skripty

Pro vytvoření databáze
Pro počáteční naplnění databáze

SQL dotazy

Česky formulovaný dotaz SQL dotaz Sejmutá odezva na dotaz
Kolik je v dané diskusi (Novinky) příspěvků? SELECT Y.Nazev,COUNT(Id)
FROM Prispevek X, Forum Y
WHERE X.ForumId = Y.ForumId
GROUP BY X.ForumId
HAVING Nazev='Novinky'
Nazev COUNT(Id)
Novinky 3
Vypiš seznam uživatelů, a počet jejich přízpěvků ve všech fórech seřazeno od nejvíce přispívajících SELECT Y.Jmeno, COUNT( X.Id ) AS cnt
FROM Prispevek X, Uzivatel Y
WHERE X.UzivatelId = Y.Id
GROUP BY X.UzivatelId
ORDER BY cnt DESC, Jmeno ASC
Jmeno cnt
guest 18
David 6
Lucka 2
ID=9 1
New 1
NOVY 1
Vypiš 10 příspěvků v pořadí od nejnovějšího, a k nim autora, datum vložení a název fóra, ke kterému patří SELECT X.Text, X.Datum, Y.Jmeno, Z.Nazev
FROM Prispevek X, Uzivatel Y, Forum Z
WHERE X.UzivatelId=Y.Id AND X.ForumId=Z.ForumId
ORDER BY Datum DESC
LIMIT 0, 10
Text Datum Jmeno Nazev
bla 2005-01-09 19:16:19 guest Novinky
:-) 2005-01-09 01:01:58 guest Novinky
fdf 2005-01-09 01:01:33 guest Novinky
& 2005-01-09 01:01:07 guest Novinky
½ 2005-01-09 01:01:02 guest Novinky
½ 2005-01-09 01:00:47 guest Novinky
fd 2005-01-09 00:50:34 guest Novinky
Mimi je ale sikovne!!!! 2005-01-09 00:49:33 David Novinky
gfdh 2005-01-09 00:48:28 Lucka Novinky
hgfh 2005-01-09 00:48:04 New Novinky
Vypiš všechny uživatele a datumy jejich založení SELECT Jmeno, Registrovan
FROM Uzivatele
Jmeno Registrovan
David 2004-10-20
Petr 2004-10-21
Lucka 2004-10-28
Martin 2004-11-22
Vypiš všecny přílohy vyskytující se alespoň 2x SELECT Y.*,COUNT(X.SouborId) AS cnt
FROM PrispevekSoubor X, Soubor Y
WHERE X.SouborId = Y.Id
GROUP BY X.SouborId
HAVING cnt >= 2
Id Data Datum Velikost cnt
1 Foto.jpg 2004-11-20 50248 2
2 Bigdata 2004-10-15 1584425 3
Vypiš z jaké IP adresy je nejčastěji přístup SELECT X.*, COUNT(*) AS cnt
FROM Prispevek X
GROUP BY X.IP
ORDER BY cnt DESC
LIMIT 0, 1
Id Text Datum UzivatelId ForumId IP cnt
27 fdsfsdfdg 2005-01-08 17:38:17 0 0 147.32.124.213 21
Přidej nového uživatele INSERT INTO Uzivatel (Jmeno, Heslo, EMail, Registrovan)
VALUES ('Novy3', '5578d3582d6ef81e4171ae4fa7770889', 'x@y.cz', '2003-12-24')
Inserted rows: 1
Inserted row id: 23 (Query took 0.0007 sec)
Kolik příspěveků je průměrně ve fóru? SELECT AVG(cnt) AS avg FROM
(
SELECT Y.Nazev, COUNT(*) AS cnt FROM Prispevek X, Forum Y
WHERE X.ForumId = Y.ForumId
GROUP BY X.ForumId
)
cnt
7.33
Jaká je průměrná velikost všech příloh? SELECT AVG(X.Velikost) AS avg
FROM Soubor X, PrispevekSoubor Y
WHERE X.Id = Y.SouborId
avg
970754.2000
Jaká je průměrná velikost použité přílohy? SELECT AVG(X.Velikost) AS avg
FROM Soubor X
avg
326969.0000
Vypiš jména uživatelů začínající na R SELECT Jmeno
FROM Uzivatel
WHERE Jmeno LIKE 'R%'
Jmeno
RE
RER

Implementace několika funkcí vybraných z analýzy

Testovací fórum

Závěr

Pro vývoj bylo použito textového editoru, pro grafický E-R model schopného programu SUniCat. Stránky odpovídají normě HTML 4.0 Transitional. Jsou tvořeny staticky, stránky s formuláři jsou vytvoženy s pomocí PHP.

Problémy při vypracování:

  1. Při vkládání do tabulky ikon textové hodnoy :-\ došlo k chybě, chybu jsem odstranil změnou zpětného lomítka na normální :-/.
  2. Do školní databéze Oracle nešlo vkládat datum ve formátu 'YYYY-MM-DD' muselo se požít funkce to_date('2004-10-20','YYYY-MM-DD') nebo nastaveného formátu 24-OCT-2004.
  3. Při nastavování sloupce klíčového atributu Id, byl problém s převodem dat.
  4. Stabilní verze MySQL (4.0.20) nepodporuje subdotazy, ty jsou podporovány až od verze 4.1.

Použitá literatura

[1] Doc. RNDr. Jaroslav Pokorný, CSc., Ing. Ivan Halaška: Databázové systémy, Česká informatická společnost, 2002
[2] Doc. RNDr. Jaroslav Pokorný, CSc., Ing. Ivan Halaška: Databázové systémy - Vybrané kapitoly a cvičení, ČVUT 1997
[3] MySQL
[4] PHP
[5] phpMyAdmin
[6] w3.org