База данных велосипедного магазина

Курсовая работа по дисциплине «Базы данных»







Выполнили студенты гр. 3101:

Куприянов Андрей

Полывянный Артем



















Санкт Петербург

2009




Описание предметной области



База данных велосипедного магазина. Велосипедный магазин специализируется на продаже 2х основных видов товара: велосипеды и запчасти к велосипедам.

Велосипеды делятся на четыре категории:

Хардтейлы (велосипеды только с передним амортизатором (амортизационной вилкой)).

Двухподвесы (велосипеды с передним и задним амортизатором (амортизационной вилкой и амортизатором соединяющим передний и задний треугольники рамы)).

Триальные (велосипеды для техничного преодоления препятствий без касания земли ногами или другими частями тела).

БМХ (велосипеды на колесах маленького диаметра (20 дюймов) для техничного катания).

В свою очередь, каждая из этих категорий делится на разные типы (стили) катания. Хардтейлы делятся на:

Кросскантри (XC) Один из самых популярных стилей катания - включает в себя все: лесные тропки с корнями, грунтовые дороги, спуски и подъемы. На таком байке можно отправиться в загородное путешествие, погонять в парке с друзьями, поехать в многодневный поход, или просто скинуть лишний вес. А можно попробовать себя в соревнованиях, которые проводятся летом почти каждый уикенд и год за годом привлекают все больше участников. Кросскантри – это скорость и выносливость, изящность и техничность.

Трейл (Trail) Такой стиль представляет собой смешение фрирайдных прыжков, синглтреков и длинных, быстрых кантрийных маршрутов. Современный трейлбайк может выглядеть как облегченный фрирайдный монстр, с которого сбрили лишний вес и убрали несколько сантиметров плюшевого хода, оставив 100 - 150 миллиметров.

Дерт (Dirt) Прыжки на специально построенном трамплине с выполнением различных трюков. Велосипед для дерта – все тот же мощный хардтейл небольшой ростовки, сейчас имеется тенденция к максимальному упрощению таких байков, с них снимается передний тормоз, переключатели скоростей, в общем, все, что может помешать Вам сделать самый лучший трюк.

Фрирайд (FR) Понятие фрирайд многогранное – это может быть как спуск с горы по неизведанному маршруту, так и какой-нибудь норт-шор, возведенный в лесу неподалеку, или пятиметровый дроп, а, может, и техничная съезжалка в парке. Все, что Вы можете себе позволить на байке – это фрирайд. И для каждого он свой.

Двухподвесы делятся на:

Даунхилл (DH) Скоростной спуск на велосипеде. Только вниз. Высокая скорость, резкие повороты, пролеты, техничные участки, постоянно меняющееся покрытие – это все даунхилл. Современный байк для DH – это тяжелый двухподвес с большим ходом передней и задней подвесок, двухкоронной вилкой, широким изогнутым рулем и толстыми покрышками.

Кросскантри (XC) Один из самых популярных стилей катания - включает в себя все: лесные тропки с корнями, грунтовые дороги, спуски и подъемы. Велосипед для кросскантри – это легкий двухподвес с ходом задней подвески до 105 мм. На таком байке можно отправиться в загородное путешествие, погонять в парке с друзьями, поехать в многодневный поход, или просто скинуть лишний вес. А можно попробовать себя в соревнованиях, которые проводятся летом почти каждый уикенд и год за годом привлекают все больше участников. Кросскантри – это скорость и выносливость, изящность и техничность.

Фрирайд (FR) Понятие фрирайд многогранное – это может быть как спуск с горы по неизведанному маршруту, так и какой-нибудь норт-шор, возведенный в лесу неподалеку, или пятиметровый дроп, а, может, и техничная съезжалка в парке. Современный байк для FR – это тяжелый двухподвес с ходом передней и задней подвесок в 150 – 200 миллиметров. Все, что Вы можете себе позволить на байке – это фрирайд. И для каждого он свой.

Запчасти. Каждый велосипед, как конструктор, состоит из большого числа деталей. Детали (запчасти) разделены на несколько видов (типов).

Амортизаторы. Состоят из передних амортизаторов (Marzocchi, RockShox), задних амортизаторов и запасных частей к амортизаторам

Колеса. Состоят из втулки, обода, покрышки, камеры, спицы и запасные части для колес.

Привод. Состоит из звезды, каретки, кассеты, манетки, переключателя, успокоителя, цепи, шатунов.

Рамы.

Тормоза. Делятся на дисковые тормоза, ободные тормоза и запчасти к ним.

Управление. Вынос, педали, подседельный штырь, седло, рулевая, руль, грипсы.

