Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Распределенные базы данных. Лабораторный практикум

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
853 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА№6

5.Создайте триггер, который при вставке новой записи в таб- лицу «Штрафы» проверяет, находится ли уже точно такая же запись в таблице. В случае повторения выведите сообщение об ошибке.

6.Создайтепредставление(View) наосноветаблицы«Нарушения», отображающее водителей и их общую сумму штрафов. Напи- шите триггер (INSTEAD OF), который при вставке новой запи- си в созданное представление (INSERT INTO my_view) вставляет данные в таблицу «Нарушения». Проверьте, как при этом изме- нилисьданные в представлении.

21

ЛАБОРАТОРНАЯ РАБОТА 7

Триггеры

Триггеры лучшее средство для обеспечения низкоуровневой целостности данных. Однако они работают медленнее ограничений. Триггеры позволяют:

делать каскадные изменения зависимых таблиц в базе данных, обеспечивая более комплексную целостность данных, чем огра- ничение CHECK;

выводить сообщения об ошибках;

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

Создает триггеры только владелец базы данных. Это ограничение позволяет избежать случайного изменения структуры таблиц, спосо- бов связи с нимидругих объектов. Триггер представляетсобой весьма полезное и вто же время опасное средство.

Так, принеправильнойлогикеегоработыможнолегкоуничтожить целую базу данных, поэтому триггеры необходимо очень тщательно отлаживать.

В отличие от обычной подпрограммы, триггер выполняется неяв- но в каждом случае возникновения триггерного события, к тому же он не имеет аргументов [4].

Задание

1.Использовать базу данных «Аэропорт» из лабораторной ра- боты № 3.

2.Сформировать SQL запросы.

Запросы

1.Создайте триггер, который запрещает увольнять (DELETE) со- трудников в выходной день. При удалении сотрудника его дан- ные идата увольнениядолжны сохраняться в соответствующей таблице.

2.Создайте триггер, который при отмене рейса (DELETE) удаля- ет данные также из таблицы «Билеты на рейсы», а у пассажи- ров указанного рейса в поле номер рейса появляется значение «Отменен».

3.Создайте триггер, который при добавлении пассажира прове- ряет, существует ли подобный рейс и есть ли еще свободные

22

ЛАБОРАТОРНАЯ РАБОТА№7

места на нем. Если мест нет, то выведите соответствующее со- общение об ошибке. Если пассажир добавлен на рейс, то коли- чество билетов в продаже должно уменьшиться.

4.Создайте триггер, который не позволяет возвращать билеты на рейсы, которые были в прошлом. Если билет вернуть мож- но, то поместите записьо возврате в соответствующуютаблицу с указанием данных о рейсе и о пассажире, а также сумме воз- врата: если до даты вылета больше 30 дней или рейс был отме- нен, то возвращается полная стоимость, если больше недели – 50%, в остальных случаях – 25% от стоимости билета. Количе- ство свободных билетов на рейс должно увеличиться в случае успешного возврата.

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

23

ЛАБОРАТОРНАЯ РАБОТА 8

Работа с SQLite с помощью C++

SQLite – это реляционная база данных, запросы к которой можно осуществлять при помощи языка запросов SQL. База данных не под- держивает все особенности SQL и уступает в функциональности дру- гим развитым СУБД, но вполне подходит для хранения и извлечения информации.

Классические СУБД, такие как MySQL (а также MS SQL, Oracle, PostgreSQL), состоят из отдельного сервера, поддерживающего рабо- ту базы данных и прослушивающего определенный порт на предмет обращения клиентов. В качестве клиента может выступать расшире- ние PHP, реализующего интерфейс, с помощью которого осуществля- ются запросы к базе. Движок SQLite и интерфейс к ней реализованы в одной библиотеке, что увеличивает скорость выполнения запросов. Такой сервер часто называют встроенным [5].

Подключение библиотеки sqlite31

Для работы с SQLite необходима библиотека sqlite3. Если библио- тека sqlite3 не установлена, то скачайте с сайта SQLite (см. сноску 1)

