Главная » Просмотр файлов » Теория и практика построения баз данных

Теория и практика построения баз данных (1088289), страница 95

Файл №1088289 Теория и практика построения баз данных (Теория и практика построения баз данных) 95 страницаТеория и практика построения баз данных (1088289) страница 952018-01-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 95)

Сцз'ьошег!0) ЧАЕОЕ5 (апК Сцз(10.Сиггуа)); Логика атой процедуры, носящей имя йеьтСцзсоп)етИ(СЬТгапвас((оп, такова. Сначала создаются данные попого клиента, и в таблице ТРАИ5АСПОИ, где регистрируются купленные произведения, ведется поиск строк, в которых столбец Сцз(опзет10 имеет пустое значение. Этот поиск ведется по соединению таблиц АРТ15Т, ИОРК и ТРАИВАСПОИ, так как имя художника (йап)е) хранится в таблице АРП5Т, а название произведения (Т!1!е) и номер копии (Сору) хранятся в таблице ИОРК.

Если найдена ровно одна такая строка, в ней обновляются столбцы Сцзсопзе/10 (идентификатор клиента), 5а1евРпсе (цена продажи) и РцтсйавеОа1е (дата приобретения). Затем добавляется запись в таблицу пересечения, чтобы зарегистрировать интерес клиента к данному художнику. В противном случае, если число найденных строк больше или меньше 1, никаких изменений в базе данных не производится. Параметры процедуры ИетчСця(опзетИ!1ЬТтапввсбоп содержат информацию о клиенте и приобретенном произведении.

В процедуре объявлены несколько переменных и курсор. Курсор определен на соединении таблиц АРТ15Т, Ч/ОРК и ТРАИ5АСПОИ. Он выделяет столбцы Ттапвасбоп10 и АРТ15Т.Ат(!з(10 из строк, содержащих данные об искомом художнике и произведении и имеющих нулевое значение столбца Сцвсоптег10. Логика приложения 447 5ЕЕЕСТ ГРОМ ИНЕЙЕ МАМЕ Т1Т/.Е СОРУ МАМЕ Музбс РаЬг/с Музбс РаЬпс Музпс РаЬпс Мгчмв М! Чч!а ТаЬеу ТоЬеу ТоЬву М!го М!го 4/40 4/40 5/40 79/122 79/122 ТФапу Ти89Ы Оачы Бпзйл зепгеу запев Тйлдпу ТФШ9Ы 8цзап Чуо МАМЕ МАМЕ М!га Рппдз Рппдз чвп Чгопмп чап Чгопх!п ТоЬеу ТоЬеу 8цзап Чуц Рсва Б па!Пега 8в1п!а Чуагп/пд Ргеб Бозе!Пега Зе1юа Ччагп/пд Ргеб Бгпаплегз Зе//па Чгагп!пд 5ЕЕЕСТ ГРОМ ИНЕКЕ 7 газ«в зв/есгеа. 446 Глава 12.

Работа с базами данных в Огвс1е Прежде всего процедура выполняет проверку, нет ли уже в базе данных информации о данном клиенте. Если нет, данные нового клиента добавляются в базу. В РЕ/5О). нет оператора ВЕ61М ТРАМ5АСТ1ОМ' — первое действие с базой данных автоматически начинает транзакцию.

Здесь новая транзакция начнется при дооавлении данных о покупателе. Обратите также внимание, что комментарии заключены между скобками вида /' и '/. Такие комментарии могут состоять из нескольких строк, и если вы начнете комментарий с символов /', но забудете завершить его символами '/, то вся ваша программа будет воспринята как комментарий. После того как данные о новом покупателе добавлены в базу, обрабатывается курсор ТгапзСцгзог.

Переменная гоч/соцп1 используется для подсчета строк, в переменную 1!б записывается значение Тгзпзасбоп10, а в переменную аЫ вЂ” значение А/Т!1110. Заметьте, что оператор присваивания в Огас1е выглядит так: «: ь, Например, 1Ы: !гапз.1/апзас1!оп!0 обозначает, что в переменную ЬЫ записывается значение 1гапз.Тгапзассюп10.

В соответствии с логикой процедуры, если найдена одна и только одна строка, удовлетворяющая критериям, то в переменных СЫ и аЫ будут содержаться значения, нужные нам для успешного завершения транзакции. Если же таких строк не найдено или найдено более одной, то транзакция будет прервана, и ни Вд, ни аЫ не будут использованы.

Для подсчета строк мы могли бы использовать выражение Соцп1(*), и затем, если Соцп1(*) 1, запустить другой оператор, который бы получал нужные нам значения аЫ и с!б. При той логике, которая реализована в листинге 12.6, необходимость во втором Зе,2ь-операторе отпадает. Если число строк Роч/Соцпь больше единицы или равно нулю, то выдается сооощение об ошибке и выполняется откат транзакции, отменяющнй вставку данных в таблицу С05ТОМЕЙ. Если йов/Соцп1 равно 1, обновляется соответствующая строка в таблице ТРАМ5АСТ10М.

Обратите внимание на использование функции 5узОа1е, с помощью которой записывается текущая дата. Наконец, в таблицу пересечения добавляется строка с информацией о покупателе и авторе купленного произведения (аЫ). Эта хранимая процедура может быть вызвана командой наподобие ЕхеС ИеиСцзсоз!егИ1сЬТгапхасс/оп('5цхап Ии', '206', '565-!000'. 'М!го', 'М1 Ч1ба'. '79/!22'. '65000'): Следующие два оператора отображают данные после обновления: С05ТОМЕЙ.Иас!е. Сору.

Тзг)е. Айт!5Т.Иас/е С05ТОМЕК, ТЙАИ5АСТ!ОИ. ИОРК. АйТ!5Т С05ТОМЕЙ,СцзТопег!О - ТКАИ5АСТ!ОИ.Сцзгоз!ег!О АИО ТКЯИ5АСТ!ОИ.ИогЧ!0 = ИОРК.ИогК!О АИО ИОРК.АГТ!5110 = АЙТ!5Т.Агс150!О; Будьте виимательиы1 Слово ТКАХЗАСТ!ОМ ислалыуется здесь в двух зиачеииях; кзк имя одиай из таблиц в базе даииых галереи Ч/ечь К!бйе и как аиглийскае слава, абазизчзюцгее транзакцию— группу операторов, выполняемых как единое целое Конкретное зизчеаие ясно из контекста, иа имейте в виду, что возможна цутаиица.

С05ТОМЕЙ.Раве, АЙТ!5Т.Раве С05ТОМЕЙ, С05ТОМЕЙ АЙТ!5Т 1ИТ, АЙТ!5Т С05ТОМЕЙ.Сизьос/ег!О = С05ТОМЕЙ ЯЙТ15Т 1ИТ.Сцзьос/ег!0 АИО АЙТ15Т.Агь!5110 = С05ТОМЕЙ ЯЙТ!5Т !ИТ.Ягь!51!О; Обратите внимание, что требуется два 5О).-оператора, поскольку это представление базы данных имеет два многозначных пути. Оно не может быть представлено одним 5ЯЕ-оператора!и (или 5О1.-представлением). Результаты зтих запросов показаны на рис. 12.11. Данные покупательницы по имени Сьюзен Ву (Впзап Ъ'и) корректным образом записаны в таблицы ТРАМ5АСТ10М и С05ТОМЕЙ АРТ15Т 1МТ. БОС> ЗЕСЕСТ С!/БТОМЕП.Нагое, Сору, Т!ве, АПТ18Т.Ма!пе 2 ЕКОМ СОЗТОМЕРч ТМАМЗАСТ!ОМ, ЧЧОгсК, АКТ/ЗТ 3 ЧЧНЕПЕ СОБТОМЕП.Сцмоюег/0 = ТНАМЗАСТ1ОИ.Сиз!позе/!О АМО 4 ТМАМЗАСТ!ОМ.ЧЧолс10 = ЧЧОКК.ЧЧолс!О АМО 5 ЧЧОПК.А01зЮ = АКТ/БТАгаз00! ЗОС> БЕСЕСТ С!/ЗТОМЕР«мвюе, А!КТ/ЗТМаюе 2 РКСМ С!/ЗТОМЕй, С!/ЗТОМЕй АЙТ!ЗТ !МТ, АКТ18Т 3 ЧЧНЕМЕ СцЗТОМЕП.Сциотелп= С!/ЗТОМЕй Яг«7187 1МТСизсапзвЛО 4 АМО 5 АНТ1ЗТАгвзЮ = С!/ЗТОМЕП АКТ!БТ НЧТАП!з1!О; Рио.

12.11. Данные после добавпвиия нового клиента Логика приложения 449 Триггеры РОй ЕАСН КОН ОЕСЕАКЕ гоисоцпс тпьедег(2); ВЕ61й /* Считаем доступные строки */ ВЕ6!й ЕБ5Е /* Нуинс добавить новую строку */ ЕМО; ЕИО: / 448 Глава 12. Работа с базами данных в Огас)е Триггеры в Огас1е — зто процедуры на языке[ага или ВО[., которые вызываются при выполнении определенных действий с базой данных. Огас1е поддерживает несколько типов триггеров: одни запускаются командами 5О[., создающими в базе данных новые структуры, например таблицы, другие запускаются единожды на уровне таблицы, когда происходит изменение строк таблицы, третьи запускаются по одному разу для каждой измененной строки.

Последние называются строчными триггерами (гов сг[88егв); их мы и будем рассматривать здесь. Огас!е поддерживает три вида триггеров: предваряютцтте (триггеры ВЕРОНЕ), завершающие (триггеры АРТЕВ) н замещающие (триггеры 1[х[ЗТЕА[) ОЕ). Рассмотрим примеры каждого из этих типов. Пример предваряющего триггера В листинге 12.7 показан предваряюптий триггер, который используется для зада- ния значения строки перед обновлением. Чтобы использовать этот триттер, соз- дайте сначала в таблице ТКАМ5АСТ10М новый столбец под именем Азй[пдрпсе.

Это можно сделать командой ЯСТЕК ТАВСЕ ТКАМ5АСТ10й ЯОО Азйтпдргтсе Мцщбег(7,2); В листинге 12.7 триггер Метя Рпсе определен фразой Ве[оге [пвег[ ог Орбаае о[ Асс[ц[в[1[опРпсе ОМ ТКАМВАСТ!ОМ. Эта фраза, являясь правильной, содержит неопределенность. Она означает «ПЕРЕД (любой) вставкой в транзакции или ПЕРЕД обновлением АсдшябопРпсе в транзакции запустить триггер». Таким образом, триггер будет запущен при любой вставке или при обновлении столбца Аст[ц[в11[опРпсе. Обновления других столбцов не вызовут запуска триггера. Листинг 12.7. Предваряющий триггер (Чеиг Рг)се СКЕЯТЕ ОК КЕРЕАСЕ ТК166ЕК йеи Ргтсе ВЕЕОКЕ 1й5ЕКТ ОК ОРОАТЕ от Асщцтзтготопргтсе Ой ТЙАМ5АСТ!ОМ РОК ЕАСН КОИ /* Устанавливаем новое значение АвктпдРг[се перед вставкой или обновлением */ :пеи.двхтпдРгтсе .=:пеи.АсоотвтьтопРгтсе * 2: Фраза РОК ЕАСН КОИ (для каждой строки) указывает, что данный триггер является строчным.

Логика его работы проста: новое значение Авй[пдрпсе вычисляется как удвоенное ноное значение Асдц[в[с[опрпсе. Префикс тпе)м доступен только для триггеров. Он обозначает новое значение столбца в команде 1М5ЕКТ или ОРОАТЕ. Так,:пеиг.Асйц[в[1[опрпсе обозначает новое значение Асдц[в[С[опРпсе (заданное пользователем). Для обновлений н удалений существует также префикс:о[8, обозначающий значение столбца до выполнения команды ОРОАТЕ илн ОЕЕЕТЕ. Введите текст триггера в текстовом редакторе и сохраните его в файле под названием Тпд1.вй!. Затем в ЗО[.

Р1ов введите команду 5(атг Тпд1, и триггер скомпилируется. Если не будет ошибок компиляции, триггер будет сохранен в базе данных и станет активным. Обновите столбец Асдц[в[1[опРпсе и затем выберите строки, которые вы обновили. Значение столбца Авй[ од Рпсе будет задано триггером. Если у вас будут ошибки компиляции, вы сможете их увидеть, введя команду 5йоиг Епогв, как это делалось ранее с хранимыми процедурами. Пример завершающего триггера В листинге 12.8 показан пример завершаюп(его триггера.

Логика его такова: %ев ВЫВе определяет произнедение, предназначенное для продажи, как любое произведение, имеющее строку в таблице ТКАМ5АСТ10М с пустым значением Сцв(оглет[0. Задача этого триггера — гарантировать, что такая строка в таблице ТКАМ5АСПОМ будет существовать, когда в базу данных будет записываться произведение.

Этот триггер, запускаемый при создании строки в таблице )//ОКК, проверяет таблицу ТКАМ5АСТ10М и не производит никаких действий, если находит в ней подходящую строку, Листинг 12.8. Завершающий триггер Оп тл/олх )изет( СйЕЯТЕ ОК КЕРСЯСЕ ТК166ЕК Оп ИОКК [овеса АРТЕК [й5ЕКТ Ой НОКК 5ЕСЕСТ Ссыпь (*) !МТО гоисоцпь ЕКОМ ТКАМ5АСТ!Ой ННЕКЕ Сцвтощег[0 [5 МОСС АМО йога!05:пеи.йогй[0: !Е гоисоцпт > 0 Тлел /* Строка существует, ничего не предпринимаем */ ОВМ5 00[РОТ.РОТ С[НЕ (Подходящая строка в таблице ТКАМ5ЯСТ!Ой существует -- никаких действий не предпринято.'>; ЙЕТОКМ; 1й5ЕКТ !МТО ТКАМ5АСТ!Ой (ТгапзасСтоп!0. Оателсдцтге([, Иогй!О) УАСОЕ5 ([галя[0.йехьуа1. 5узОате, :пеи йогй[0); ЕМО [Е.

Логика приложения 451 ГОЙ ЕАСН ЙОИ 1Г .пен.т111е 5:о!се.11С1е ТНЕИ ЙЕТОЙН; ЕНО 1Г: т: ОРОАТЕ ИОЙК 5ЕТ Т111е - ;лен.т1С!е ИНЕЙЕ Т111е = :о1О.Ттв!е; ЕМО: Риа. 12.12. Данные ОоэтоглегРигслаяеэ 450 Глава 12. Работа с базами данных а Огас)е Логика работы триггера элементарна. Он подсчитывает количество подходящих строк, и если это количество больше нуля, то ничего не предпринимается; если оно равно нулю, в таблице ТЙАМ5АСТ10М создается новая строка с соответствуюшими данными. Обратите внимание на то, как префикс:лету используется в части 1/АЕОЕ5 оператора 1М5ЕЙТ. Пример замещающего триггера Замещающие триггеры используются для обновления представлений.

Рассмот- рим представление, определенное в листинге 12/К Оно соединяет в себе четыре таблицы и, как представление соединения, не может быть обновлено без помощи соответствующего триггера. Листинг 12.9. Определение представления Оцз1огпегРшсбаэеэ СЙЕАТЕ У!ЕИ Сцвгол1егРцгславев А5 5ЕЕЕСТ С05ТОНЕЙ.Нап1е Сцв!Мвве, Сору, Т1С1е, АЙТ15Т.Мале Агг1вткаве ГЙОН СО5ТОНЕЙ, ТЙАМ5АСТ!ОМ, ИОЙК.

Характеристики

Тип файла
DJVU-файл
Размер
9,56 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее