ГоБиблиотека: ГоПорталНашейМечты/2005?/ноябрь

Работа в ноябре 2005 года


- 10.11.2005 Карта Портала. Начальное ТЗ Борис Федосеев
- 11.11.2005 Структура базы данных для портала. Ал Берт
- 12.11.2005 Начата работа над интерфейсом клиента. Модуль Игроки. Ал Берт
- 13.11.2005 Раздел Игроки. Сделана страница поиска. Ал Берт
- 15.11.2005 Раздел Рейтинги. Начата работа над модулем Рейтинги. Ал Берт
- 16.11.2005 Раздел Турниры. Начата работа над модулем Турниры. Ал Берт
- 20.11.2005 Раздел Турниры. Оформлена страничка работы с сериями турниров. Ал Берт

10 ноября

Re: Портал нашей мечты
Пользователь: Kaban ()
Дата: 10.11.2005 10:41:58

По просьбе Бориса выставляю для обсуждения карту портала

Карта Портала:

Структура сервера………………Доступ…Обсуждение
Главная страница
Панель навигации по сайту	гость	доступно
Новости	                  гость	доступно
Анонс	                  гость	доступно
Фото дня	                  гость	доступно
Партия дня	         гость	доступно
Задача дня	         гость	доступно

Регистрация

Подписка на новости Портала

Новости
Новости общероссийские	гость	доступно
Новости региональные	гость	доступно
Новости мировые	         гость	доступно

Игра Го
Впервые узнавшим	         гость	нет
Комплекты Го	         гость	нет
Правила	                  гость	нет
Кодекс	                  гость	нет
Термины	                  гость	нет

РФГ(б)
Президиум	                  гость	         нет
Официальные документы	пользователь	нет
Региональные отделения	гость	         нет
Рейтинги	                  пользователь	нет
Кю - Даны	                  пользователь	нет
Галерея славы	         гость	         нет
Игроки	                  гость	         нет

Го турниры
Правила организации	член РФГ(б)	нет
Турнирные схемы	         член РФГ(б)	нет
Судейство	                  член РФГ(б)	нет
Расписание турниров	гость	         нет
Всероссийские турниры	гость	         доступно
Региональные турниры	гость	         доступно
Интернет турниры	         гость	         доступно
Международные с 
участием российских игроков	гость	доступно

История Го
Мировое Го	         гость	нет
Российское Го 	         гость	нет

Библиотека партий
Партии российских игроков	пользователь	доступно
Международные партии	пользователь	доступно
Партии с комментариями	член РФГ(б)	доступно

Конкурсы
Задачи	                  пользователь	нет
Конкурсы	                  пользователь	нет

Интересное
Го юмор	                  гость	нет
Фотогалерея	         гость	нет

Го в Интернете
Новичкам	                  гость	нет
Российские Го ресурсы      гость	нет
Международные Го ресурсы   гость	нет
Игровые сервера	         гость	нет

Магазин
Литература	пользователь	нет
Оборудование	пользователь	нет

Методики
Материалы для публикаций	член РФГ(б)	нет
Рекламные материалы	член РФГ(б)	нет
Презентации	         член РФГ(б)	нет
Учебные программы	         член РФГ(б)	не



Комментарии


Re: Портал нашей мечты
Пользователь: Альберт ()
Дата: 10.11.2005 21:42:15

С точки зрения проектиования базы данных для данного ТЗ требуются отдельные таблицы только для ряда специализированных разделов.
Разделы Турниры, Игроки, Партии, Рейтинги.

Остальные разделы можно разместить в общих таблицах.
Например, будет таблица: раздел – section с двумя полями : id, name
Далее таблица: topic с полями: id, id_section – ссылка на таблицу section, name, topic_date
И еще спецтаблица для хранения блобов – подсоединенных файлов типа партии, фотографии, рисунки и вообще что угодно со структурой: id, id_topic, blob, file_name, extension.
Со своими встроенными вьюерами для различных типов файлов, либо настраиваемые по усмотрению пользователя.
Эти три служебные таблицы охватят такие разделы, как:
Новости, Игра Го, РФГ(б), История Го, Конкурсы, Интересное, Го в Интернете, Магазин, Методики.
Туда можно будет потом пихать любые разделы и топики по желанию народа и администрации.
Так что сейчас даже напрягаться не стоит, что еще засунуть в ТЗ. В этом смысле система будет достаточно гибкой.
Возможно, что кое для чего потребуются доп. служебные таблицы. Но это не принципиально.
Структуру таблиц для разделов: Турниры, Игроки, Партии, Рейтинги
я выложу чуть позже, там наверное есть что пообсуждать.
Хотя вроде тоже все прозрачно.

В качестве полигона можно использовать компьютер Рустама Сахабутдинова. У него статический адрес на Linux сервере, на который мы установим Oracle.
Проектировать клиента пока будем как обычную программу для Windows. А текущие версии для тестирования будем выкладыать в ГБ. Вот, собственно, и все.


11 ноября

Структура БД для проекта

Далее перечисляются таблицы с полями.
Игроки:
create table PLAYER
(
ID NUMBER(10) not null,
FIRST_NAME VARCHAR2(50),
LAST_NAME VARCHAR2(50),
FATHERS_NAME VARCHAR2(50),
FIRST_NAME_ENGLISH VARCHAR2(50),
LAST_NAME_ENGLISH VARCHAR2(50),
MIDDLE_NAME_ENGLISH VARCHAR2(50),
BIRTH_DATE DATE,
CURRENT_RATING NUMBER(4),
RANK NUMBER(2),
RANK_YEAR NUMBER(4),
ADDRESS VARCHAR2(100),
PHONE_HOME VARCHAR2(50),
PHONE_WORK VARCHAR2(50),
PHONE_MOBILE VARCHAR2(50),
E_MAIL VARCHAR2(100),
ICQ VARCHAR2(50),
SEX NUMBER(1),
NOTE VARCHAR2(1000),
PHOTO BLOB
)

Create / Recreate? primary, unique and foreign key constraints
alter table PLAYER
add constraint PK_PLAYER_ID primary key (ID)

alter table PLAYER
add constraint IDX_PLAYER_NAME unique (LAST_NAME,FIRST_NAME,FATHERS_NAME)

alter table PLAYER
add constraint IDX_PLAYER_NAME_ENGLISH unique (LAST_NAME_ENGLISH,FIRST_NAME_ENGLISH,MIDDLE_NAME_ENGLISH)

Страны:
create table COUNTRY
(
ID NUMBER(10) not null,
NAME VARCHAR2(50),
NAME_ENGLISH VARCHAR2(50)
)

Create / Recreate? primary, unique and foreign key constraints
alter table COUNTRY
add constraint PK_COUNTRY_ID primary key (ID)

alter table COUNTRY
add constraint IDX_COUNTRY_NAME unique (NAME)

alter table COUNTRY
add constraint IDX_COUNTRY_NAME_ENGLISH unique (NAME_ENGLISH)

Города:
— Create table
create table CITY
(
ID NUMBER(10) not null,
NAME VARCHAR2(50),
NAME_ENGLISH VARCHAR2(50)
)

Create / Recreate? primary, unique and foreign key constraints
alter table CITY
add constraint PK_CITY_ID primary key (ID)

alter table CITY
add constraint IDX_CITY_NAME unique (NAME)

alter table CITY
add constraint IDX_CITY_NAME_ENGLISH unique (NAME_ENGLISH)

Кросс таблица на игрока и страны:
— Create table
create table PLAYER_COUNTRY
(
ID NUMBER(10) not null,
ID_PLAYER NUMBER(10),
ID_COUNTRY NUMBER(10),
DATE_PC DATE
)

Create / Recreate? primary, unique and foreign key constraints
alter table PLAYER_COUNTRY
add constraint PK_PLAYER_COUNTRY_ID primary key (ID)

alter table PLAYER_COUNTRY
add constraint IDX_PC_DATE unique (ID_PLAYER,DATE_PC)