и подключите в проект файлы: sqlite3.h, sqlite3.c, sqlite3ext.h.

Для работы в XCode (Mac OS) скачивать библиотеку не требуется, необходимотолько подключить ее в настройках проекта:

проект->targets->build phases->link binary->libsqlite3.0.tbd

Общее описания задания

1.Использовать базу данных Chinook2.

2.Выполнить задания с помощью С++ и SQL.

БазаданныхChinook (рис. 3) – этоучебнаяБД, описывающаяБДму- зыкального магазина.

БД Chinook содержит 11 таблиц:

employees – содержит личную информацию о сотрудниках, такую как Id сотрудника, фамилия и имя и др.;

customers – содержит информацию о покупателях;

1How to compile SQLite. URL: https://www.sqlite.org/howtocompile.html (дата обраще- ния: 03.12.2022).

2SQLite Sample Database. URL: https://www.sqlitetutorial.net/sqlite-sample-database/ (дата обращения: 03.12.2022).

24

ЛАБОРАТОРНАЯ РАБОТА№8

Рис. 3. Структура базы данных Chinook

25

П. Д. КУЛПЕППЕР, Е. Е. КОВАЛЕВ. РАСПРЕДЕЛЕННЫЕ БАЗЫ ДАННЫХ. ЛАБОРАТОРНЫЙ ПРАКТИКУМ

invoices – содержит заголовочную информацию об инвойсе: по- купатель, дата покупки, адрес выставления счета;

invoice_items – содержит подробную информацию о покупке;

artists – содержит информацию об исполнителях;

albums – содержит информацию об альбомах: название и испол- нитель;

media_types – содержитформаты ауодиозаписей, например mpeg;

genres – содержит музыкальный жанр (рок, джаз ит. п.);

tracks – содержит информация о песне: название, альбом, автор, длительность ит. п.;

playlists – содержит названия плейлистов;

playlist_track – содержит информацию, какие песни входят в ка- кие плейлисты.

Задания

1.Спомощьюбиблиотекиsqlite3 загрузитеБДChinook. Выполните тестовый запрос и выведите в консоль какую-нибудь таблицу из этой БД.

2.Сформируйте отчетдля указанного покупателя:

a)напишитезапрос, которыйполучаетдляуказанногопокупа- теля (по Customerid) список всех инвойсов;

b)запишите в файл адрес покупателя в формате (проверяйте

на NULL, чтобы избежать ошибок при выводе):

PostalCode

Country, State, City

Address

c)ниже по центру запишите обращение в формате:

To: FirstName LastName Phone

Email

d)далее с начала строки запишитеданные о покупках пользова- телявформате: InvoiceDate (толькодата, безвремени): Total

e)проведите черту под строчками из пункта d и выведите об-

щую сумму покупок.

ПримерфайладляпокупателясCustomerID=1 представленнарис. 4.

3.Доработайте предыдущую программу таким образом, чтобы пользовательмогвводитьимя и фамилию покупателя, по кото- рому нужно сформироватьотчет. Если указанного человека нет в БД, выведите соответствующее сообщение в консоль.

26

ЛАБОРАТОРНАЯ РАБОТА№8

Рис. 4. Пример отчета для покупателя

4.Модифицируйтепрограммутакимобразом, чтобыавтоматиче- скипечаталисьотчетыповсемпокупателямвотдельнойпапке. В результате должен получиться список файлов, оформленных, как в задании 2:

Aaron Mitchell.txt

Alexandre Rocha.txt

Astrid Gruber.txt

Bjørn Hansen.txt

Camille Bernard.txt

ит. д.

27

ЛАБОРАТОРНАЯ РАБОТА 9

Работа с SQLite с помощью C++, работа с таблицами, содержащими большой объем информации

Задания

1.СоздайтебазуданныхTestbigdata спомощьюпрограммынаC++.