Так же в магазине представлена велоодежда и защита. Велообувь, защита, одежда, перчатки, шлемы и маски.

В базе необходимо хранить информацию о:

Персоналии магазина:

ФИО

№ телефона

Дата рождения

Профессия

Адрес

Пол

О фирмах производителях и поставщиках:

Название

Адрес

Телефон

О товарах:

Название

Тех характеристики

Свойства

Тип товара

Информация о движении товара:

Тип операции

Цена

Дата

Кол-во




Структура базы данных



Персонал



Название (в базе)

Название (перевод)

Описание

Код



ФИО

№ телефона

Дата рождения

Адрес

Пол

Код профессии 

KOD



FIO

TELEFON

BIRTHSDAY

ADRES

POL

KOD_PROFESSII

Уникальный индентификатор работника

Фамилия, Имя, Отчество

№ телефона

Дата рождения

Адрес

Пол

Код профессии в таблице Professii



Склад



Название (в базе)

Название (перевод)

Описание

Код товара

Код фирмы

Код персон

Код типа операции



Цена

Дата

Кол-во



KOD_TOVARA

KOD_FIRMI

KOD_PERSON

KOD_TIPA_OPERAZII



ZENA

DATA

KOLICHESTVO

Код товара в таблице Tovar

Код фирмы в таблице Firmi

Код персоны в таблице Personal

Код типа операции в таблице Tipi_operazii

Закупочная цена

Дата

Количество товара участвующего в операции



Товар



Название (в базе)

Название (перевод)

Описание

Код



Код типа товара

Название

KOD



KOD_TIPA_TOVARA

NAZVANIE

Уникальный индентификатор товара

Код товара в таблице Tipi_tovarov

Название товара






Типы товаров



Название (в базе)

Название (перевод)

Описание

Код



Название

Код фирмы



Код типа товара



KOD



NAZVANIE

KOD_FIRMI



KOD_TIPA_TOVARA

Уникальный индентификатор типа товара

Название типа товара

Код фирмы производителя в таблице Firmi

Код родительского типа товаров в таблице Tipi_tovarov



Фирмы



Название (в базе)

Название (перевод)

Описание

Код



Название

Адрес

Телефон

Код типа фирмы



KOD



NAZVANIE

ADRES

TELEFON

KOD_TIPA_FIRMI

Уникальный индентификатор типа фирмы

Название фирмы

Адрес

Телефон

Код типа фирмы в таблице Tipi_firm



Технические характеристики



Название (в базе)

Название (перевод)

Описание

Код товара

Код свойства

Значение

KOD_TOVARA

KOD_SVOISTVA

ZNACHENIE

Код товара в таблице Tovar

Код свойства в таблице Svoistva

Значение характеристики



Свойства



Название (в базе)

Название (перевод)

Описание

Код

Название

Единицы измерения

KOD

NAZVANIE

EDINIZI IZMERENIA

Уникальный индентификатор Название свойства

Единицы измерения свойства



Профессии



Название (в базе)

Название (перевод)

Описание

Код

Название

KOD

NAZVANIE

Уникальный индентификатор Название профессии



Типы фирм



Название (в базе)

Название (перевод)

Описание

Код

Название

KOD

NAZVANIE

Уникальный индентификатор Название фирмы



Типы операций



Название (в базе)

Название (перевод)

Описание

Код

Название

KOD

NAZVANIE

Уникальный индентификатор Название операции



123 – Primary key (первичный ключ)

123 – Foreign key (связь)

123 – Uniqe (уникальный)




Примеры создания таблиц



create table Professii (KOD NUMBER(5) PRIMARY KEY,

NAZVANIE		VARCHAR2(30) UNIQUE

);



create table Personal (KOD NUMBER(5) PRIMARY KEY,

FIO			VARCHAR2(50),

TELEFON		VARCHAR2(15),

BIRTHSDAY		DATE,

ADRES			VARCHAR2(30),

POL			NUMBER(1),

KOD_PROFESSII		NUMBER(5),

UNIQUE (FIO,BIRTHSDAY),

FOREIGN KEY KOD_PROFESSII REFERENCES PROFESSII KOD

);



create table Svoistva (KOD NUMBER(5) PRIMARY KEY,

NAZVANIE		VARCHAR2(30),

EDINIZI IZMERENIA	VARCHAR2(10)

);



create table Texnicheskie_xarakteristiki (

KOD_TOVARA		NUMBER(5),

KOD_SVOISTVA		NUMBER(5),

ZNACHENIE		NUMBER(5),

FOREIGN KEY KOD_TOVARA REFERENCES TOVARI KOD,

FOREIGN KEY KOD_SVOISTVA REFERENCES SVOISTVA KOD

);