alter table PLAYER_COUNTRY
add constraint FK_PC_COUNTRY foreign key (ID_COUNTRY)
references COUNTRY (ID);
alter table PLAYER_COUNTRY
add constraint FK_PC_PLAYER foreign key (ID_PLAYER)
references PLAYER (ID);

Кросс таблица на игрока – города:
— Create table
create table PLAYER_CITY
(
ID NUMBER(10) not null,
ID_PLAYER NUMBER(10),
ID_CITY NUMBER(10),
DATE_PC DATE
)

Create / Recreate? primary, unique and foreign key constraints
alter table PLAYER_CITY
add constraint PK_PLAYER_CITY_ID primary key (ID)

alter table PLAYER_CITY
add constraint IDX_DATE_PLCI unique (ID_PLAYER,DATE_PC)

alter table PLAYER_CITY
add constraint FK_PLCI_PLAYER foreign key (ID_PLAYER)
references PLAYER (ID);
alter table PLAYER_CITY
add constraint FK_PL_CI_CITY foreign key (ID_CITY)
references CITY (ID);

Рейтинг-лист:
— Create table
create table RATING_LIST
(
ID NUMBER(10) not null,
NUM NUMBER(4),
NAME VARCHAR2(50),
DATE_RATING DATE,
RATING_TYPE NUMBER(2)
)
— Add comments to the columns
comment on column RATING_LIST.RATING_TYPE
is '1 – российский, 2 – европейский, 3 – AGA';
Create / Recreate? primary, unique and foreign key constraints
alter table RATING_LIST
add constraint PK_RATING_ID primary key (ID)

alter table RATING_LIST
add constraint IDX_RATING_DATE unique (DATE_RATING,RATING_TYPE)

alter table RATING_LIST
add constraint IDX_RATYNG_TYPE unique (RATING_TYPE,DATE_RATING);

Детальная часть рейтинг-листа:
— Create table
create table RATING_PLAYER
(
ID NUMBER(10) not null,
ID_PLAYER NUMBER(10),
ID_RATING_LIST NUMBER(10),
RANK NUMBER(2),
RATING NUMBER(4)
)

Create / Recreate? primary, unique and foreign key constraints
alter table RATING_PLAYER
add constraint PK_RATING_PLAYER_ID primary key (ID)

alter table RATING_PLAYER
add constraint IDX_RP_PL_RATING_PLAYER unique (ID_RATING_LIST,RATING,ID_PLAYER)

alter table RATING_PLAYER
add constraint FK_RP_PLAYER foreign key (ID_PLAYER)
references PLAYER (ID);
alter table RATING_PLAYER
add constraint FK_RP_RATING_LIST foreign key (ID_RATING_LIST)
references RATING_LIST (ID);


Максимальные и текущие рейтинги пока введем временно в таблицу игроков.
А когда введем все рейтинг-листы, надобность в этом отпадет. Они будут вычисляемы из других таблиц.


таблица заголовков турниров:
— Create table
create table TOURNAMENT
(
ID NUMBER(10) not null,
NAME VARCHAR2(50),
START_DATE DATE,
END_DATE DATE,
YEAR NUMBER(4),
ID_TYPE NUMBER(2),
TOUR_NUMBER NUMBER(2),
KOMI NUMBER(4,1),
BOYOMI VARCHAR2(50),
TIME VARCHAR2(20),
NOTE VARCHAR2(1000),
ID_COUNTRY NUMBER(10),
ID_REGION NUMBER(10),
NAME_ENGLISH VARCHAR2(50),
ID_WORLD_REGION NUMBER(10),
ID_1_ADDITIONAL_INDEX NUMBER(10),
ID_2_ADDITIONAL_INDEX NUMBER(10),
ID_3_ADDITIONAL_INDEX NUMBER(10),
ID_4_ADDITIONAL_INDEX NUMBER(10),
ID_5_ADDITIONAL_INDEX NUMBER(10),
TOUR_INDEX_COUNT NUMBER(2)
)