2.Создайте таблицу, в которой будет содержаться информация о рейтинге фильмов. Для данной лабораторной работы доста- точно двух полей: Id и рейтинг фильма.

3.Внесите в созданную таблицу 104 строк: сгенерируйте случайные числасоднимзнакомпослезапятойот0 до10 вкачестверейтинга.

4.Напишите запрос, который позволяетвычислитьсредний, мак- симальный и минимальный рейтинг фильмов.

5.Выполните этот запрос в DB Browser for SQLite 5 раз. Вычислите среднее время (в миллисекундах) выполнения запроса.

6.Теперь выполните этот запрос с помощью программы на C++: чтобы правильно вычислить среднее время выполнения за- проса, необходимо сделать цикл, внутри которого выполняет- ся данный запрос. Посчитайте общее время (в миллисекундах) выполнения и вычислите среднее. Для этого задания можно воспользоваться библиотекой chrono3.

7.Подобным образом посчитайте, сколько в среднем выполняет- ся запрос, если втаблице будет 105 и 106 строк.

8.Заполните следующую таблицу (табл. 3) и сделайте вывод, как объем данных влияет на скорость выполнения запросов:

 

 

 

Таблица 3

Сравнение скорости выполнения запросов

 

 

 

 

Количествострок

 

Времявыполнения, мс

С++

 

DB Browser for SQLite

 

 

104

 

 

 

105

 

 

 

106

 

 

 

9.В отчете должен быть код с созданием БД и таблицы, заполне- нием таблицы данными и вычислением среднего времени вы- полнения запроса, атакже заполненнаятаблица из пункта 8.

3<chrono>. URL: https://learn.microsoft.com/en-us/cpp/standard-library/chrono?view=msvc-170 (датаобращения: 03.12.2022).

28

ЛАБОРАТОРНАЯ РАБОТА 10

Работа с SQLite с помощью C++

Задания

1.Используйте базу данных Chinook (см. лабораторную ра- боту № 8).

2.Предположим, что это база используется компанией, кото- рая занимается продажей музыкальных треков и альбомов. В основном треки продают по отдельности онлайн, но также пользователи (любители CD-дисков) могут заказать альбом на диске.

3.Для учета количества альбомов на дисках, которые есть в на- личии, создайте новую таблицу в базе данных Chinook. В таб- лице должны содержаться Id альбома и количество альбомов в магазине.

4.Заполните таблицу данными с помощью C++: случайным обра- зом выберите 20–30 альбомов (без повторений) и случайным образом заполните столбец, в котором указывается количество альбомов в магазине.

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

6.Создайте триггер, который будет вносить данные в таблицу из пункта 5 в случае, если в магазине в наличии остается мень- ше 2 единиц какого-либо альбома.

7.К сожалению, магазин может заказывать альбомы, только если в заказе будет не менее 5 альбомов. Поэтому напишите триг- гер, который будет отслеживать это условие и делать «заказ» альбомов. В результате таблица с заказами должна очищаться, а в таблице из пункта 3 должны обновляться данные о количе- стве альбомов.

8.Напишите программу, которая имитирует работу магазина. Сделайте небольшое меню, в котором пользователь может вы- брать альбом для покупки, оплатить или уйти.

Общие правила:

стоимость альбома формируется из общей стоимости всех тре- ков, входящих в данный альбом, плюс наценка 150%;

29

П. Д. КУЛПЕППЕР, Е. Е. КОВАЛЕВ. РАСПРЕДЕЛЕННЫЕ БАЗЫ ДАННЫХ. ЛАБОРАТОРНЫЙ ПРАКТИКУМ

если выбран альбом, которого нет в наличии (в таблице из пункта 3 количество равно 0), то должно выводиться соот- ветствующее сообщение, например «Выбранного альбома нет в наличии»;

если выбранный альбом отсутствует в таблице из пункта 3, выведите сообщение «Данный альбом нельзя приобрести на диске»;

если пользователь оплачивает покупку, то в БД должны проис- ходить соответствующие изменения втаблицах.

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]