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 18:51]
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 120: 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 =====
 +
 +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}} {{:​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>​
  
-===== Wybór Encji i ich atrybutów ===== 
-===== Diagram ERD ===== 
 ===== 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/​]]+  * [[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.   * 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.1277830312.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