create table Tipi_firm (KOD NUMBER(5) PRIMARY KEY,

NAZVANIE		VARCHAR2(30) UNIQUE

);



create table Tipi_operazii (KOD NUMBER(5) PRIMARY KEY,

NAZVANIE 		VARCHAR2(30) UNIQUE

);



create table Firmi (KOD NUMBER(5) PRIMARY KEY,

NAZVANIE		VARCHAR2(30) UNIQUE,

ADRES			VARCHAR2(30),

TELEFON		VARCHAR2(15),

KOD_TIPA_FIRMI		NUMBER(5),

FOREIGN KEY KOD_TIPA_FIRMI REFERENCES TIPI_FIRM KOD

);





create table Tipi_tovarov (KOD NUMBER(5) PRIMARY KEY,

NAZVANIE		VARCHAR2(30) UNIQUE,

KOD_FIRMI		NUMBER(5),

KOD_TIPA_TOVARA	NUMBER(5),

FOREIGN KEY KOD_FIRMI REFERENCES FIRMI KOD,

FOREIGN KEY KOD_TIPA_TOVARA REFERENCES TIPI_TOVAROV KOD

);



create table Tovari (KOD NUMBER(5) PRIMARY KEY,

KOD_TIPA_TOVARA	NUMBER(5),

NAZVANIE		VARCHAR2(30),

UNIQUE (KOD_TIPA_TOVARA,NAZVANIE),

FOREIGN KEY KOD_TIPA_TOVARA REFERENCES TIPI_TOVAROV KOD

);



create table Sklad (

KOD_TOVARA		NUMBER(5),

KOD_FIRMI		NUMBER(5),

KOD_PERSON		NUMBER(5),

KOD_TIPA_OPERAZII	NUMBER(5),

ZENA			NUMBER(5),

DATA			DATE,

KOLICHESTVO		NUMBER(3),

FOREIGN KEY KOD_TOVARA REFERENCES TOVARI KOD,

FOREIGN KEY KOD_FIRMI REFERENCES FIRMI KOD,

FOREIGN KEY KOD_PERSON REFERENCES PERSONAL KOD,

FOREIGN KEY KOD_TIPA_OPERAZII REFERENCES TIPI_OPERAZII KOD

);




Примеры создания последовательностей



CREATE SEQUENCE "SEQPERSONAL" MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;



CREATE SEQUENCE "SEQFIRMI" MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;



CREATE SEQUENCE "SEQTIPI_TOVAROV" MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;



CREATE SEQUENCE "SEQTOVARI" MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE;




Примеры создания триггеров



CREATE OR REPLACE TRIGGER INSERT_IN_PERSONAL

BEFORE INSERT ON PERSONAL

FOR EACH ROW

BEGIN

SELECT SEQPERSONAL.NEXTVAL INTO :new.KOD FROM DUAL;

END;

/

CREATE OR REPLACE TRIGGER INSERT_IN_FIRMI

BEFORE INSERT ON FIRMI

FOR EACH ROW

BEGIN

SELECT SEQFIRMI.NEXTVAL INTO :new.KOD FROM DUAL;

END;

/

CREATE OR REPLACE TRIGGER INSERT_IN_TIPI_TOVAROV

BEFORE INSERT ON TIPI_TOVAROV

FOR EACH ROW

BEGIN

SELECT SEQTIPI_TOVAROV.NEXTVAL INTO :new.KOD FROM DUAL;

END;

/

CREATE OR REPLACE TRIGGER INSERT_IN_TOVARI

BEFORE INSERT ON TOVARI

FOR EACH ROW

BEGIN

SELECT SEQTOVARI.NEXTVAL INTO :new.KOD FROM DUAL;

END;

/




Создание процедуры



CREATE OR REPLACE FUNCTION

Updater

(NUMTOVARA Number)

IS

	Result Number

BEGIN

	RETURN

(SELECT SUM (KOLICHESTVO) FROM SKLAD WHERE KOD_TOVARA=

NUMTOVARA AND KODTIPAOPERAZII=1)- (SELECT SUM (KOLICHESTVO) FROM SKLAD WHERE KOD_TOVARA=

NUMTOVARA AND KODTIPAOPERAZII =2)

END




Вставка данных



INSERT INTO PROFESSII (KOD,NAZVANIE) VALUES (1,'ПРОДАВЕЦ');

INSERT INTO PROFESSII (KOD,NAZVANIE) VALUES (2,'КАССИР');

