Материал: Using_MySql,_MS_SQL_Server_and_Oracle

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Генерация и наполнение базы данных

Таблица subscriptions:

sb_id

sb_subscriber

sb_book

sb_start

sb_finish

sb_is_active

100

1

3

2011-01-12

2011-02-12

N

2

1

1

2011-01-12

2011-02-12

N

3

3

3

2012-05-17

2012-07-17

Y

42

1

2

2012-06-11

2012-08-11

N

57

4

5

2012-06-11

2012-08-11

N

61

1

7

2014-08-03

2014-10-03

N

62

3

5

2014-08-03

2014-10-03

Y

86

3

1

2014-08-03

2014-09-03

Y

91

4

1

2015-10-07

2015-03-07

Y

95

1

4

2015-10-07

2015-11-07

N

99

4

4

2015-10-08

2025-11-08

Y

Странные комбинации дат выдачи и возврата книг (2015-10-07 / 2015-03-07 и 2015-10-08 / 2025-11-08) добавлены специально, чтобы продемонстрировать в дальнейшем особенности решения некоторых задач.

Также обратите внимание, что среди читателей, бравших книги, ни разу не встретился «Петров П.П.» (с идентификатором 2), это тоже понадобится нам в будущем.

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

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 15/545

Генерация и наполнение базы данных

После вставки данных в базы данных под управлением всех трёх СУБД стоит проверить, не ошиблись ли мы где-то. Выполним следующие запросы, которые позволят увидеть данные о книгах и работе библиотеки в человекочитаемом виде. Разбор этих запросов представлен в примере 11{66}, а пока — просто код:

MySQL і

1SELECT . 'b_name',

2'a_name',

3'g_name'

4 FROM 'books'

5JOIN 'm2m_books_authors' USING('b_id')

6JOIN 'authors' USING('a_id')

 

 

 

JOIN

