Вход:  Пароль:  
FreeSource: PhpCoder/SiteAboutStamps ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Мои идеи по созданию сайта про марки

Техническая база


Сайт будет написан на Java (JSP) с использованием БД MySQL.

Устройство базы данных


CREATE DATABASE IF NOT EXISTS `stamps_site`;
USE stamps_site;




Название поля Пояснения
stamp_id идентификатор марки
year год выпуска (перенести в серию?)
country_id страна, выпустившая марку
michel_id номер по Михелю
scott_id номер по Скотту
gibbons_id номер по Стэнли Гиббонсу
imp беззубцовка — TRUE/c зубцами — FALSE (перенести в серию?)

SQL-запись:


CREATE TABLE IF NOT EXISTS `stamps` (
    `stamp_id` INT(4) UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
    `year` YEAR,
    `country_id` INT(4) UNSIGNED NOT NULL,
    `michel_id` INT(4) UNSIGNED,
    `scott_id` INT(4) UNSIGNED ,
    `gibbons_id` INT(4) UNSIGNED ,
    `imp` BOOLEAN NOT NULL DEFAULT FALSE,
    PRIMARY KEY(stamp_id),
    FOREIGN KEY(country_id) REFERENCES `countries`(country_id)
) ENGINE=InnoDB;



Название поля Пояснения
series_id идентификатор серии
stamp_id идентификатор марки, входящей в серию

SQL-запись:


CREATE TABLE IF NOT EXISTS `series` (
    `series_id` INT(4) UNSIGNED NOT NULL,
    `stamp_id` INT(4) UNSIGNED NOT NULL UNIQUE,
    FOREIGN KEY(stamp_id) REFERENCES `stamps`(stamp_id)
) ENGINE=InnoDB;



Название поля Пояснения
country_id идентификатор страны
country_name название страны (на английском) (будет использоваться в имени файла с изображением?)
country_url ссылка на англоязычную википедию с описанием страны
country_desc краткий текст с описанием страны (может в будущем?)
SQL-запись:
CREATE TABLE IF NOT EXISTS `countries` (
    `country_id` INT(4) UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
    `country_name` CHAR(255NOT NULL UNIQUE,
    `country_url` CHAR(255NOT NULL UNIQUE,
    PRIMARY KEY(country_id)
) ENGINE=InnoDB;
Название поля Пояснения
user_id идентификатор пользователя
user_pass пароль пользователя (в md5)
user_nick ник пользователя
user_name полное имя пользователя
user_email адрес электронной почты

SQL-запись:


CREATE TABLE IF NOT EXISTS `users` (
    `user_id` INT NOT NULL,
    `user_pass` NOT NULL,
    `user_nick` TEXT NOT NULL,
    `user_name` TEXT NOT NULL,  -- may be allow NULL?
    `user_email` TEXT NOT NULL  -- may be allow NULL?
);



Название поля Пояснения
user_id идентификатор пользователя-владельца
series_id идентификатор серии
purchase_date дата приобретения марки
SQL-запись:
CREATE TABLE IF NOT EXISTS `users_collection` (
    `user_id` INT,
    `series_id` INT,
    `purchase_date` DATE
);

Функциональные пожелания

Пользователь должен иметь возможность узнать статистику по следующим критериям (звёздочкой (*) помечены запросы, которые доступны только зарегистрированным пользователям):

Запрос SQL-запрос
сколько всего марок в базе
SELECT COUNT(stamp_id) AS stamps_counter FROM stamps
сколько всего марок в личной коллекции *
сколько ещё не приобретено *
сколько ещё не приобретено (в процентах) *
сколько негашеных марок в коллекции *
сколько гашеных марок в коллекции *
сколько марок с зубцами
SELECT COUNT(stamp_id) FROM stamps WHERE imp = FALSE
сколько марок с зубцами (в процентах)
сколько беззубцовых марок
SELECT COUNT(stamp_id) FROM stamps WHERE imp = TRUE
сколько беззубцовых марок (в процентах)


Запрос SQL-запрос
марки скольки стран есть в базе
SELECT COUNT(DISTINCT country_id) AS countries_counter FROM stamps
марки каких стран есть в базе
SELECT DISTINCT c.country_name FROM countries AS c INNER JOIN stamps AS s ON s.country_id = c.country_id
марки каких стран есть в коллекции *
сколько марок конкретной страны есть в коллекции *
сколько марок конкретной страны есть в коллекции (в процентах) *
марок каких стран нет в коллекции *
сколько марок конкретной страны отсутствует в коллекции *
сколько марок конкретной страны отсутствует в коллекции (в процентах) *


Запрос SQL-запрос
марки каких годов есть
SELECT DISTINCT year FROM stamps ORDER BY year
сколько марок и каких годов есть в коллекции *
сколько марок и каких годов нет в коллекции *

Путеводитель по сайту


Далее приведена таблица из двух столбцов — в одном страны (ссылки ведут на /collection/show/main/country/:country), в другом года (ссылки ведут на /collection/show/main/year/:year).
С главной страницы, для зарегистрированных пользователей, доступна ссылка на страницу с описанием личной коллекции (/collection/show/mine).



На странице пользователь видит всю информацию о серии: год, страна, сколько марок, изображение, номера по каталогам. Если у пользователя есть эта серия, то выводится надпись «Наличествует вашей коллекции», в противном случае ничего не выводится. (В будущем также: ссылки на конекретные марки серии, кто/где/когда/почем/продаёт(вал)). Возможно, нужно выводить список пользователей, у кого есть эта серия?
Если у пользователя нет этой серии, то выводить формочку с галочкой: «У меня есть эта серия» (возможно с подпунктами гашеная/негашеная?)


На этой странице пользователь видит краткую статистику, вида «На данный момент (в вашей коллекции|в коллекции пользователя %s (если смотрим чужую коллекцию)) содержится информация о %d марках, которые составляют %d серий и выпущены %d странами, в период с %d по %d года.»
Далее приведена таблица из двух столбцов — в одном страны (ссылки ведут на /collection/show/user/:user/country/:country), в другом года (ссылки ведут на /collection/show/user/:user/year/:year).








Ссылок на эту страницу нет
 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]