— Add comments to the columns
comment on column TOURNAMENT.NAME
is 'официальное название турнира';
comment on column TOURNAMENT.START_DATE
is 'дата старта';
comment on column TOURNAMENT.END_DATE
is 'дата финиша';
comment on column TOURNAMENT.YEAR
is 'год формального проведения';
comment on column TOURNAMENT.ID_TYPE
is 'Тип турнира – швейцарка, круговик, олимпийка и т д';
comment on column TOURNAMENT.TOUR_NUMBER
is 'число туров';
comment on column TOURNAMENT.KOMI
is 'коми';
comment on column TOURNAMENT.BOYOMI
is 'бойоми';
comment on column TOURNAMENT.TIME
is 'время на партию';
comment on column TOURNAMENT.NOTE
is 'комментарий';
comment on column TOURNAMENT.ID_COUNTRY
is 'страна проведения';
comment on column TOURNAMENT.ID_REGION
is 'местный регион';
comment on column TOURNAMENT.ID_WORLD_REGION
is 'мировой регион';
comment on column TOURNAMENT.ID_1_ADDITIONAL_INDEX
is '1-й доп. к-т';
comment on column TOURNAMENT.ID_2_ADDITIONAL_INDEX
is '2-й доп. к-т';
comment on column TOURNAMENT.ID_3_ADDITIONAL_INDEX
is '3-й доп. к-т';
comment on column TOURNAMENT.ID_4_ADDITIONAL_INDEX
is '4-й доп. к-т';
comment on column TOURNAMENT.ID_5_ADDITIONAL_INDEX
is '5-й доп. к-т';
comment on column TOURNAMENT.TOUR_INDEX_COUNT
is 'Номер тура, с которого считаются доп. показатели';
Create / Recreate? primary, unique and foreign key constraints
alter table TOURNAMENT
add constraint PK_TOURNAMENT_ID primary key (ID)

таблица серий турниров:
— Create table
create table SERIES
(
ID NUMBER(10) not null,
NAME VARCHAR2(50),
NAME_ENGLISH VARCHAR2(50),
ID_WORLD_REGION NUMBER(10),
ID_COUNTRY NUMBER(10),
ID_REGION NUMBER(10)
)

Create / Recreate? primary, unique and foreign key constraints
alter table SERIES
add constraint PK_SERIES_ID primary key (ID)

alter table SERIES
add constraint FK_SERIES_COUNTRY foreign key (ID_COUNTRY)
references COUNTRY (ID);
alter table SERIES
add constraint FK_SERIES_REGION foreign key (ID_REGION)
references REGION (ID);
alter table SERIES
add constraint FK_SERIES_WORLD_REGION foreign key (ID_WORLD_REGION)
references WORLD_REGION (ID);


А также служебные вспомогательные таблицы регионов, мировых регионов и типов турниров:
— Create table
create table TOURNAMENT_TYPE
(
ID NUMBER(10) not null,
NAME VARCHAR2(30),
NAME_ENGLISH VARCHAR2(30)
)

Create / Recreate? primary, unique and foreign key constraints
alter table TOURNAMENT_TYPE
add constraint PK_TOURNAMENT_TYPE_ID primary key (ID)


— Create table
create table REGION
(
ID NUMBER(10) not null,
NAME VARCHAR2(50),
NAME_ENGLISH VARCHAR2(50)
)

Create / Recreate? primary, unique and foreign key constraints
alter table REGION
add constraint PK_REGION_ID primary key (ID)

alter table REGION
add constraint IDX_REGION_NAME unique (NAME)

alter table REGION
add constraint IDX_REGION_NAME_ENGLISH unique (NAME_ENGLISH)

— Create table
create table WORLD_REGION
(
ID NUMBER(10) not null,
NAME VARCHAR2(50),
NAME_ENGLISH VARCHAR2(50)
)

Create / Recreate? primary, unique and foreign key constraints
alter table WORLD_REGION
add constraint PK_WORLD_REGION primary key (ID)