INSERT INTO PROFESSII (KOD,NAZVANIE) VALUES (3,'МЕНЕДЖЕР');

INSERT INTO PROFESSII (KOD,NAZVANIE) VALUES (4,'ДИРЕКТОР');



INSERT INTO PERSONAL (FIO,TELEFON,ADRES,BIRTHDAY,POL,KOD_PROFESSII) VALUES ('КУПРИЯНОВ АНДРЕЙ МИХАЙЛОВИЧ','88127567432','СПб КИРОВА 37 16',SYSDATE,1,1);

INSERT INTO PERSONAL (FIO,TELEFON,ADRES,BIRTHDAY,POL,KOD_PROFESSII) VALUES ('КОВАЛЕВ ИЛЬЯ СЕРГЕЕВИЧ','88128567432','СПб МАРАТА 38 14',SYSDATE,1,2);

INSERT INTO PERSONAL (FIO,TELEFON,ADRES,BIRTHDAY,POL,KOD_PROFESSII) VALUES ('ПОЛЫВЯННЫЙ АРТЕМ ВИКТОРОВИЧ','88128967432','СПб МИРА 5 12',SYSDATE,1,3);

INSERT INTO PERSONAL (FIO,TELEFON,ADRES,BIRTHDAY,POL,KOD_PROFESSII) VALUES ('ПОЛЫВЯННАЯ ДАРЬЯ ВИКТОРОВНА','88127417432','СПб МИРА 5 12',SYSDATE,2,4);



INSERT INTO SVOISTVA (KOD,NAZVANIE,EDINIZI_IZMERENIA) VALUES (1,'РАЗМЕР ОБУВИ','РАЗМЕР');

INSERT INTO SVOISTVA (KOD,NAZVANIE,EDINIZI_IZMERENIA) VALUES (2,'РАЗМЕР РАМЫ','ДЮЙМЫ');

INSERT INTO SVOISTVA (KOD,NAZVANIE,EDINIZI_IZMERENIA) VALUES (3,'КОЛ-ВО ЗВЕНЬЕВ','ЗВЕНЬЯ');



INSERT INTO TIPI_FIRM (KOD,NAZVANIE) VALUES (1,'ПОСТАВЩИК');

INSERT INTO TIPI_FIRM (KOD,NAZVANIE) VALUES (2,'ПРОИЗВОДИТЕЛЬ');



INSERT INTO TIPI_OPERAZII (KOD,NAZVANIE) VALUES (1,'ПРИХОД');

INSERT INTO TIPI_OPERAZII (KOD,NAZVANIE) VALUES (2,'РАСХОД');



INSERT INTO FIRMI (NAZVANIE,ADRES,TELEFON,KOD_TIPA_FIRMI) VALUES ('SRAM','МОСКВА ТУШИНСКИЙ 40','84956543211',2);

INSERT INTO FIRMI (NAZVANIE,ADRES,TELEFON,KOD_TIPA_FIRMI) VALUES ('ВЕЛОМИР','МОСКВА ТВЕРСКОЙ ПРОСПЕКТ 14','84954567213',1);

INSERT INTO FIRMI (NAZVANIE,ADRES,TELEFON,KOD_TIPA_FIRMI) VALUES ('СПОРТАКАДЕМИЯ','МОСКВА ЛЕНИНА 65','84952345764',1);



INSERT INTO TIPI_TOVAROV (NAZVANIE,KOD_FIRMI,KOD_TIPA_TOVARA) VALUES ('КАССЕТА',00001,1);

INSERT INTO TIPI_TOVAROV (NAZVANIE,KOD_FIRMI,KOD_TIPA_TOVARA) VALUES ('МАНЕТКА',00001,2);

INSERT INTO TIPI_TOVAROV (NAZVANIE,KOD_FIRMI,KOD_TIPA_TOVARA) VALUES ('ЦЕПЬ',00001,3);



INSERT INTO TOVARI (NAZVANIE,KOD_TIPA_TOVARA) VALUES ('970DH',1);

INSERT INTO TOVARI (NAZVANIE,KOD_TIPA_TOVARA) VALUES ('X9',2);

INSERT INTO TOVARI (NAZVANIE,KOD_TIPA_TOVARA) VALUES ('990 HOLLOWPOINT',3);



INSERT INTO SKLAD (KOD_TOVARA,KOD_FIRMI,KOD_PERSON,KOD_TIPA_OPERAZII,ZENA,DATA,KOLICHESTVO) VALUES (00001,00002,3,1,1800,SYSDATE,8);