'm2m_books_genres' USING('b_id'l

8

 

JOIN

'genres' USING('g id')

 

MS SQL

 

 

 

1

SELECT [b name],

 

2

 

[a name],

 

3

 

[g name]

 

4

FROM

[books]

 

5

 

JOIN [m2m books authors]

 

6

 

ON [books] [b id] = [m2m books authors] [b id]

 

7

 

JOIN [authors]

 

8

 

ON [m2m books authors] [a id] = [authors] [a id]

 

9

 

JOIN [m2m books genres]

 

10

 

ON [books] [b id] = [m2m books genres] [b id]

 

11

 

JOIN [genres]

 

12

 

ON [m2m books genres] [g id] = [genres] [g id]

 

 

 

 

 

Oracle

1SELECT "b name"

2"a name"

3"g name"

4

FROM "books"

 

5

JOIN

"m2m books authors"

6

ON "books" "b

id" = "m2m books authors" "b id"

7

JOIN

"authors"

 

8

ON "m2m books

authors" "a id" = "authors" "a id"

9JOIN "m2m books genres"

10ON "books" "b id" = "m2m books genres" "b id"

11JOIN "genres"

12ON "m2m books genres" "g id" = "genres" "g id"

После выполнения этих запросов получится результат, показывающий, как информация из разных таблиц объединяется в осмысленные наборы:

b_name

a_name

g_name

Евгений Онегин

А.С. Пушкин

Классика

Сказка о рыбаке и рыбке

А.С. Пушкин

Классика

Курс теоретической физики

Л.Д. Ландау

Классика

Курс теоретической физики

Е.М. Лифшиц

Классика

Искусство программирования

Д. Кнут

Классика

Евгений Онегин

А.С. Пушкин

Поэзия

Сказка о рыбаке и рыбке

А.С. Пушкин

Поэзия

Психология программирования

Д. Карнеги

Программирование

Психология программирования

Б. Страуструп

Программирование

Язык программирования С++

Б. Страуструп

Программирование

Искусство программирования

Д. Кнут

Программирование

Психология программирования

Д. Карнеги

Психология

Психология программирования

Б. Страуструп

Психология

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 16/545

Генерация и наполнение базы данных

Основание и империя

А. Азимов

Фантастика

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 17/545

Генерация и наполнение базы данных

Выполним ещё один запрос, чтобы посмотреть человекочитаемую информацию о том, кто и какие книги брал в библиотеке (подробнее об этом запросе сказано в примере 11{66}):

MySQL

1

SELECT 'b name'

2

 

's id',

3

 

's name',

4

 

'sb start',

5

 

'sb finish'

6

FROM

'books'

7

 

JOIN 'subscriptions'

8

 

ON 'b id' = 'sb book'

9

 

JOIN 'subscribers'

10

 

ON 'sb subscriber' = 's id'

 

 

MS SQL

 

1

SELECT [b name]

2

 

[s id],

3

 

[s name]

4

 

[sb start],

5

 

[sb finish]

6

FROM

[books]

7

 

JOIN [subscriptions]

8

 

ON [b id] = [sb book]

9

 

JOIN [subscribers]

10

 

ON [sb_subscriber] = [s_id]

 

 

 

Oracle I

1SELECT "b name"

2"s id",

3"s name"

4"sb start",

5"sb finish"

6

FROM "books"

7

JOIN "subscriptions"

8

ON "b id" = "sb book"

9JOIN "subscribers"

10ON "sb subscriber" = "s id"

Врезультате выполнения этих запросов получится такой результат:

b_name

s_id

s_name

sb_start

sb_finish

Евгений Онегин

1

Иванов И.И.

2011-01-12

2011-02-12

Сказка о рыбаке и рыбке

1

Иванов И.И.

2012-06-11

2012-08-11

Искусство программирования

1

Иванов И.И.

2014-08-03

2014-10-03

Психология программирования

1

Иванов И.И.

2015-10-07

2015-11-07

Основание и империя

1

Иванов И.И.

2011-01-12

2011-02-12

Основание и империя

3

Сидоров С.С.

2012-05-17

2012-07-17

Язык программирования С++

3

Сидоров С.С.

2014-08-03

2014-10-03

Евгений Онегин

3

Сидоров С.С.

2014-08-03

2014-09-03

Язык программирования С++

4

Сидоров С.С.

2012-06-11

2012-08-11

Евгений Онегин

4

Сидоров С.С.

2015-10-07

2015-03-07

Психология программирования

4

Сидоров С.С.

2015-10-08

2025-11-08

Обратите внимание, что «Сидоров С.С.» на самом деле — два разных человека (с идентификаторами 3 и 4).

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 18/545

Генерация и наполнение базы данных

В базу данных «Большая библиотека» поместим следующее количество автоматически сгенерированных записей:

в таблицу authors — 10’000 имён авторов (допускается дублирование имён);

в таблицу books — 100’000 названий книг (допускается дублирование названий);

в таблицу genres — 100 названий жанров (все названия уникальны);

в таблицу subscribers — 1’000’000 имён читателей (допускается дублирование имён);

в таблицу m2m_books_authors — 1’000’000 связей «автор-книга» (допускается соавторство);

в таблицу m2m_books_genres — 1’000’000 связей «книга-жанр» (допускается принадлежность книги к нескольким жанрам);

в таблицу subscriptions — 10’000’000 записей о выдаче/возврате книг (возврат всегда наступает не раньше выдачи, допускаются ситуации, когда один и тот же читатель брал одну и ту же книгу много раз — даже не вернув предыдущий экземпляр).

При проведении экспериментов по оценке скорости выполнения запросов все операции с СУБД будут выполняться в небуферизируемом режиме (когда результаты выполнения запросов не передаются в пространство памяти приложения, их выполнявшего), а также перед каждой итерацией (кроме исследования

2.1.3. EXP.A{21}) кэш СУБД будет очищен следующим образом:

MySQL |

 

 

1

RESET QUERY CACHE.............................................................

I

MS SQL I

 

 

. 1

... DBCC FREEPROCCACHE; ........................................................

 

 

DBCC DROPCLEANBUFFERS

 

. 1" -ALTER ..

SYSTEM . •iLusr5UiFER_C^7 ...............................................

 

 

ALTER SYSTEM FLUSH SHARED POOL;

 

Итак, наполнение баз данных успешно завершено и можно переходить к решению задач.

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 19/545

Источник: https://studfile.net/preview/16420333/