Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2010/06/29 16:11]
ztb2010
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 [[dawid.boisse@gmail.com|Dawid Boisse]], Wojciech Myśliwiec [[dawid.boisse@gmail.com|Dawid Boisse]], Wojciech Myśliwiec
 +
 +Projekt realizowano również na przedmiocie Technologie i programowanie WWW.
  
 ===== Streszczenie ===== ===== Streszczenie =====
Linia 88: Linia 90:
  
 ===== FHD - Diagram hierarchii funkcji ===== ===== FHD - Diagram hierarchii funkcji =====
 +
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​fhd.png|}}
 +
 ===== Budowa i analiza diagramu przepływu danych ===== ===== Budowa i analiza diagramu przepływu danych =====
  
Linia 117: Linia 122:
  
 ===== Projektowanie tabel ===== ===== Projektowanie tabel =====
 +
 +<code sql>
 +CREATE TABLE IF NOT EXISTS `admin` (
 +  `admin_name` varchar(20) CHARACTER SET utf8 NOT NULL,
 +  `admin_pass` varchar(32) CHARACTER SET utf8 NOT NULL,
 +  `admin_email` varchar(60) CHARACTER SET utf8 NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;​
 +
 +CREATE TABLE IF NOT EXISTS `users` (
 +  `user_name` varchar(20) CHARACTER SET utf8 NOT NULL,
 +  `user_pass` varchar(32) CHARACTER SET utf8 NOT NULL,
 +  `user_email` varchar(60) CHARACTER SET utf8 NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;​
 +
 +CREATE TABLE IF NOT EXISTS `users_not_confirmed` (
 +  `users_not_confirmed_name` varchar(20) NOT NULL,
 +  `users_not_confirmed_pass` varchar(32) NOT NULL,
 +  `users_not_confirmed_email` varchar(60) NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=utf8;​
 +
 +CREATE TABLE IF NOT EXISTS `main_page_info` (
 +  `main_page_info_title` varchar(30) CHARACTER SET utf8 NOT NULL,
 +  `main_page_info_msg` varchar(2048) CHARACTER SET utf8 NOT NULL,
 +  `main_page_info_user` varchar(20) CHARACTER SET utf8 NOT NULL,
 +  `main_page_info_date` date NOT NULL,
 +  `main_page_info_time` time NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;​
 +
 +CREATE TABLE IF NOT EXISTS `poststamps` (
 +  `poststamp_id` int(4) NOT NULL,
 +  `poststamp_title` varchar(256) CHARACTER SET utf8 NOT NULL,
 +  `poststamp_price` float NOT NULL,
 +  `poststamp_print_tech` varchar(32) CHARACTER SET utf8 NOT NULL,
 +  `poststamp_tooth` varchar(11) CHARACTER SET utf8 NOT NULL,
 +  `poststamp_color` varchar(32) CHARACTER SET utf8 NOT NULL,
 +  `poststamp_amount` int(10) NOT NULL,
 +  `poststamp_release` date NOT NULL,
 +  `poststamp_additional` varchar(2048) CHARACTER SET utf8 NOT NULL,
 +  `poststamp_user` varchar(20) CHARACTER SET utf8 NOT NULL,
 +  `poststamp_date` date NOT NULL,
 +  `poststamp_time` time NOT NULL,
 +  `poststamp_checked` tinyint(1) NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;​
 +
 +CREATE TABLE IF NOT EXISTS `stamps_comments` (
 +  `stamp_comment_title` varchar(30) NOT NULL,
 +  `stamp_comment_stampid` int(4) NOT NULL,
 +  `stamp_comment_user` varchar(20) NOT NULL,
 +  `stamp_comment_date` date NOT NULL,
 +  `stamp_comment_time` time NOT NULL,
 +  `stamp_comment_msg` varchar(8192) NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=utf8;​
 +</​code>​
 +
 ===== Normalizacja tabel ===== ===== Normalizacja tabel =====
-===== Wybór Encji i ich atrybutów ===== + 
-===== Diagram ERD =====+Wydaje się, że baza danych spełnia założenia [[http://​pl.wikipedia.org/​wiki/​Posta%C4%87_normalna_%28bazy_danych%29|3NF]]. 
 + 
 +   * Relacja jest w pierwszej postaci normalnej, jeśli wartości atrybutów są elementarne (atomowe, niepodzielne) - są to pojedyncze wartości określonego typu, a nie zbiory wartości. Tabela reprezentująca tę relację nie zawiera powtarzających się grup informacji. Każda kolumna jest wartością skalarną (atomową), a nie macierzą lub listą czy też czymkolwiek,​ co posiada własną strukturę. 
 +   * Relacja jest w drugiej postaci normalnej wtedy i tylko wtedy gdy jest w I postaci normalnej i każda kolumna zależy funkcyjnie od całego klucza głównego (a nie np. od części klucza). 
 +   * Mamy z nią do czynienia wtedy i tylko wtedy, gdy tabela jest w 2NF oraz gdy wszystkie pola nie będące polami klucza głównego są od niego zależne bezpośrednio. 
 + 
 + 
 + 
 +===== Diagram ERD oraz wybór encji i ich atrybutów ===== 
 + 
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​erd_znaczki.png|ERD dla portalu o znaczkach}} 
 + 
 +===== Projektowanie operacji na danych ​===== 
 + 
 +Do połączenia z bazą danych korzystaliśmy z prostej funkcji PHP, dla której wcześniej zdefiniowaliśmy parametry do łączenia z bazą danych 
 +<code php> 
 +/** 
 + * Dane do łączenia z bazą danych. Jest to także miejsce, gdzie należy je zmienić, by portal łączył się 
 + * z naszą bazą danych. 
 + *  
 + * @param hostname nazwa hosa, gdzie znajduje się baza danych 
 + * @param username nazwa użytkownika,​ który łączy się z bazą 
 + * @param password hasło do bazy danych 
 + * @param database baza danych 
 + */ 
 +$hostname = "​host";​ 
 +$username = "​uzytkownik";​ 
 +$password = "​haslo";​ 
 +$database = "​baza";​ 
 + 
 + 
 +/** 
 + * Połączenie z bazą danych. 
 + */ 
 +$connection = mysql_connect($host,​$db_user,​$db_pass);​ 
 +mysql_select_db($db);​ 
 +</​code>​ 
 +Same zapytania do bazy danych były wykonywane w najprostszy sposób: 
 +<code php> 
 +/** 
 + * Dodawanie przez administratora informacji na stronie głównej portalu. 
 + */ 
 +$title = addslashes($POST['​mainpagetopic'​]);​ 
 +$msg = addslashes($POST['​mainpagemsg'​]);​ 
 +$user = $SESSION['​login'​];​ 
 +$mysqlquery = "​INSERT INTO `$database`.`main_page_info` (`main_page_info_title`,​ `main_page_info_msg`,​ `main_page_info_user`,​ `main_page_info_date`,​ `main_page_info_time`) VALUES ('​$title',​ '​$msg',​ '​$user',​ CURDATE(), NOW());";​ 
 +mysql_query($mysqlquery);​ 
 + 
 + 
 +/** 
 + * Wypisywanie na stronie głównej informacji od administracji. 
 + */ 
 +$mysqlquery = "​SELECT * FROM `main_page_info` ORDER BY `main_page_info_date` DESC, `main_page_info_time` DESC";​ 
 +$result = mysql_query($mysqlquery);​ 
 + 
 + 
 +/** 
 + * Wprowadzanie informacji o znaczku do bazy (dodawnie nowego znaczka oraz modyfikacja istniejącego). 
 + */ 
 +$postid = addslashes($POST['​postid'​]);​ 
 +$posttitle = addslashes($POST['​posttitle'​]);​ 
 +$postprice = str_replace(",",​ "​.",​ addslashes($POST['​postprice'​]));​ 
 +$postprinttech = addslashes($POST['​postprinttech'​]);​ 
 +$posttooth = addslashes($POST['​posttooth'​]);​ 
 +$postcolor = addslashes($POST['​postcolor'​]);​ 
 +$postamount = addslashes($POST['​postamount'​]);​ 
 +$postreleasedate = addslashes($POST['​postreleasedate'​]);​ 
 +$postadditional = ($POST['​postadditional'​] == "​Dodatkowe informacje"​) ? ""​ : addslashes($POST['​postadditional'​]);​ 
 +$user = $SESSION['​login'​];​ 
 +$checked = (checkIfAdmin($SESSION['​login'​],​ $SESSION['​pass'​])) ? 1 : 0 ; 
 +$mysqlquery = "​INSERT INTO `$database`.`poststamps` (`poststamp_id`,​ `poststamp_title`,​ `poststamp_price`,​ `poststamp_print_tech`,​ `poststamp_tooth`,​ `poststamp_color`,​ `poststamp_amount`,​ `poststamp_release`,​ `poststamp_additional`,​ `poststamp_user`,​ `poststamp_date`,​ `poststamp_time`,​ `poststamp_checked`) VALUES ('​$postid',​ '​$posttitle',​ '​$postprice',​ '​$postprinttech',​ '​$posttooth',​ '​$postcolor',​ '​$postamount',​ '​$postreleasedate',​ '​$postadditional',​ '​$user',​ CURDATE(), NOW(), $checked);";​ 
 +mysql_query($mysqlquery);​ 
 + 
 + 
 +/** 
 + * Akceptacja/​unieważnienie przez administratowa znaczka (zielona/​czerwona ramka znaczka, świadcząca o jego wiarygodności). 
 + */ 
 +$postid = addslashes($GET['​postnr'​]);​ 
 +$checked = ($GET['​checked'​] == "​true"​) ? 1 : 0; 
 +$mysqlquery = "​UPDATE `$database`.`poststamps` SET `poststamp_checked` = $checked WHERE `poststamp_id` = $postid;";​ 
 +mysql_query($mysqlquery);​ 
 + 
 + 
 +/** 
 + * Wyciąganie informacji o konkretnym znaczku. 
 + */ 
 +$mysqlquery = "​SELECT * FROM `poststamps` WHERE `poststamp_id` = $postnr";​ 
 +$result = mysql_query($mysqlquery);​ 
 +</​code>​ 
 +Po wykonaniu wszystkich zapytań połączenie z bazą danych jest zawsze zamykane: 
 +<code php> 
 +/** 
 + * Zakończenie połączenia z bazą danych. 
 + */ 
 +if(!$connection) { 
 +    mysql_close($connection);​ 
 +} /​*if(!$connection)*/​ 
 +</​code>​ 
 ===== Implementacja (screeny, platforma, interfejsy, uzytkowanie,​ przyszłośc) ===== ===== Implementacja (screeny, platforma, interfejsy, uzytkowanie,​ przyszłośc) =====
 +
 +   * Strona główna
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​znaczek_01.png?​200}}
 +   * Dodawanie informacji na stronie głównej
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​znaczek_02.png?​200}}
 +   * Katalog znaczków - strona informacyjna
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​znaczek_03.png?​200}}
 +   * Katalog znaczków - informacje o znaczku
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​znaczek_04.png?​200}}
 +   * Katalog znaczków - dodawanie informacji o znaczku
 +{{:​pl:​dydaktyka:​ztb:​2010:​projekty:​znaczki:​znaczek_05.png?​200}}
 +
 ===== Literatura ===== ===== Literatura =====
 +
 +  * [[http://​www.databaseanswers.org/​data_models/​|Database Answers]]
 +  * [[http://​pl.wikipedia.org/​wiki/​Posta%C4%87_normalna_%28bazy_danych%29|Postać normalna (Wikipedia)]]
 +  * William Kent, "A Simple Guide to Five Normal Forms in Relational Database Theory",​ Communications of the ACM 26(2), Feb. 1983, 120-125.
pl/dydaktyka/ztb/2010/projekty/znaczki/start.1277820716.txt.gz · ostatnio zmienione: 2019/06/27 15:56 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0