alter table WORLD_REGION
add constraint IDX_WORLD_REGION_NAME unique (NAME)

alter table WORLD_REGION
add constraint IDX_WORLD_REGION_NAME_ENGLISH unique (NAME_ENGLISH)


Кросс-таблица – участники турнира:
— Create table
create table TOURNAMENT_PLAYER
(
ID NUMBER(10) not null,
ID_TOURNAMENT NUMBER(10),
ID_PLAYER NUMBER(10),
RATING NUMBER(4),
RATE NUMBER(2),
PAIRING_ORDER VARCHAR2(4),
MM NUMBER(2),
POINTS NUMBER(2),
MMS NUMBER(3),
SOS NUMBER(4),
SODOS NUMBER(4),
SS NUMBER(4),
SOSOS NUMBER(4),
WHITE_WINS NUMBER(2)
)

Create / Recreate? primary, unique and foreign key constraints
alter table TOURNAMENT_PLAYER
add constraint PK_TOURNAMENT_PLAYER_ID primary key (ID)

alter table TOURNAMENT_PLAYER
add constraint IDX_ORDER unique (ID_TOURNAMENT,PAIRING_ORDER)

alter table TOURNAMENT_PLAYER
add constraint FK_TP_PLAYER foreign key (ID_PLAYER)
references PLAYER (ID);
alter table TOURNAMENT_PLAYER
add constraint FK_TP_TOURNAMENT foreign key (ID_TOURNAMENT)
references TOURNAMENT (ID);


Партии турниров и записи партий:
— Create table
create table GAME
(
ID NUMBER(10) not null,
ID_TOURNAMENT NUMBER(10),
ID_WHITE_PLAYER NUMBER(10),
ID_BLACK_PLAYER NUMBER(10),
HANDICUP NUMBER(2),
RESULT NUMBER(1),
POINTS NUMBER(5,1),
KOMI NUMBER(4,1),
DATE_GAME DATE,
NOTE VARCHAR2(1000),
COLOR_UNKNOWN NUMBER(1) default 1
)

— Add comments to the columns
comment on column GAME.COLOR_UNKNOWN
is '1 – цвет неизвестен, 0 – цвет известен';
Create / Recreate? primary, unique and foreign key constraints
alter table GAME
add constraint PK_GAME_ID primary key (ID)

alter table GAME
add constraint FK_GAME_BLACK_PLAYER foreign key (ID_BLACK_PLAYER)
references PLAYER (ID);
alter table GAME
add constraint FK_GAME_TOURNAMENT foreign key (ID_TOURNAMENT)
references TOURNAMENT (ID);
alter table GAME
add constraint FK_GAME_WHITE_PLAYER foreign key (ID_WHITE_PLAYER)
references PLAYER (ID);

— Create table
create table GAME_RECORD
(
ID NUMBER(10) not null,
ID_GAME NUMBER(10),
NOTE VARCHAR2(1000),
RECORD BLOB,
FILE_NAME VARCHAR2(50),
EXTENSION VARCHAR2(10)
)

Create / Recreate? primary, unique and foreign key constraints
alter table GAME_RECORD
add constraint PK_GAME_RECORD primary key (ID)

alter table GAME_RECORD
add constraint FK_GAME_RECORD_GAME foreign key (ID_GAME)
references GAME (ID);

12 ноября

Клиент мне видится как SDI – single document interface приложение
с главным окном типа


Здесь пока иконки 32x32. Но наверное для кнопок лучше использовать размеры побольше – битмапы 64x64.
Мне нужна помощь в поиске таких изображений для кнопок, представляющих основные разделы портала.

Сам же проект я начал с разработки интерфейса для справочника Игроки.
Мне он видится таким:

Это блокнот с несколькими страницами.
Первая страница – страница поиска игроков по различным стандартным параметрам.
Может использовать для поиска несколько таблиц.
Запрос формируется автоматически в зависимости от пожеланий пользователя.
Результат будет выводиться в виде редактируемого списка на странице Список.
Эта страница как раз и отображена на рисунке.
След. страница – пользовательский запрос SQL.
Для тех, кто знаком с языком запросов, можно самому делать выборки из базы.
Вид запросов для стандартных поисков будет так-же выводиться.
Что видно из след. картинки:


Так что по аналогии можно посмотреть и научиться.

На странице Игрок будут редактируемые данные для одного игрока.
На странице Рейтинги и Звания будут дана история изменения рейтингов и званий игрока.

ВикторКабанов /12.11.2005 20:38/ Правильно ли я понял, что этот интерфейс нужен для занесения данных об игроке в БД? Хотелось бы, чтоб для большинства посетителей карточка игрока выгдядела более интересно и привлекательно. Хотя бы так, как в Го-Теке.
Ал Берт /12.11.2005 23:13/ Совершенно верно. Это стандартная (для меня) работа с нетривиальными справочниками.
Есть список и есть отдельная страница для одной записи (игрока).
На самом деле редактировать (тому у кого есть права) можно и там и там.
Это как удобнее. Когда ты вносишь изменения целым списком, удобнее работать со списками. А в единичных случаях приятнее на отдельной странице.


13 ноября

Страница Поиска в модуле Игроки

Сделана страница поиска в модуле Игроки:



Поиск можно вести практически по любому полу, по которому имеет смысл его вести.
В сторковых полях поиск ведется по начальной части строки.
Например, по фамилии 'Аст' найдется Асташкин.
Поиск ведется по белым полям с отмеченной галочкой (чек боксом).
Чтобы убрать поиск по полю, достаточно отчекнуть галочку. Тогда поле поиска автоматически становится серым.
Запрос поиска формируется по нажатию кнопки 'Создать запрос' и его форма появляется в большом текстовом поле.
Выполняется запрос по нажатию кнопки 'Выполнить запрос'.
После выполнения запроса в случае его успешного завершения автоматически переходим в страницу список.
В данном примере ищутся игроки с началньыми буквами в имени 'Андр'.
Результаты поиска:


В данный момент можно искать игроков в базе по их ФИО на русском и английском, по рецтингу, по званиям и по датам рождения и начала игры.

Кроме того, запросы можно исправлять и просто писать вручную. Это достаточно просто, если разобраться со стандартными запросами, формируемыми программой автоматически.
Эти запросы можно сохранять в файлах на своем компьютере, а затем загружать в следующий раз.



15 ноября

Начата работа над модулем рейтинги


Начальный вид модуля так-же представляет собой блокнот.


Первая страница – это простой список рейтинг-листов, отсортированный по датам начиная с последнего.
Проект предусматривает любое количество рейтинг-листов, начиная от РЛ РФГ(б), EGF, AGA и кончая рейтинг-листами игровых серверов.
Справа находится поле краткого описания каждого конкретного РЛ.

Следующая страница – содержимое выбранного РЛ.
На этой странице предусмотрено ручное редактирование РЛ с помощью фильтров выборки.
При добавлении новой записи модно внести начальные буквы фамилии игрока и после нажатия Enter выскакивает модальный диалог с конкретным списком.






16 ноября

Начата работа над модулем Турниры


Это самая трудоемкая часть проекта.
Написание клиента займет по меньшей мере один человеко-месяц.
Когда в общем виде турниры будут прописаны, можно будет приступать к увязке турниров, рейтингов и всевозможной статистики по игрокам.
то есть работа по всем трем модулям – Турнирам, Игрокам, Рейтингам пойдет параллельно.



20 ноября

Оформлена страничка работы с сериями турниров


В модуле турниры оформлена страничка работы с сериями турниров.
Для работы со списком серий турниров используется очень мощная компонента – Developer Express Grig.
Это электронная таблица, позволяющая автоматически сортировать, фильтровать и группировать записи практически как угодно.
Внешний вид ее следующий:


То есть для того, чтобы выбрать нужную нам серию турниров, мы должны последовательно выбрать Мировой регион, страну и регион внутри страны:
В представленном примере это Европа – Россия – турниры российского уровня.