![](/user_photo/2090_9Vy88.png)
Триггеры
Для базы данных были разработаны 2 триггера.
1. Триггер after_del.
create trigger after_del
after delete on orders
for each row
delete from order_dishes where ID_order=old.ID_order;
Триггер срабатывает при удалении записи из таблицы «orders» и удаляет все записи под этим номером заказа из таблицы «order_dishes».
удаление
записей из таблицы «order_dishes»
Рис. 7. Блок-схема триггера after_del.
Пример выполнения:
2. Триггер busy.
Триггер срабатывает после добавления нового заказа в таблицу «orders» и устанавливает значение атрибута busy=«yes» (столик занят) в таблице «tables».
create trigger busy
after insert on orders
for each row
update tables set tables.busy='yes' where tables.ID_table=new.ID_table;
Рис. 8. Блок-схема триггера busy.
Пример выполнения:
Литература
1. MySQL. Полное и исчерпывающее руководство по применению и администрированию баз данных, а также программированию приложений. Второе издание. П. Дюбуа, Москва — Санкт-Петербург — Киев, 2004
2. Практическое введение в базы данных, часть 1-3, А. А. Марков; Москва – 2004
3. Базы и банки данных. Методические указания по выполнению курсовой работы. Лазутченко О. В., МГУП, 2007.
4. MySQL. Учебное пособие. Л. Веллинг, Л. Томсон; Москва — Санкт-Петербург — Киев, 2004
5. Системы баз данных. Г. Гарсиа-Молина, Дж. Д. Ульман, Д. Уидом; Москва — Санкт-Петербург — Киев, 2003.
Приложение №1. ER – Модель базы данных
Приложение №2. Исходный код создания таблиц
create database restourant;
use restourant;
drop table if exists dishes;
create table dishes
( ID_dish int unsigned not null auto_increment primary key,
name varchar(100) not null,
descr text,
price int unsigned not null,
kind varchar(20) not null);
drop table if exists firm;
create table firm
( ID_firm int unsigned not null primary key);
drop table if exists orders;
create table orders
( ID_order int unsigned not null auto_increment primary key,
date date not null,
ID_table int unsigned not null,
reserve varchar(10) not null,
discount varchar(10) not null);
drop table if exists order_dishes;
create table order_dishes
( ID_order int unsigned not null,
ID_dish int unsigned not null,
primary key (ID_order, ID_dish),
quantity int unsigned not null);
drop table if exists tables;
create table tables
( ID_table int unsigned not null auto_increment primary key,
type varchar(10) not null,
smoking varchar(20) not null,
busy varchar(10) not null);
drop table if exists waiters;
create table waiters
( ID_waiter int unsigned not null auto_increment primary key,
name varchar(50) not null,
surname varchar(50) not null,
address varchar(100) not null,
tel varchar(50));
drop table if exists waiter_tables;
create table waiter_tables
(ID_waiter int unsigned not null,
ID_table int unsigned not null,
primary key (ID_waiter, ID_table));
Приложение №3. Исходный код занесения данных
load data local infile 'D:/xampp/mysql/bin/dishes.txt' into table dishes;
load data local infile 'D:/xampp/mysql/bin/orders.txt' into table orders;
load data local infile 'D:/xampp/mysql/bin/orders_dishes.txt' into table order_dishes;
load data local infile 'D:/xampp/mysql/bin/tables.txt' into table tables;
load data local infile 'D:/xampp/mysql/bin/waiters.txt' into table waiters;
load data local infile 'D:/xampp/mysql/bin/waiter_tables.txt' into table waiter_tables;
load data local infile 'D:/xampp/mysql/bin/firm.txt' into table firm;