INSERT INTO SKLAD (KOD_TOVARA,KOD_FIRMI,KOD_PERSON,KOD_TIPA_OPERAZII,ZENA,DATA,KOLICHESTVO) VALUES (00002, ,1,2,1100,SYSDATE,1);

INSERT INTO SKLAD (KOD_TOVARA,KOD_FIRMI,KOD_PERSON,KOD_TIPA_OPERAZII,ZENA,DATA,KOLICHESTVO) VALUES (00003,00001,3,1,800,SYSDATE,3);



INSERT INTO TEXNICHESKIE_XARAKTERISTIKI (KOD_TOVARA,KOD_SVOISTVA,ZNACHENIE) VALUES (00001,3,112);

INSERT INTO TEXNICHESKIE_XARAKTERISTIKI (KOD_TOVARA,KOD_SVOISTVA,ZNACHENIE) VALUES (00002,2,9);

INSERT INTO TEXNICHESKIE_XARAKTERISTIKI (KOD_TOVARA,KOD_SVOISTVA,ZNACHENIE) VALUES (00003,1,11-32);



Описание приложения

























В приложении созданы три группы пользователей: «Покупатель», «Продавец» и «Менеджер по персоналу».







Пользователь «Покупатель» может просматривать товары, имеющиеся на складе. Изменения записей базы данных, данному пользователю запрещены.

При выборе пользователя «продавец» появляется окно:







Пользователь должен выбрать себя из предложенного списка и нажать «Ок». Если он себя не нашел, то необходимо нажать «Back» и обратиться к менеджеру по персоналу.







После выбора своего имени из списка пользователю открывается его рабочее окно с двумя вкладками: продажа и приход товара. На вкладке «Продажа» продавец может продать товар двойным кликом мыши по наименованию товара.







На вкладке «Приход товаров» продавец может добавить товар, выбрав его из списка и введя закупочную цену и количество. Если необходимый товар отсутствует в списке, его можно добавить, путем нажатия кнопки «Добавить Новый Товар».







В появившемся окне необходимо ввести ВСЕ поля, иначе добавления товара не представляется возможным. Заполнив все поля и нажав кнопку «OK», пользователь внесет товар в базу данных. Для отмены действия добавления товара, пользователю необходимо нажать клавишу «Back», при этом он, пользователь, вернется в свое основное окно.







Пользователь «Менеджер по персоналу» может просматривать информацию о работниках фирмы в своем основном окне. Также он может Нанимать новых работников, нажав кнопку «Нанять человека». В этом случае, ему, менеджеру, откроется окно добавления нового работника



.



Только после заполнения ВСЕХ полей менеджер сможет добавить запись в базу данных. Если необходимой профессии не окажется в списке предлагаемых, ему необходимо будет добавить новую профессию в список уже существующих, путем нажатия кнопки «Новая профессия», затем ввода названии профессии и подтверждением ввода – нажатием клавиши «Ок».Если в результате ввода новой профессии, необходимость в ней, профессии отпадет, пользователю необходимо нажать кнопку «ВАСК».





Инфологическая модель





Склад

Код товара

Код фирмы

Код персон

Код типа операции

Цена

Дата

Кол-во

Технические характеристики

Код товара

Код свойства

Значение

Типы товаров

Код

Название

Код фирмы

Код типа товара

Свойства

Код

Название

Единицы изм.







Товары

Код 

Код типа товара

Название



Фирмы

Код

Название

Адрес

Телефон

Код типа фирмы









Персонал

Код

ФИО

№ телефона

Дата рождения

Адрес

Пол

Код профессии









Типы фирм

Код

Название

Профессии

Код

Название

Типы операций

Код

Название










SKLAD

KOD_TOVARA

KOD_FIRMI

KOD_PERSONI

KOD_TIPA_OPER

ZENA

DATA

KOLICHESTVO

TEXNICHESKIE_

XARAKTERISTIKI

KOD_TOVARA

KOD_SVOISTVA

ZNACHENIE

TIPI_TOVAROV

KOD

NAZVANIE

KOD_FIRMI

KOD_TIPA_TOVAR

SVOISTVA

KOD

NAZVANIE

EDINIZI IZM.







TOVARI

KOD

KOD TIPA_TOVAR

NAZVANIE



FIRMI

KOD

NAZVANIE

ADRES

TELEFON

KOD_TIPA_FIRM









PERSONAL

KOD

FIO

TELEFON

BIRTHSDAY

ADRES

POL

KOD_PROFESSII









TIPI_FIRM

KOD

NAZVANIE

PROFESSII

KOD

NAZVANIE

TIPI_OPERAZII

KOD

NAZVANIE











25