SELECT tourist.fio, tours.hotel_room_n, tours.start_day, end_date, hotels.name
FROM tourist INNERJOINtours
ON tourist._id = tours.tourist_id INNERJOINhotels
ON tours.hotel_id = hotels._id
Рисунок 1.18 План запроса
1) Сканированиекластерногоиндексавсейтаблицыtours, выходныестолбцыtourist_id, hotel_room_n, start_day, end_date.
2) Просмотр определенного диапазона строк кластеризованного индекса таблицы tourist.
3) Происходит вложенный цикл по таблицамtours и tourist.
4) Просмотр определенного диапазона строк кластеризованного индекса таблицы hotels.
5) Происходит вложенный цикл по таблице hotels.
6) Добавление к результатам запроса.
Ограничения
· В проектируемой базе данных существуют следующие виды ограничений:
· Первичный ключ (PRIMARY KEY) – применяется для уникальной идентификации записей таблицы.
· Внешний ключ (FOREIGNKEY) – применяется для принудительного установления связи между данными в двух таблицах.
Создание триггеров
Реализуем триггер, который при добавлении новой записи о заказе туристом экскурсии добавляет в категорию расходов представительства стоимость экскурсии с учетом надбавки экскурсионного агентства, а так же подсчитывает доход представительства с учетом 20% надбавки.
CREATETRIGGER [dbo].[insertingExcurs]
ON [dbo].[excurs_summary]
AFTERINSERTAS
BEGIN
DECLARE @y MONEY, @x INT.
SETNOCOUNTON;
SETNOCOUNTON;
SELECT @y=(excurs.cost*excurs_agency.multiply_cost), @x=inserted._id
FROM inserted INNER JOIN excurs
ON inserted.excurs_id = excurs._idINNER JOIN excurs_agency
ON inserted.agency_id = excurs_agency._idINNER JOIN tourist
ON tourist._id = inserted.tourist_idINNER JOIN tours
ON tours.tourist_id = tourist._id
WHERE inserted.DATEBETWEEN tours.start_day AND tours.end_date
INSERT INTO income_summary VALUES(3, @y*1.2,GETDATE(), @x)
INSERT INTO outcome_summary VALUES(3, @y,GETDATE(), @x)
END