Projekt stanowi podstawę bazodanową dla projektu realizowanego z przedmiotu Technologie i Programowanie WWW. Link do wersji roboczej serwisu
Celem projektu jest wykonanie oficjalnej strony internetowej dla istniejącej partii politycznej. Nasz projekt to system CMS, który będzie umożliwiał łatwe i szybkie zarządzanie pojawiającymi się na stronie informacjami przez uprawnionego do tego redaktora. Oczywiście wszystkie informacje będą przechowywane w relacyjnej bazie danych. Nasz portal ma przede wszystkim realizować funkcję informacyjna dla osób zainteresowanych działalnością krakowskiego oddziału UPR. Celem portalu będzie przyciąganie ludzi, informowanie ich o istotnych wydarzeniach dotyczących partii, przedstawienie idei głoszonych przez UPR, stopniowe zdobywanie członków, sympatyków, a także elektoratu wyborczego. Strona internetowa ułatwiłaby na pewno organizowanie się sympatyków chcących uczestniczyć w różnych spotkaniach, prelekcjach, happeningach, itp. organizowanych przez oddział krakowski UPR.
Swoją stronę internetową posiada każda szanująca się partia polityczna. Istnieją też dziesiątki różnych stron oddziałów regionalnych czy młodzieżowych różnych partii. Oczywiście także Unia Polityki Realnej posiada swoją stronę główną, jak i kilka stron oddziałów regionalnych. Niestety zdarza się, że nie są one wykonane w sposób zbyt profesjonalny i wyglądają bardzo amatorsko. Czołowe polskie partie mogą przeznaczać ogromne środki na utrzymanie swoich stron przez co są one dość rozbudowane i wykonane w pełni profesjonalnie. Naszym celem jest stworzenie witryny na równie wysokim poziomie, zarówno merytorycznym jak i technicznym. Partie polityczne tworzą swoje strony zarówno po to, aby przyciągać nowych sympatyków i wyborców, jak i na bieżąco informować o działaniach i wydarzeniach wewnątrz partii swoich członków i sympatyków. Strony tego typu mają przede wszystkim charakter informacyjny, internauci szukają na nich programów wyborczych, informacji władzach partii, podejmowanych działaniach, akcjach, itp.
Nasz projekt to system CMS, który będzie umożliwiał łatwe i szybkie zarządzanie pojawiającymi się na stronie informacjami przez uprawnionego do tego redaktora. Oczywiście wszystkie informacje będą przechowywane w relacyjnej bazie danych.
Serwis będzie projektowany w języku php z użyciem Zend Framework przy wykorzystaniu relacyjnej bazy danych MySQL. Przewidujemy następujące podzespoły:
AKTUALNOSCI
INFORMACJE
KATEGORIE
KOMENTARZE
KSIAZKI
LINKI
MEDIA
NEWSLETTER
SPOTKANIA
TEKSTY
UZYTKOWNICY
CREATE TABLE IF NOT EXISTS aktualnosci ( id_aktualnosci INT(11) NOT NULL AUTO_INCREMENT, naglowek VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, zawartosc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, data_publikacji DATE NOT NULL, godzina_publikacji TIME NOT NULL, autor INT(11) NOT NULL, zdjecie mediumblob, PRIMARY KEY (id_aktualnosci), KEY autor (autor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=66 ; CREATE TABLE IF NOT EXISTS informacje ( id_informacji INT(11) NOT NULL AUTO_INCREMENT, typ VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL, autor INT(11) NOT NULL, zawartosc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, data_modyfikacji DATE DEFAULT NULL, godzina_modyfikacji TIME DEFAULT NULL, PRIMARY KEY (id_informacji), KEY autor (autor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; CREATE TABLE IF NOT EXISTS kategorie ( id_kategorii INT(11) NOT NULL AUTO_INCREMENT, nazwa VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, opis text CHARACTER SET utf8 COLLATE utf8_polish_ci, autor VARCHAR(100) DEFAULT NULL, PRIMARY KEY (id_kategorii) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ; CREATE TABLE IF NOT EXISTS komentarze ( id_komentarza INT(11) NOT NULL AUTO_INCREMENT, autor INT(11) NOT NULL, zawartosc text CHARACTER SET utf8 COLLATE utf8_polish_ci, DATA DATE DEFAULT NULL, godzina TIME DEFAULT NULL, id_obiektu INT(11) NOT NULL, typ VARCHAR(50) NOT NULL, PRIMARY KEY (id_komentarza), KEY autor (autor), KEY id_obiektu (id_obiektu) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ; CREATE TABLE IF NOT EXISTS komentarz_obiekt ( id_komentarza INT(11) NOT NULL, id_obiektu INT(11) NOT NULL, typ VARCHAR(20) NOT NULL, PRIMARY KEY (id_komentarza,id_obiektu), KEY id_obiektu (id_obiektu), KEY typ (typ) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS ksiazki ( id_ksiazki INT(11) NOT NULL AUTO_INCREMENT, nazwa VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, opis text CHARACTER SET utf8 COLLATE utf8_polish_ci, autor INT(11) DEFAULT NULL, kategoria INT(11) DEFAULT NULL, PRIMARY KEY (id_ksiazki), KEY autor (autor), KEY kategoria (kategoria) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ; CREATE TABLE IF NOT EXISTS linki ( id_linku INT(11) NOT NULL AUTO_INCREMENT, autor INT(11) NOT NULL, nazwa VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, opis text CHARACTER SET utf8 COLLATE utf8_polish_ci, link VARCHAR(100) NOT NULL, logo VARCHAR(100) NOT NULL, data_dodania datetime NOT NULL, PRIMARY KEY (id_linku), KEY autor (autor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; CREATE TABLE IF NOT EXISTS media ( id INT(11) NOT NULL AUTO_INCREMENT, link text NOT NULL, nazwa VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL, autor INT(11) DEFAULT NULL, data_dodania datetime NOT NULL, PRIMARY KEY (id), KEY autor (autor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; CREATE TABLE IF NOT EXISTS newsletter ( id INT(11) NOT NULL AUTO_INCREMENT, tytul VARCHAR(120) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, tresc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, data_wyslania datetime NOT NULL, autor INT(11) NOT NULL, PRIMARY KEY (id), KEY autor (autor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; CREATE TABLE IF NOT EXISTS organizacje ( id_organizacji INT(11) NOT NULL AUTO_INCREMENT, dodal VARCHAR(50) NOT NULL, nazwa VARCHAR(50) NOT NULL, opis text, link VARCHAR(100) NOT NULL, logo VARCHAR(100) NOT NULL, data_dodania datetime NOT NULL, PRIMARY KEY (id_organizacji) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; CREATE TABLE IF NOT EXISTS spotkania ( id_spotkania INT(11) NOT NULL AUTO_INCREMENT, nazwa VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, opis text CHARACTER SET utf8 COLLATE utf8_polish_ci, data_dodania datetime DEFAULT NULL, autor INT(11) DEFAULT NULL, PRIMARY KEY (id_spotkania), KEY autor (autor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; CREATE TABLE IF NOT EXISTS teksty ( id_tekstu INT(11) NOT NULL AUTO_INCREMENT, naglowek VARCHAR(120) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, tresc text CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, autor INT(11) NOT NULL, zaakceptowano tinyint(4) NOT NULL DEFAULT '0', data_dodania datetime NOT NULL, PRIMARY KEY (id_tekstu), KEY autor (autor) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; CREATE TABLE IF NOT EXISTS uzytkownicy ( id_uzytkownika INT(11) NOT NULL AUTO_INCREMENT, login VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, haslo VARCHAR(40) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, email VARCHAR(40) NOT NULL, imie VARCHAR(40) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL, nazwisko VARCHAR(40) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL, rola VARCHAR(20) NOT NULL DEFAULT 'user', newsletter tinyint(4) NOT NULL DEFAULT '0', data_rejestracji datetime DEFAULT NULL, PRIMARY KEY (id_uzytkownika) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
W każdej tabeli atrybuty są w pełni bezpośrednio zależne od klucza głównego, dane przechowywane w bazie są z punktu widzenia implemntacji projektu istotnie atomiczne, więc wydaje nam się, że baza danych spełnia założenia 3NF.
SELECT * FROM komentarze JOIN uzytkownicy ON (komentarze.autor = uzytkownicy.id_uzytkownika) WHERE id_obiektu = $id AND typ = 'aktualnosc' ORDER BY DATA DESC, godzina DESC; SELECT * FROM newsletter LEFT JOIN uzytkownicy ON (newsletter.autor = uzytkownicy.id_uzytkownika) WHERE id = $id; SELECT id_uzytkownika, login, email FROM uzytkownicy ORDER BY data_rejestracji; UPDATE teksty ('naglowek', 'tresc', 'autor') VALUES ($naglowek, $tresc, $autor) WHERE id_tekstu = $id;