
- •Министерство образования и науки рф
- •Рязанский государственный радиотехнический университет
- •Разработка программ по сопровождению базы данных ис автоматизации деятельности фитнес клуба
- •Описание предметной области
- •Описание структуры базы данных
- •4. Скрипт по созданию модифицированной бд
- •5 . Скрипт по созданию триггеров
- •6. Скрипт по созданию хранимых процедур
- •7. Скрипт по созданию ролей и присвоению им прав
- •Список используемых источников
4. Скрипт по созданию модифицированной бд
Ниже приведены скрипты по созданию модифицированной БД оговоренной в задании с соответствующими комментариями.
Создание таблицы "Jobs" ("Должности").
/*Создание домена Boolean*/
CREATE DOMAIN Boolean AS SMALLINT CHECK (VALUE IN (0, 1));
/*Создание таблицы "Должности"("Jobs")*/
CREATE TABLE Jobs(
ID_Job INTEGER,
Name VARCHAR(20),
Flag_usluga BOOLEAN);
/* Добавление в таблицу "Сотрудники"("Workers") поля "Код должности"("ID_Job")*/
ALTER TABLE Workers
ADD ID_Job INTEGER NOT NULL;
/*Создание вспомогательного генератора для поля "Код должности"*/
CREATE GENERATOR ID_Job_G;
SET GENERATOR ID_Job_G TO 0;
/*Создание процедуры для переноса информации о должностях из таблицы "Сотрудники"("Workers") в таблицу "Должности"("Jobs")*/
SET TERM !! ;
CREATE PROCEDURE Job_new
AS
BEGIN
/* Вставка в таблицу "Должности"("Jobs") разных значений поля "Наименование должности"("Job") и установка поля "Флаг услуги"("Flag_Usluga") в 0 или 1*/
INSERT INTO Jobs(Name, Flag_Usluga)
SELECT DISTINCT J.Job, (IIF(J.Job='Инструктор',1,0))
FROM (SELECT Job FROM Workers) AS J(Job);
/* Вставка в таблицу "Должности"("Jobs") поля "Код должности", полученного из генератора уникальных значений ID_Job_G*/
UPDATE Jobs J
SET J.ID_Job=GEN_ID(ID_Job_G,1);
/* Вставка в таблицу "Сотрудники"("Workers") поля "Код должности"("ID_Job")*/
UPDATE Workers W
SET W.ID_Job=(SELECT J.ID_Job FROM Jobs J
WHERE J.Name=W.Job);
END!!
SET TERM ; !!
/* Выполнить процедуру Job_new*/
EXECUTE PROCEDURE Job_new;
COMMIT WORK;
/* В строках исходной таблицы не должно быть NULL значений, для созданной таблицы "Должности"("Jobs") изменим состояние флага*/
UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = 1
WHERE (RDB$FIELD_NAME = 'ID_JOB') AND
(RDB$RELATION_NAME = 'JOBS');
/* Добавляем ограничение первичного ключа для таблицы "Должности" */
ALTER TABLE Jobs ADD CONSTRAINT PK_Job
PRIMARY KEY (ID_JOB);
/* Внешний ключ для таблицы "Сотрудники" */
ALTER TABLE Workers ADD CONSTRAINT FK_Worker
FOREIGN KEY (ID_JOB) REFERENCES Jobs(ID_JOB)
ON UPDATE CASCADE;
/* Удаление процедуры Job_new */
DROP procedure Job_new;
/* Удаление поля "Должности" из таблицы "Сотрудники"*/
ALTER TABLE Workers DROP Job;
Проверим правильность работы модификации.
Исходная таблица "Сотрудники"("Workers") до модификации имела вид, приведенный в таблице 15.
Таблица 15. Исходная таблица "Сотрудники"
ID_WORKER |
FIO |
ADRES |
TELEFON |
PASSPORT |
JOB |
1 |
Николаева Ж.П. |
ул.Гагарина, д.80, кв.101 |
212121 |
1212 675483 |
Инструктор |
2 |
Карпов А.Т. |
ул.Пушкина, д.11, кв.301 |
89203045678 |
0002 321456 |
Инструктор |
3 |
Беликова А.И. |
ул.Пушкина, д.10, кв.100 |
89201001010 |
0001 101010 |
Администратор |
4 |
Локтанова Ю.А. |
ул.Новоселов, д.13, кв.20 |
543636 |
0212 231244 |
Администратор |
5 |
Зубаревич Ю.И. |
ул.Ленина, д.54, кв.75 |
756464 |
3000 217637 |
Инструктор |
6 |
Сомина Л.О. |
ул.Затинная, д.1, кв.2 |
767676 |
0978 218738 |
Инструктор |
7 |
Одина О.В. |
ул.4 Линия, д.11, кв.7 |
777777 |
0007 325782 |
Инструктор |
После модификации появилась новая таблица "Должности"("Jobs"), приведенная в таблице 16.
Таблица 16. Новая таблица "Должности"
ID_JOB |
NAME |
FLAG_USLUGA |
1 |
Администратор |
0 |
2 |
Инструктор |
1 |
При этом таблица "Сотрудники"("Workers") модифицировалась в таблицу, приведенную в таблице 17.
Таблица 17. Модифицированная таблица "Сотрудники"
ID_WORKER |
FIO |
ADRES |
TELEFON |
PASSPORT |
ID_JOB |
1 |
Николаева Ж.П. |
ул.Гагарина, д.80, кв.101 |
212121 |
1212 675483 |
2 |
2 |
Карпов А.Т. |
ул.Пушкина, д.11, кв.301 |
89203045678 |
0002 321456 |
2 |
3 |
Беликова А.И. |
ул.Пушкина, д.10, кв.100 |
89201001010 |
0001 101010 |
1 |
4 |
Локтанова Ю.А. |
ул.Новоселов, д.13, кв.20 |
543636 |
0212 231244 |
1 |
5 |
Зубаревич Ю.И. |
ул.Ленина, д.54, кв.75 |
756464 |
3000 217637 |
2 |
6 |
Сомина Л.О. |
ул.Затинная, д.1, кв.2 |
767676 |
0978 218738 |
2 |
7 |
Одина О.В. |
ул.4 Линия, д.11, кв.7 |
777777 |
0007 325782 |
2 |
Создание таблицы "Halls" (“Помещения”).
/*Создание таблицы "Помещения"("Halls")*/
CREATE TABLE Halls(
ID_Hall INTEGER,
Name VARCHAR(20));
/* Добавление в таблицу "Расписание занятий"("Timetable") поле "Код помещения"("ID_Hall")*/
ALTER TABLE Timetable
ADD ID_Hall INTEGER NOT NULL;
/*Создание вспомогательного генератора для поля "Код помещения"*/
CREATE GENERATOR ID_Hall_G;
SET GENERATOR ID_Hall_G TO 0;
/*Создание процедуры для переноса информации о помещениях из таблицы "Расписание занятий"("Timetable") в таблицу "Помещения"("Halls")*/
SET TERM !! ;
CREATE PROCEDURE Hall_new
AS
BEGIN
/* Вставка в таблицу "Помещения"("Halls") разных значений поля "Наименование помещения"("Hall") из таблицы "Расписание занятий"("Timetable")*/
INSERT INTO Halls(Name)
SELECT DISTINCT T.Hall FROM
(SELECT Hall FROM Timetable) AS T(Hall);
/* Вставка в таблицу "Помещения"("Halls") поля "Код помещения", полученного из генератора уникальных значений ID_Hall_G*/
UPDATE Halls H
SET H.ID_Hall=GEN_ID(ID_Hall_G,1);
/* Вставка в таблицу Расписание занятий"("Timetable") поля "Код помещения"("ID_Hall")*/
UPDATE Timetable T
SET T.ID_Hall=(SELECT H.ID_Hall FROM Halls H
WHERE H.Name=T.Hall);
END!!
SET TERM ; !!
/* Выполнить процедуру Hall_new*/
EXECUTE PROCEDURE Hall_new;
COMMIT WORK;
/* В строках исходной таблицы не должно быть NULL значений! */
UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = 1
WHERE (RDB$FIELD_NAME = 'ID_HALL') AND
(RDB$RELATION_NAME = 'HALLS');
/* Добавляем ограничение первичного ключа для таблицы "Помещения" */
ALTER TABLE Halls ADD CONSTRAINT PK_Hall
PRIMARY KEY (ID_HALL);
/* Внешний ключ для таблицы "Расписание занятий" */
ALTER TABLE Timetable ADD CONSTRAINT FK_Hall FOREIGN KEY (ID_HALL) REFERENCES Halls(ID_HALL) ON UPDATE CASCADE;
/* Удаление процедуры Hall_new */
DROP PROCEDURE Hall_new;
/* Удаление поля "Помещения" из таблицы "Расписание занятий"*/
ALTER TABLE Timetable DROP Hall;
Проверим правильность работы модификации.
Исходная таблица "Расписание занятий" ("Timetable") до модификации имела вид, приведенный в таблице 18.
Таблица 18. Исходная таблица "Расписание занятий"
ID_TIMETABLE |
ID_WORKER |
ID_SERVICE |
HALL |
ID_WEEK |
TIME_WORK |
1 |
1 |
2 |
Большой |
3 |
20.00 |
4 |
1 |
2 |
Большой |
1 |
20.00 |
6 |
1 |
1 |
Большой |
3 |
19.00 |
9 |
2 |
6 |
Тренажерный |
1 |
20.00 |
10 |
6 |
4 |
Большой |
2 |
19.00 |
11 |
6 |
4 |
Большой |
4 |
19.00 |
После модификации появилась новая таблица "Помещения"("Halls"), приведенная в таблице 19.
Таблица 19. Новая таблица "Помещения"
ID_HALL |
NAME |
1 |
Большой |
2 |
Тренажерный |
При этом таблица "Расписание занятий" ("Timetable") модифицировалась в таблицу, приведенную в таблице 20.
Таблица 20. Модифицированная таблица "Расписание занятий"
ID_TIMETABLE |
ID_WORKER |
ID_SERVICE |
ID_WEEK |
TIME_WORK |
ID_HALL |
1 |
1 |
2 |
3 |
20.00 |
1 |
4 |
1 |
2 |
1 |
20.00 |
1 |
6 |
1 |
1 |
3 |
19.00 |
1 |
9 |
2 |
6 |
1 |
20.00 |
2 |
10 |
6 |
4 |
2 |
19.00 |
1 |
11 |
6 |
4 |
4 |
19.00 |
1 |
Создание таблицы "Interval_Time" ("Интервалы планирования")
/*Создание таблицы "Интервалы планирования"("Interval_Time")*/
CREATE TABLE Interval_Time(
ID_ITime INTEGER,
Week VARCHAR(11),
Times VARCHAR(5));
/* Добавление в таблицу "Расписание занятий"("Timetable") поля "Код интервала планирования"("ID_ITime")*/
ALTER TABLE Timetable
ADD ID_ITime INTEGER NOT NULL;
/*Создание вспомогательного генератора для поля "Код интервала планирования"*/
CREATE GENERATOR ID_ITime_G;
SET GENERATOR ID_ITime_G TO 0;
/*Создание процедуры для переноса информации о рабочем времени из таблицы "Расписание занятий"("Timetable") в таблицу "Интервалы планирования"("Interval_Time")*/
SET TERM !! ;
CREATE PROCEDURE ITime_new
AS
BEGIN
/* Вставка в таблицу "Интервалы планирования"("Interval_Time") разных значений полей "Дни недели"("Week"), "Время"(Times)*/
INSERT INTO Interval_Time(Week, Times)
SELECT DISTINCT T.Week, T.Times
FROM (SELECT (SELECT Name FROM Weeks W
WHERE W.ID_Week=A.ID_Week),
Time_Work FROM Timetable A) AS T(Week, Times);
/* Вставка в таблицу "Интервалы панирования"("Interval_Time") поля "Код планирования" ("ID_ITime") (генератором ID_ITime_G)*/
UPDATE Interval_Time T SET
T.ID_ITime=GEN_ID(ID_ITime_G,1);
/* Вставка в таблицу "Расписание занятий"("Timetable") поля "Код планирования"("ID_ITime")*/
UPDATE Timetable T
SET T.Id_ITime=(SELECT IT.ID_ITime FROM Interval_Time IT
WHERE IT.Times=T.Time_Work AND
IT.Week=(SELECT W.Name FROM WeekS W
WHERE W.ID_Week=T.ID_Week));
END!!
SET TERM ; !!
/* Выполнить процедуру ITime_new*/
EXECUTE PROCEDURE ITime_new;
COMMIT WORK;
/* В строках исходной таблицы не должно быть NULL значений! */
UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = 1
WHERE (RDB$FIELD_NAME = 'ID_ITIME') AND
(RDB$RELATION_NAME = 'INTERVAL_TIME');
/* Добавляем ограничение первичного ключа для таблицы "Интервалы планирования"("Interval_Time") */
ALTER TABLE Interval_Time ADD CONSTRAINT PK_ITime
PRIMARY KEY (ID_ITIME);
/* Внешний ключ для таблицы "Расписание занятий"("Timetable") */
ALTER TABLE Timetable ADD CONSTRAINT FK_ITime
FOREIGN KEY (ID_ITIME) REFERENCES Interval_Time(ID_ITIME)
ON UPDATE CASCADE;
/* Удаление процедуры ITime_new */
DROP PROCEDURE ITime_new;
/* Удаление ограничения на ссылку внешнего ключа из таблицы "Расписание занятий"("Timetable") на таблицу "Дни недели"("Weeks")*/
ALTER TABLE Timetable DROP CONSTRAINT Weeks_FK;
/*Отключение триггеров*/
ALTER TRIGGER TD_Weeks INACTIVE;
ALTER TRIGGER TU_Weeks INACTIVE;
/*Удаление таблицы "Дни недели"*/
DROP TABLE Weeks;
/*Удаление из таблицы "Расписание занятий" полей "Дни недели", "Время"*/
ALTER TABLE Timetable DROP ID_Week;
ALTER TABLE Timetable DROP Time_Work;
Проверим правильность работы модификации.
Исходная таблица "Расписание занятий" ("Timetable") до модификации имела вид, приведенный в таблице 21.
Таблица 21. Исходная таблица "Расписание занятий"
ID_TIMETABLE |
ID_WORKER |
ID_SERVICE |
ID_WEEK |
TIME_WORK |
ID_HALL |
1 |
1 |
2 |
3 |
20.00 |
1 |
4 |
1 |
2 |
1 |
20.00 |
1 |
6 |
1 |
1 |
3 |
19.00 |
1 |
9 |
2 |
6 |
1 |
20.00 |
2 |
10 |
6 |
4 |
2 |
19.00 |
1 |
11 |
6 |
4 |
4 |
19.00 |
1 |
Таблица "Дни недели"("Weeks") имела вид, приведенный в таблице 22.
Таблица 22. Исходная таблица "Дни недели"
ID_WEEK |
NAME |
1 |
Понедельник |
2 |
Вторник |
3 |
Среда |
4 |
Четверг |
5 |
Пятница |
6 |
Суббота |
7 |
Воскресенье |
После модификации появилась новая таблица "Интервалы планирования"("Interval_Time") , приведенная в таблице 23.
Таблица 23. Новая таблица "Интервалы планирования"
ID_ITIME |
WEEK |
TIMES |
1 |
Вторник |
19.00 |
2 |
Понедельник |
20.00 |
3 |
Среда |
19.00 |
4 |
Среда |
20.00 |
5 |
Четверг |
19.00 |
При этом таблица "Расписание занятий" ("Timetable") модифицировалась в таблицу, приведенную в таблице 24.
Таблица 24. Модифицированная таблица "Расписание занятий"
ID_TIMETABLE |
ID_WORKER |
ID_SERVICE |
ID_ITIME |
ID_HALL |
1 |
1 |
2 |
4 |
1 |
4 |
1 |
2 |
2 |
1 |
6 |
1 |
1 |
3 |
1 |
9 |
2 |
6 |
2 |
2 |
10 |
6 |
4 |
1 |
1 |
11 |
6 |
4 |
5 |
1 |
Измение ключевого поля таблицы "Расписание занятий". Вместо поля "Код расписания занятий"("ID_Timetable") использовать поля "Код помещения"("ID_Hall") и "Код интервала планирования"("ID_ITime"). Мигрировать этот ключ в связанные таблицы "Журнал планирования" ("Register") и "Услуги клиента"("Services_Abonement").
/*Добавить в таблицу "Журнал посещений"("Register") поля "ID_ITime", "ID_Hall", которые заменят позже ключевое поле "ID_Timetable"*/
ALTER TABLE Register
ADD ID_ITime INTEGER NOT NULL,
ADD ID_Hall INTEGER NOT NULL;
/*Добавить в таблицу "Услуги клиента"("Services_Abonement") поля "ID_ITime", "ID_Hall", которые заменят позже ключевое поле "ID_Timetable"*/
ALTER TABLE Services_Abonement
ADD ID_ITime INTEGER NOT NULL,
ADD ID_Hall INTEGER NOT NULL;
/*Заполнить поля "ID_ITime", "ID_Hall" из таблицы "Расписание занятий"("Timetable") по ключевому полю "ID_Timetable"*/
UPDATE Register R
SET ID_Hall=(SELECT ID_Hall FROM Timetable T
WHERE T.ID_Timetable=R.ID_Timetable),
ID_ITime=(SELECT ID_ITime FROM Timetable TT
WHERE TT.ID_Timetable=R.ID_Timetable);
UPDATE Services_Abonement S
SET ID_Hall=(SELECT ID_Hall FROM Timetable T
WHERE T.ID_Timetable=S.ID_Timetable),
ID_ITime=(SELECT ID_ITime FROM Timetable TT
WHERE TT.ID_Timetable=S.ID_Timetable);
/*Удалить ссылки внешних ключей из таблицы "Расписание занятий"("Timetable") на таблицы "Услуги клиента"("Services_Abonement") и
"Журнал посещений"("Register")*/
ALTER TABLE Register DROP CONSTRAINT Timetable_reg_FK;
ALTER TABLE Services_Abonement DROP CONSTRAINT Timetable_ab_FK;
/*Удалить из таблиц ограничения первичного ключа*/
ALTER TABLE Register DROP CONSTRAINT xpkregister;
ALTER TABLE Services_Abonement DROP CONSTRAINT
xpkservices_abonement;
ALTER TABLE Timetable DROP CONSTRAINT xpktimetable;
/*Изменить значение первичного ключа */
ALTER TABLE Timetable ADD CONSTRAINT PK_Timetable
PRIMARY KEY (ID_ITime,ID_Hall);
ALTER TABLE Register ADD CONSTRAINT Register_PK
PRIMARY KEY (Date_Register,ID_Abonement,ID_Hall,ID_ITime);
ALTER TABLE Services_Abonement ADD CONSTRAINT
Services_Ab_PK
PRIMARY KEY (ID_Abonement,ID_Hall,ID_ITime);
/*Добавить ссылки внешних ключей из таблицы "Расписание занятий"("Timetable") на таблицы "Услуги клиента"("Services_Abonement") и
"Журнал посещений"("Register")*/
ALTER TABLE Register ADD CONSTRAINT FK_Timetable_R
FOREIGN KEY (ID_ITIME,ID_HALL) REFERENCES
Timetable(ID_ITIME,ID_HALL)
ON UPDATE CASCADE;
ALTER TABLE Services_Abonement ADD CONSTRAINT
FK_Timetable_A
FOREIGN KEY (ID_ITIME,ID_HALL) REFERENCES
Timetable(ID_ITIME,ID_HALL)
ON UPDATE CASCADE;
/*Изменение триггеров для таблицы "Timetable", связанных с полем "ID_Timetable"*/
SET TERM !! ;
/*Изменение триггера на удаление ON DELETE RESTRICT*/
ALTER TRIGGER TD_Timetable
AS
DECLARE VARIABLE numrows INTEGER;
BEGIN
/* Для талицы "Services_abonement"*/
select count(*) from Services_abonement
where Services_abonement.ID_Hall = OLD.ID_Hall AND
Services_abonement.ID_ITime = OLD.ID_ITime
into numrows;
IF (numrows > 0) THEN EXCEPTION
ERWIN_PARENT_DELETE_RESTRICT;
/* Для таблицы "Register"*/
select count(*) from Register
where Register.ID_Hall = OLD.ID_Hall AND
Register.ID_ITime = OLD.ID_ITime
into numrows;
IF (numrows > 0) THEN EXCEPTION ERWIN_PARENT_DELETE_RESTRICT;
END!!
/*Изменение триггера на обновление ON UPDATE RESTRICT*/
ALTER TRIGGER TU_TIMETABLE
AS
DECLARE VARIABLE numrows INTEGER;
BEGIN
/*Для таблицы "Services_abonement"*/
IF (OLD.ID_Hall <> NEW.ID_Hall AND OLD.ID_ITime<>
NEW.ID_ITime)
THEN
BEGIN
select count(*) from Services_abonement
where Services_abonement.ID_Hall = OLD.ID_Hall AND
Services_abonement.ID_ITime = OLD.ID_ITime
into numrows;
IF (numrows > 0) THEN EXCEPTION
ERWIN_PARENT_UPDATE_RESTRICT;
END
/* Для таблицы "Register"*/
IF (OLD.ID_Hall <> NEW.ID_Hall AND OLD.ID_ITime<>
NEW.ID_ITime)
THEN
BEGIN
select count(*) from Register
where Register.ID_Hall = OLD.ID_Hall AND
Register.ID_ITime = OLD.ID_ITime
into numrows;
IF (numrows > 0) THEN EXCEPTION
ERWIN_PARENT_UPDATE_RESTRICT;
END
END!!
SET TERM ; !!
/*Удалить из таблиц поле ID_Timetable"*/
ALTER TABLE Timetable DROP ID_Timetable;
ALTER TABLE Register DROP ID_Timetable;
ALTER TABLE Services_Abonement DROP ID_Timetable;
Проверим правильность работы модификации.
Исходная таблица "Расписание занятий" ("Timetable") до модификации имела вид, приведенный в таблице 25.
Таблица 25. Исходная таблица "Расписание занятий"
ID_TIMETABLE |
ID_WORKER |
ID_SERVICE |
ID_ITIME |
ID_HALL |
1 |
1 |
2 |
4 |
1 |
4 |
1 |
2 |
2 |
1 |
6 |
1 |
1 |
3 |
1 |
9 |
2 |
6 |
2 |
2 |
10 |
6 |
4 |
1 |
1 |
11 |
6 |
4 |
5 |
1 |
Таблицы "Услуги клиента"("Services_Abonement") и "Журнал посещений"("Register") имели вид, приведенный в таблице 26 и в таблице 27.
Таблица 26. Исходная таблица "Услуги клиента"
ID_ABONEMENT |
ID_TIMETABLE |
NUMBER |
1 |
1 |
1 |
1 |
4 |
4 |
1 |
6 |
1 |
2 |
4 |
4 |
3 |
10 |
2 |
3 |
11 |
2 |
4 |
10 |
4 |
6 |
9 |
4 |
6 |
10 |
2 |
Таблица 27. Исходная таблица "Журнал посещений"
DATE_REGISTER |
ID_TIMETABLE |
ID_ABONEMENT |
03.11.2008 |
4 |
1 |
03.11.2008 |
4 |
2 |
04.11.2008 |
10 |
3 |
04.11.2008 |
10 |
4 |
04.11.2008 |
10 |
6 |
05.11.2008 |
1 |
1 |
05.11.2008 |
9 |
6 |
После модификации таблицы "Расписание занятий", "Услуги клиента", "Журнал посещений" имеют вид, приведенный в таблице 28, в таблице 29, в таблице 30.
Таблица 28. Модифицированная таблица "Расписание занятий"
ID_WORKER |
ID_SERVICE |
ID_ITIME |
ID_HALL |
6 |
4 |
1 |
1 |
1 |
2 |
2 |
1 |
2 |
6 |
2 |
2 |
1 |
1 |
3 |
1 |
1 |
2 |
4 |
1 |
6 |
4 |
5 |
1 |
Таблица 29. Модифицированная таблица "Услуги клиента"
ID_ITIME |
ID_HALL |
ID_ABONEMENT |
NUMBER |
2 |
1 |
1 |
4 |
3 |
1 |
1 |
1 |
4 |
1 |
1 |
1 |
2 |
1 |
2 |
4 |
1 |
1 |
3 |
2 |
5 |
1 |
3 |
2 |
1 |
1 |
4 |
4 |
1 |
1 |
6 |
2 |
2 |
2 |
6 |
4 |
Таблица 30. Модифицированная таблица ""Журнал посещений"
DATE_REGISTER |
ID_ITIME |
ID_HALL |
ID_ABONEMENT |
03.11.2008 |
2 |
1 |
1 |
03.11.2008 |
2 |
1 |
2 |
04.11.2008 |
1 |
1 |
3 |
04.11.2008 |
1 |
1 |
4 |
04.11.2008 |
1 |
1 |
6 |
05.11.2008 |
4 |
1 |
1 |
05.11.2008 |
2 |
2 |
6 |