Содержание
1. База данных «Борей»......................................................................................................... 3
1.1. Схема базы данных «Борей»..................................................................................... 3
1.2. Список поставщиков товаров группы «Рыбопродукты»...................................... 3
1.2.1. Определение состава выходного сообщения................................................... 3
1.2.2. Разработка модели процесса.............................................................................. 4
1.2.3. Общее описание процесса решения задачи..................................................... 4
1.2.4. Представление подсхемы базы данных............................................................ 5
1.2.5. Ручная обработка данных.................................................................................. 5
1.2.6. Формирование и отладка запроса..................................................................... 8
1.2.7. Подготовка запроса с использованием Конструктора.................................... 8
1.3. Клиенты, заказавшие товары на 1 ноября........................................................... 9
1.3.1. Определение состава выходного сообщения................................................... 9
1.3.2. Разработка модели процесса............................................................................ 10
1.3.3. Общее описание процесса решения задачи................................................... 10
1.3.4. Представление подсхемы базы данных для запроса..................................... 11
1.3.5. Ручная обработка данных................................................................................ 11
1.3.6. Формирование и отладка запроса................................................................... 13
1.3.7. Подготовка запроса в Конструкторе.............................................................. 13
2. База данных «Заказы на работы».................................................................................... 15
2.1. Схема базы данных «Заказы на работы»............................................................... 15
2.2. Необходимое оборудование для заказов клиентов из России............................. 15
2.2.1. Определение состава выходного сообщения................................................. 15
2.2.2. Разработка модели процесса............................................................................ 16
2.2.3. Общее описание процесса решения задачи................................................... 16
2.2.4. Представление подсхемы базы данных.......................................................... 17
2.2.5. Ручная обработка данных................................................................................ 17
2.2.6. Формирование и отладка запроса................................................................... 22
2.2.7. Подготовка запроса в режиме Конструктора................................................ 22
3. База данных «Расходы»................................................................................................... 24
3.1. Схема базы данных «Расходы»............................................................................... 24
3.2. Сведения о транспортных расходах....................................................................... 24
3.2.1. Определение состава выходного сообщения................................................. 24
3.2.2. Разработка модели процесса............................................................................ 25
3.2.3. Общее описание процесса решения задачи................................................... 25
3.2.4. Представление подсхемы данных................................................................... 26
3.2.5. Ручная обработка данных................................................................................ 26
3.2.6. Формирование и отладка запроса................................................................... 30
3.2.7. Подготовка запроса в Конструкторе.............................................................. 31
4. База данных «Бумаги»..................................................................................................... 32
4.1. Схема базы данных «Бумаги»................................................................................. 32
4.2. Определения наличия определенного количества определенной бумаги......... 32
4.2.1. Определение состава выходного сообщения................................................. 32
4.2.2. Разработка модели процесса............................................................................ 33
4.2.3. Общее описание процесса решения задачи................................................... 33
4.2.4. Представление подсхемы данных................................................................... 34
4.2.5. Ручная обработка данных................................................................................ 34
4.2.6. Формирование и отладка запроса................................................................... 38
4.2.7. Подготовка запроса в Конструкторе.............................................................. 39
Список источников.............................................................................................................. 40
1. База данных «Борей»
1.1. Схема базы данных «Борей»
База данных «Борей» имеет следующие связи между таблицами:
1.2. Список поставщиков товаров группы «Рыбопродукты»
Для определения поставщика определенного товара выдать список поставщиков товаров группы «Рыбопродукты», их телефоны и факсы.
1.2.1. Определение состава выходного сообщения
Исходя из результатов анализа информационной потребности, определим состав и структуру требуемого сообщения S [Поставщики товаров группы «Рыбопродукты»].
S (Типы.Категория, Поставщики.Название, Поставщики.ОбращатьсяК, Поставщикими.Телефон, Поставщики.Факс)
Поставщики рыбопродуктов |
||||
Категория |
Название |
Обращаться к |
Телефон |
Факс |
Реквизит «Категория» является обязательным по условию задачи, остальные поля используются в процедурах профилизации, сегментации и связи.
1.2.2. Разработка модели процесса
Определим состав полей и таблиц, используемых в запросе из приведенной в п. 1.1. схемы базы данных «Борей».
Поскольку сведения о поставщиках хранятся в таблице Поставщики, сведения о товарах – в таблице Товары, а типы товаров – перечислены в таблице Типы, то в запросе необходимо использовать перечисленные три таблицы, связанные между собой. Таблицы Поставщики и Товары связаны по полю КодПоставщика, а таблицы Товары и Типы по поля КодТипа.
На выходе представлено сообщение с определенной в пункте 1.2.1 структурой.
1.2.3. Общее описание процесса решения задачи
Получение выходного сообщения позволит уменьшить трудозатраты на выборку информации для получения сведений о поставщиках товаров группы «Рыбопродукты».
С позиции потребителя – пользователя запрос характеризуется как простой с поэтапным потреблением информации. Полученные по запросу данные могут быть экспортированы в Excel. При реализации в Access этот запрос является запросом на выборку.
Данные о Поставщиках являются справочными и обновляются при вводе информации о новом поставщике. Данные о Товарах и Типах обновляются при появлении нового товара или типа соответственно.
Данные одновременно необходимы многим потребителям, в связи с чем они размещаются на сервере сети в коллективно используемой базе данных, функционирующей под управлением Microsoft SQL Server.
Подготовка запроса в Access осуществляется в Конструкторе, так как данные находятся в связанных между собой таблицах. При формировании запроса автоматически генерируется SQL-код. SQL-запрос передается серверу, который возвращает клиенту результирующую таблицу. Процедура создания и исполнения запроса осуществляется на рабочей станции и на сервере сети.
1.2.4. Представление подсхемы базы данных
Таблица Товары имеет простой ключ КодТоварв, а таблицы Поставщики и Типы – простые ключи КодПоставщика и КодТипа соответственно. Тип межтабличных связей «один-ко-многим».
Целостность по значениям определяется отсутствием в таблице Товары таких товаров, поставщики и типы товаров, которых нет в таблицах Поставщики и Типы.
1.2.5. Ручная обработка данных
Процедуры реляционной обработки данных выполняются вручную. Представим исходные данные в таблицах.
Поставщики (фрагмент) |
||
Код поставщика |
Название |
Страна |
27 |
Escargots Nouveaux |
Франция |
14 |
Formaggi Fortini s.r.l. |
Италия |
29 |
Forots d'Erables |
Канада |
Товары (фрагмент) |
|||||||||
Код товара |
Марка |
Поставщик |
Тип |
Единица измерения |
Цена |
На складе |
Ожидается |
Минимальный запас |
ПоставкиПрекращены |
45 |
Gula Malacca |
Leka Trading |
Приправы |
20 пакетов по 2 кг |
875,25р. |
27 |
0 |
15 |
Нет |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
12 банок по 355 мл |
434,25р. |
85 |
0 |
10 |
Нет |
Типы (фрагмент) |
|||
Код типа |
Категория |
Описание |
Изображение |
7 |
Фрукты |
Сушеные и свежие фрукты |
|
8 |
Рыбопродукты |
Водоросли, крабы, устрицы, рыбы |
Результат выполнения реляционной операции произведения таблиц Поставщики и Товары (фрагмент):
Код поставщика |
Название |
Страна |
Код товара |
Марка |
Поставщик |
Тип |
27 |
Escargots Nouveaux |
Франция |
45 |
Gula Malacca |
Leka Trading |
Приправы |
14 |
Formaggi Fortini s.r.l. |
Италия |
45 |
Gula Malacca |
Leka Trading |
Приправы |
29 |
Forots d'Erables |
Канада |
45 |
Gula Malacca |
Leka Trading |
Приправы |
27 |
Escargots Nouveaux |
Франция |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
14 |
Formaggi Fortini s.r.l. |
Италия |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
29 |
Forots d'Erables |
Канада |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
Результат выполнения реляционной операции произведения таблиц Поставщики, Товары и Типы (фрагмент):
Код поставщика |
Название |
Страна |
Код товара |
Марка |
Поставщик |
Тип |
Код типа |
Категория |
27 |
Escargots Nouveaux |
Франция |
45 |
Gula Malacca |
Leka Trading |
Приправы |
7 |
Фрукты |
27 |
Escargots Nouveaux |
Франция |
45 |
Gula Malacca |
Leka Trading |
Приправы |
8 |
Рыбопродукты |
14 |
Formaggi Fortini s.r.l. |
Италия |
45 |
Gula Malacca |
Leka Trading |
Приправы |
7 |
Фрукты |
14 |
Formaggi Fortini s.r.l. |
Италия |
45 |
Gula Malacca |
Leka Trading |
Приправы |
8 |
Рыбопродукты |
29 |
Forots d'Erables |
Канада |
45 |
Gula Malacca |
Leka Trading |
Приправы |
7 |
Фрукты |
29 |
Forots d'Erables |
Канада |
45 |
Gula Malacca |
Leka Trading |
Приправы |
8 |
Рыбопродукты |
27 |
Escargots Nouveaux |
Франция |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
7 |
Фрукты |
27 |
Escargots Nouveaux |
Франция |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
8 |
Рыбопродукты |
14 |
Formaggi Fortini s.r.l. |
Италия |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
7 |
Фрукты |
14 |
Formaggi Fortini s.r.l. |
Италия |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
8 |
Рыбопродукты |
29 |
Forots d'Erables |
Канада |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
7 |
Фрукты |
29 |
Forots d'Erables |
Канада |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
8 |
Рыбопродукты |
Результат выполнения операции соединение – сцепление строк с совпадающими значениями полей Тип и Категория.
Код поставщика |
Название |
Страна |
Код товара |
Марка |
Поставщик |
Тип |
27 |
Escargots Nouveaux |
Франция |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
14 |
Formaggi Fortini s.r.l. |
Италия |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
29 |
Forots d'Erables |
Канада |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
Результат выполнения операции селекции – выбора, у которых поле Тип имеет значение Рыбопродукты.
Код поставщика |
Название |
Страна |
Код товара |
Марка |
Поставщик |
Тип |
27 |
Escargots Nouveaux |
Франция |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
14 |
Formaggi Fortini s.r.l. |
Италия |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
29 |
Forots d'Erables |
Канада |
42 |
Jack's New England Clam Chowder |
New England Seafood Cannery |
Рыбопродукты |
Результат выполнения операции проекции:
Код поставщика |
Название |
Страна |
27 |
Escargots Nouveaux |
Франция |
14 |
Formaggi Fortini s.r.l. |
Италия |
29 |
Forots d'Erables |
Канада |
Для получения в автоматизированном режиме таблицы с результатом выполнения операции произведения используется запрос:
SELECT Товары.КодТовара, Товары.КодПоставщика, Товары.КодТипа, Поставщики.КодПоставщика, Поставщики.Название, Типы.Категория
FROM Товары, Поставщики, Типы;
Для получения в автоматизированном режиме таблицы с результатом выполнения операции соединения используется следующий запрос:
SELECT Типы.*, Поставщики.*, Товары.*
FROM Типы INNER JOIN (Поставщики INNER JOIN Товары ON Поставщики.КодПоставщика = Товары.КодПоставщика) ON Типы.КодТипа = Товары.КодТипа;
Для получения в автоматизированном режиме таблицы с результатом выполнения операции селекции используется запрос:
SELECT Типы.*, Поставщики.*, Товары.*
FROM Типы INNER JOIN (Поставщики INNER JOIN Товары ON Поставщики.КодПоставщика = Товары.КодПоставщика) ON Типы.КодТипа = Товары.КодТипа
WHERE (Типы.Категория='Рыбопродукты');
Для получения в автоматизированном режиме таблицы с результатом операции проекции используется следующий запрос:
SELECT DISTINCT Типы.Категория, Поставщики.Название, Поставщики.ОбращатьсяК, Поставщики.Телефон, Поставщики.Факс
FROM Типы INNER JOIN (Поставщики INNER JOIN Товары ON Поставщики.КодПоставщика = Товары.КодПоставщика) ON Типы.КодТипа = Товары.КодТипа
WHERE (((Типы.Категория)="Рыбопродукты"));
1.2.6. Формирование и отладка запроса
Поскольку между таблицами Поставщики, Товары и Типы существуют связи «один-ко-многим», то для исключения повторяющихся строк следует использовать инструкцию SELECT DISTINCROW со следующей структурой:
SELECT DISTINCTROW Типы.Категория, Поставщики.Название, Поставщики.ОбращатьсяК, Поставщики.Телефон, Поставщики.Факс
FROM Типы INNER JOIN (Поставщики INNER JOIN Товары ON Поставщики.КодПоставщика = Товары.КодПоставщика) ON Типы.КодТипа = Товары.КодТипа
WHERE (((Типы.Категория)="Рыбопродукты"));
1.2.7. Подготовка запроса с использованием Конструктора
Для определения поставщика определенного товара выдать список поставщиков товаров группы «Рыбопродукты», их телефоны и факсы.
Запрос создадим при помощи Конструктора, в который переместим поле Категория из таблицы Типы, поля Название, ОбращатьсяК, Телефон и Факс из таблицы Поставщики.
Чтобы отбирались только поставщики группы рыбопродукты, зададим условие отбора «Рыбопродукты» для поля Категория.
В Конструкторе запрос примет вид:
Получим следующие данные о поставщиках рыбопродуктов:
Поставщики рыбопродуктов |
||||
Категория |
Название |
Обращаться к |
Телефон |
Факс |
Рыбопродукты |
Pavlova, Ltd. |
Ian Devling |
(03) 444-2343 |
(03) 444-6588 |
Рыбопродукты |
Nord-Ost-Fisch mbH |
Sven Petersen |
(04721) 8713 |
(04721) 8714 |
Рыбопродукты |
Svensk Sjofoda AB |
Michael Bjorn |
08-123 45 67 |
|
Рыбопродукты |
Svensk Sjofoda AB |
Michael Bjorn |
08-123 45 67 |
|
Рыбопродукты |
Svensk Sjofoda AB |
Michael Bjorn |
08-123 45 67 |
|
Рыбопродукты |
New England Seafood Cannery |
Robb Merchant |
(617) 555-3267 |
(617) 555-3389 |
Рыбопродукты |
New England Seafood Cannery |
Robb Merchant |
(617) 555-3267 |
(617) 555-3389 |
Рыбопродукты |
Lyngbysild |
Niels Petersen |
43844108 |
43844115 |
Рыбопродукты |
Lyngbysild |
Niels Petersen |
43844108 |
43844115 |
Рыбопродукты |
Escargots Nouveaux |
Marie Delamare |
85.57.00.07 |
|
Рыбопродукты |
Tokyo Traders |
Yoshi Nagase |
(03) 3555-5011 |
|
Рыбопродукты |
Mayumi's |
Mayumi Ohno |
(06) 431-7877 |
1.3. Клиенты, заказавшие товары на 1 ноября
Выдать список клиентов, заказавших товары на 1 ноября текущего года, их телефоны и факсы.
1.3.1. Определение состава выходного сообщения
Проанализировав информационную потребность, определим состав и структуру требуемого выходного сообщения S [Клиенты, заказавшие товары на 1 ноября].
S (Клиенты.Название, Заказы.ДатаНазначения)
Название |
Дата назначения |
Реквизит Название является обязательным по условию задачи.
1.3.2. Разработка модели процесса
На основании приведенной в пункте 1.1. схемы базы данных, определим состав таблиц и полей, используемых в этом запросе.
Так как сведения о клиентах хранятся в таблице Клиенты, а информация об их заказах – в таблице Заказы, то в запросе будут поля из обоих этих таблиц.
На выходе процесса представлено сообщение с определенной в предыдущем пункте структурой.
1.3.3. Общее описание процесса решения задачи
Получение выходного сообщения позволит сократить трудозатраты на выборку информации для выборки заказов клиентов на октябрь текущего года.
Для потребителя-пользователя запрос характеризуется как простой с поэтапным потреблением информации. Затем полученная информация может быть передана для анализа в Excel. При реализации в Access запрос будет являться запросом на выборку.
Данные о заказах клиентов являются справочными и обновляются при вводе данных о новом заказе.
Если данные необходимы многим потребителям, то они размещаются на сервере сети в коллективно базе данных, которая функционирует под управлением Microsoft SQL Server.
Подготовка запроса в СУБД Microsoft Access осуществляется в режиме Конструктора. При этом будет сгенерирован SQL-код, передаваемый серверу, который вернет клиенту результирующую таблицу.
1.3.4. Представление подсхемы базы данных для запроса
Таблица Заказы имеет простой ключ КодЗаказа, таблица Клиенты – простой ключ КодКлиента. Тип связи между таблицами «один-ко-многим». Связь – по полю КодКлиента (ключ связи). Целостность по значениям определяется отсутствием в таблице Заказы значения поля КодКлиента, которых нет в таблице Клиенты. Значения поля КодКлиента в таблице Заказы обновляются автоматически при изменении значений поля КодКлиента в таблице Клиенты.
1.3.5. Ручная обработка данных
Реляционная обработка данных выполняется вручную.
Представим исходные данные в таблицах:
Код клиента |
Название |
Обращаться к |
PARIS |
Paris specialites |
Marie Bertrand |
PERIC |
Pericles Comidas clasicas |
Guillermo Fernandez |
Заказы (фрагмент) |
|||||
Код заказа |
Клиент |
Сотрудник |
Дата размещения |
Дата назначения |
Дата исполнения |
10321 |
Island Trading |
Бабкина, Ольга |
03-10-1996 |
31-10-1996 |
11-10-1996 |
10322 |
Pericles Comidas clasicas |
Кралев, Петр |
04-10-1996 |
01-11-1996 |
23-10-1996 |
10323 |
Koniglich Essen |
Воронова, Дарья |
07-10-1996 |
04-11-1996 |
14-10-1996 |
Результат выполнения операции произведения (фрагмент):
Код заказа |
Клиент |
Сотрудник |
Дата размещения |
Дата назначения |
Дата исполнения |
Код клиента |
Название |
10321 |
Island Trading |
Бабкина, Ольга |
03-10-1996 |
31-10-1996 |
11-10-1996 |
PARIS |
Paris specialites |
10322 |
Pericles Comidas clasicas |
Кралев, Петр |
04-10-1996 |
01-11-1996 |
23-10-1996 |
PARIS |
Paris specialites |
10323 |
Koniglich Essen |
Воронова, Дарья |
07-10-1996 |
04-11-1996 |
14-10-1996 |
PARIS |
Paris specialites |
10321 |
Island Trading |
Бабкина, Ольга |
03-10-1996 |
31-10-1996 |
11-10-1996 |
PERIC |
Pericles Comidas clasicas |
10322 |
Pericles Comidas clasicas |
Кралев, Петр |
04-10-1996 |
01-11-1996 |
23-10-1996 |
PERIC |
Pericles Comidas clasicas |
10323 |
Koniglich Essen |
Воронова, Дарья |
07-10-1996 |
04-11-1996 |
14-10-1996 |
PERIC |
Pericles Comidas clasicas |
Результат выполнения операции соединения – сцепление строк с совпадающими значениями полей Клиент и Название.
Код заказа |
Клиент |
Сотрудник |
Дата размещения |
Дата назначения |
Дата исполнения |
Код клиента |
Название |
10322 |
Pericles Comidas clasicas |
Кралев, Петр |
04-10-1996 |
01-11-1996 |
23-10-1996 |
PERIC |
Pericles Comidas clasicas |
Результат выполнения операции селекции – выбора строка, в которых поле Дата назначения равно 01-11-1997.
Код заказа |
Клиент |
Сотрудник |
Дата размещения |
Дата назначения |
Дата исполнения |
Код клиента |
Название |
10322 |
Pericles Comidas clasicas |
Кралев, Петр |
04-10-1996 |
01-11-1996 |
23-10-1996 |
PERIC |
Pericles Comidas clasicas |
Результат выполнения операции проекции:
Код заказа |
Клиент |
Дата назначения |
10322 |
Pericles Comidas clasicas |
01-11-1996 |
Для получения в автоматизированном режиме таблицы с результатом выполнения операции произведения используется следующий запрос:
SELECT Клиенты.*,Заказы.* FROM Клиенты, Заказы;
Для получения в автоматизированном режиме таблицы с результатом выполнения операции произведения используется запрос:
SELECT Клиенты.*,Заказы.* FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента=Заказы.КодКлиента;
Для получения в автоматизированном режиме таблицы с результатом выполнения операции селекции используется следующий запрос:
SELECT Клиенты.*,Заказы.* FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента=Заказы.КодКлиента WHERE ((Заказы.ДатаНазначения)=#11/01/1996#);
Для получения в автоматизированном режиме таблицы с результатом выполнения операции проекции используется запрос:
SELECT DISTINCT Клиенты.*,Заказы.* FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента=Заказы.КодКлиента WHERE ((Заказы.ДатаНазначения)=#11/01/1996#);
1.3.6. Формирование и отладка запроса
Так как между таблицами Клиенты и Заказы существует связь «один-ко-многим», то для исключения повторяющихся записей надо использовать запрос, содержащий следующую инструкцию:
SELECT DISTINCTROW Клиенты.*,Заказы.ДатаНазначения FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента=Заказы.КодКлиента WHERE ((Заказы.ДатаНазначения)=#11/01/1997#);
1.3.7. Подготовка запроса в Конструкторе
Для запрос возьмем поле Название из таблицы Клиенты и поле ДатаНазначения из таблицы Заказы.
Добавим три дополнительных поля для выделения числа, месяца и года из даты. Для этого в заголовки 3 пустых столбцов введем формулы: Число: Day([ДатаНазначения]), Месяц: Month([ДатаНазначения]) и Год: Year([ДатаНазначения]).
Для созданного поля Число введем условие отбора 1, а для созданного поля Месяц введем условие отбора 11.
После чего в Конструкторе запрос будет иметь вид:
Или на SQL:
SELECT Клиенты.Название, Заказы.ДатаНазначения, Day([ДатаНазначения]) AS Число, Month([ДатаНазначения]) AS Месяц, Year([ДатаНазначения]) AS Год
FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента = Заказы.КодКлиента
WHERE (((Day([ДатаНазначения]))=1) AND ((Month([ДатаНазначения]))=11));
По запросу получим данные о клиентах, заказавших товары на 1 ноября:
Клиенты заказавшие товары на 1 ноября |
||||
Название |
Дата назначения |
Число |
Месяц |
Год |
Pericles Comidas clasicas |
01-11-1996 |
1 |
11 |
1996 |
2. База данных «Заказы на работы»
2.1. Схема базы данных «Заказы на работы»
В базе данных «Заказы на работы» установлены следующие связи между таблицами:
2.2. Необходимое оборудование для заказов клиентов из России
Получить сведения о необходимом оборудовании по заказам клиентов из России на определенный месяц текущего года.
2.2.1. Определение состава выходного сообщения
Исходя из результатов анализа информационной потребности, определим состав и структуру выходного сообщения S [Необходимое оборудование для заказов клиентов из России за определенный месяц].
S (Клиенты.НазваниеКомпании, Клиенты.Город, Клиенты.Страна/Регион, Оборудование.НазваниеОборудования, Заказы на работы.ДатаНазначения)
Название |
Город |
Страна/регион |
Название |
Дата назначения |
Месяц |
Реквизит Страна / регион является обязательным по условию задачи, остальные реквизиты используются в процедурах профилизации, сегментации и связи.
2.2.2. Разработка модели процесса
Из приведенной в пункте 2.1 схемы базы данных «Заказы на работы» определим состав полей и таблиц, используемых в запросе. Представим в графическом виде обобщенную функционально-технологическую схему задачи:
2.2.3. Общее описание процесса решения задачи
Получение выходного сообщения позволит уменьшить трудозатраты на выборку информации для анализа требуемого оборудования для выполнения заказов клиентов из России в определенный период.
С позиции потребителя – пользователя запрос характеризуется как простой с поэтапным потреблением информации. Для работы с данными результирующая таблица может быть экспортирована в Excel. В Access запрос будет создан как запрос на выборку.
Данные о клиентах, их заказах и необходимом оборудовании являются справочными и обновляются при появлении новых клиентов или их заказов.
Данные, необходимые многим потребителям, размещаются на сервере сети в корпоративной базе данных, которая функционирует под управлением Microsoft SQL Server.
Подготовка запроса в Access выполняется при помощи Конструктора запроса.
2.2.4. Представление подсхемы базы данных
Таблица Заказы на работы имеет простой ключ КодЗаказа, таблица Оборудование – КодОборудования, таблица Необходимое оборудование – КодНеобходимогоОборудования, таблица Клиенты – КодКлиента. Между 4 таблицами имеются связи типа «один-ко-многим».
2.2.5. Ручная обработка данных
Реляционную обработку данных проведем вручную. Представим исходные данные в таблицах:
Оборудование |
|||
Код оборудования |
Название |
Цена |
Описание |
1 |
Компьютер |
19 630,00р. |
ПК |
2 |
Принтер |
9 650,00р. |
Струйный |
3 |
Станок деревообрабатывающий |
8 530,00р. |
Станок |
4 |
Сварочный аппарат |
4 633,00р. |
Сварочник |
5 |
Краскопульт |
1 200,00р. |
Краскопульт |
Клиенты |
||
Код клиента |
Название |
Страна/регион |
1 |
Автосервис |
Россия |
2 |
Сибэнерго |
Россия |
3 |
Салон красоты |
Россия |
4 |
Трикотажное ателье |
Россия |
5 |
Фотосалон |
Беларусь |
Заказы |
|
Код заказа |
Код клиента |
2 |
Фотосалон |
3 |
Салон красоты |
4 |
Автосервис |
5 |
Сибэнерго |
6 |
Трикотажное ателье |
Необходимое оборудование |
||||
Код |
Код заказа |
Код оборудования |
Количество |
Цена |
2 |
4 |
Краскопульт |
1 |
10 340,00р. |
3 |
3 |
Сварочный аппарат |
3 |
1 335,00р. |
4 |
2 |
Станок деревообрабатывающий |
1 |
2 632,00р. |
5 |
2 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
6 |
6 |
Принтер |
1 |
9 650,00р. |
7 |
5 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
8 |
6 |
Компьютер |
1 |
19 630,00р. |
Результат выполнения операции произведения таблиц Заказы и Клиенты:
Код заказа |
Код клиента |
Название |
Страна / регион |
2 |
Фотосалон |
Автосервис |
Россия |
2 |
Фотосалон |
Сибэнерго |
Россия |
2 |
Фотосалон |
Салон красоты |
Россия |
2 |
Фотосалон |
Трикотажное ателье |
Россия |
2 |
Фотосалон |
Фотосалон |
Беларусь |
3 |
Салон красоты |
Автосервис |
Россия |
3 |
Салон красоты |
Сибэнерго |
Россия |
3 |
Салон красоты |
Салон красоты |
Россия |
3 |
Салон красоты |
Трикотажное ателье |
Россия |
3 |
Салон красоты |
Фотосалон |
Беларусь |
4 |
Автосервис |
Автосервис |
Россия |
4 |
Автосервис |
Сибэнерго |
Россия |
4 |
Автосервис |
Салон красоты |
Россия |
4 |
Автосервис |
Трикотажное ателье |
Россия |
4 |
Автосервис |
Фотосалон |
Беларусь |
5 |
Сибэнерго |
Автосервис |
Россия |
5 |
Сибэнерго |
Сибэнерго |
Россия |
5 |
Сибэнерго |
Салон красоты |
Россия |
5 |
Сибэнерго |
Трикотажное ателье |
Россия |
5 |
Сибэнерго |
Фотосалон |
Беларусь |
6 |
Трикотажное ателье |
Автосервис |
Россия |
6 |
Трикотажное ателье |
Сибэнерго |
Россия |
6 |
Трикотажное ателье |
Салон красоты |
Россия |
6 |
Трикотажное ателье |
Трикотажное ателье |
Россия |
6 |
Трикотажное ателье |
Фотосалон |
Беларусь |
Результат выполнения операции соединения – сцепление строк с совпадающими значениями полей Код клиента и Название:
Код заказа |
Название |
Страна / регион |
2 |
Фотосалон |
Беларусь |
3 |
Салон красоты |
Россия |
4 |
Автосервис |
Россия |
5 |
Сибэнерго |
Россия |
6 |
Трикотажное ателье |
Россия |
Результат выполнения операции селекции – выбора строк, в которых поле Страна / регион имеет значение Россия:
Код заказа |
Название |
Страна / регион |
3 |
Салон красоты |
Россия |
4 |
Автосервис |
Россия |
5 |
Сибэнерго |
Россия |
6 |
Трикотажное ателье |
Россия |
Теперь выполним операцию произведения для полученной только что таблицы и таблицы Необходимое оборудование:
Код |
Код заказа |
Код оборудования |
Количество |
Цена |
Код заказа |
Название |
Страна / регион |
2 |
4 |
Краскопульт |
1 |
10 340,00р. |
3 |
Салон красоты |
Россия |
3 |
3 |
Сварочный аппарат |
3 |
1 335,00р. |
3 |
Салон красоты |
Россия |
4 |
2 |
Станок деревообрабатывающий |
1 |
2 632,00р. |
3 |
Салон красоты |
Россия |
5 |
2 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
3 |
Салон красоты |
Россия |
6 |
6 |
Принтер |
1 |
9 650,00р. |
3 |
Салон красоты |
Россия |
7 |
5 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
3 |
Салон красоты |
Россия |
8 |
6 |
Компьютер |
1 |
19 630,00р. |
3 |
Салон красоты |
Россия |
2 |
4 |
Краскопульт |
1 |
10 340,00р. |
4 |
Автосервис |
Россия |
3 |
3 |
Сварочный аппарат |
3 |
1 335,00р. |
4 |
Автосервис |
Россия |
4 |
2 |
Станок деревообрабатывающий |
1 |
2 632,00р. |
4 |
Автосервис |
Россия |
5 |
2 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
4 |
Автосервис |
Россия |
6 |
6 |
Принтер |
1 |
9 650,00р. |
4 |
Автосервис |
Россия |
7 |
5 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
4 |
Автосервис |
Россия |
8 |
6 |
Компьютер |
1 |
19 630,00р. |
4 |
Автосервис |
Россия |
2 |
4 |
Краскопульт |
1 |
10 340,00р. |
5 |
Сибэнерго |
Россия |
3 |
3 |
Сварочный аппарат |
3 |
1 335,00р. |
5 |
Сибэнерго |
Россия |
4 |
2 |
Станок деревообрабатывающий |
1 |
2 632,00р. |
5 |
Сибэнерго |
Россия |
5 |
2 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
5 |
Сибэнерго |
Россия |
6 |
6 |
Принтер |
1 |
9 650,00р. |
5 |
Сибэнерго |
Россия |
7 |
5 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
5 |
Сибэнерго |
Россия |
8 |
6 |
Компьютер |
1 |
19 630,00р. |
5 |
Сибэнерго |
Россия |
2 |
4 |
Краскопульт |
1 |
10 340,00р. |
6 |
Трикотажное ателье |
Россия |
3 |
3 |
Сварочный аппарат |
3 |
1 335,00р. |
6 |
Трикотажное ателье |
Россия |
4 |
2 |
Станок деревообрабатывающий |
1 |
2 632,00р. |
6 |
Трикотажное ателье |
Россия |
5 |
2 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
6 |
Трикотажное ателье |
Россия |
6 |
6 |
Принтер |
1 |
9 650,00р. |
6 |
Трикотажное ателье |
Россия |
7 |
5 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
6 |
Трикотажное ателье |
Россия |
8 |
6 |
Компьютер |
1 |
19 630,00р. |
6 |
Трикотажное ателье |
Россия |
Результат выполнения операции соединения – сцепление строк с совпадающими значениями полей Код заказа:
Код |
Код заказа |
Код оборудования |
Количество |
Цена |
Название |
Страна / регион |
3 |
3 |
Сварочный аппарат |
3 |
1 335,00р. |
Салон красоты |
Россия |
2 |
4 |
Краскопульт |
1 |
10 340,00р. |
Автосервис |
Россия |
7 |
5 |
Станок деревообрабатывающий |
1 |
8 530,00р. |
Сибэнерго |
Россия |
6 |
6 |
Принтер |
1 |
9 650,00р. |
Трикотажное ателье |
Россия |
8 |
6 |
Компьютер |
1 |
19 630,00р. |
Трикотажное ателье |
Россия |
Результат выполнения операции проекции:
Код |
Код оборудования |
Страна / регион |
3 |
Сварочный аппарат |
Россия |
2 |
Краскопульт |
Россия |
7 |
Станок деревообрабатывающий |
Россия |
6 |
Принтер |
Россия |
8 |
Компьютер |
Россия |
Для получения в автоматизированном режиме таблицы с результатом выполнения операции произведения используется запрос:
SELECT Оборудование.*,[Необходимое оборудование].*,[Заказы на работы].*, Клиенты.* FROM Оборудование, [Необходимое оборудование], [Заказы на работы], Клиенты;
Для получения в автоматизированном режиме таблицы с результатом операции соединения используется запрос:
SELECT Оборудование.*,[Необходимое оборудование].*,[Заказы на работы].*, Клиенты.* FROM Оборудование INNER JOIN ((Клиенты INNER JOIN [Заказы на работы] ON Клиенты.КодКлиента = [Заказы на работы].КодКлиента) INNER JOIN [Необходимое оборудование] ON [Заказы на работы].КодЗаказа = [Необходимое оборудование].КодЗаказа) ON Оборудование.КодОборудования = [Необходимое оборудование].КодОборудования;
Для получения в автоматизированном режиме таблицы с результатом выполнения селекции используется запрос:
SELECT Клиенты.НазваниеКомпании, Клиенты.Город, Клиенты.[Страна/регион], Оборудование.НазваниеОборудования, [Заказы на работы].ДатаНазначения, Month([ДатаНазначения]) AS Месяц
FROM Оборудование INNER JOIN ((Клиенты INNER JOIN [Заказы на работы] ON Клиенты.КодКлиента = [Заказы на работы].КодКлиента) INNER JOIN [Необходимое оборудование] ON [Заказы на работы].КодЗаказа = [Необходимое оборудование].КодЗаказа) ON Оборудование.КодОборудования = [Необходимое оборудование].КодОборудования
WHERE (((Клиенты.[Страна/регион])="Россия") AND ((Month([ДатаНазначения]))=[Введите месяц:]));
Для выполнения операции проекции:
SELECT DISTINCT Клиенты.НазваниеКомпании, Клиенты.Город, Клиенты.[Страна/регион], Оборудование.НазваниеОборудования, [Заказы на работы].ДатаНазначения, Month([ДатаНазначения]) AS Месяц
FROM Оборудование INNER JOIN ((Клиенты INNER JOIN [Заказы на работы] ON Клиенты.КодКлиента = [Заказы на работы].КодКлиента) INNER JOIN [Необходимое оборудование] ON [Заказы на работы].КодЗаказа = [Необходимое оборудование].КодЗаказа) ON Оборудование.КодОборудования = [Необходимое оборудование].КодОборудования
WHERE (((Клиенты.[Страна/регион])="Россия") AND ((Month([ДатаНазначения]))=[Введите месяц:]));
2.2.6. Формирование и отладка запроса
Так как между таблицами Клиенты, Оборудование и Заказы на работы установлены связи типа «один-ко-многим», то для исключения повторяющихся строк, следует использовать следующую инструкцию:
SELECT DISTINCTROW Клиенты.НазваниеКомпании, Клиенты.Город, Клиенты.[Страна/регион], Оборудование.НазваниеОборудования, [Заказы на работы].ДатаНазначения, Month([ДатаНазначения]) AS Месяц
FROM Оборудование INNER JOIN ((Клиенты INNER JOIN [Заказы на работы] ON Клиенты.КодКлиента = [Заказы на работы].КодКлиента) INNER JOIN [Необходимое оборудование] ON [Заказы на работы].КодЗаказа = [Необходимое оборудование].КодЗаказа) ON Оборудование.КодОборудования = [Необходимое оборудование].КодОборудования
WHERE (((Клиенты.[Страна/регион])="Россия") AND ((Month([ДатаНазначения]))=[Введите месяц:]));
2.2.7. Подготовка запроса в режиме Конструктора
Создание запроса проведем при помощи Конструктора, в который добавим поля НазваниеКомпании, Город, Страна/Регион из таблицы Клиенты, поле НазваниеОборудование из таблицы Оборудование и поле ДатаНазначения из таблицы Заказы на работы.
Для определения месяца из даты в заголовок пустого поля бланка запроса введем выражение Месяц: Month([ДатаНазначения]). Для этого поля зададим условие отбора [Введите месяц:], которое будет запрашивает интересуемый месяц.
Чтобы отобразить оборудования, требуемое для заказов клиентов из России, введем условие отбора «Россия» для поля Страна / регион.
В Конструкторе запроса получим:
При запуске запроса, будет выдано на экран окно для ввода интересуемого месяца:
После нажатия Ok получим:
ОборудованиеДляРоссии |
|||||
Название |
Город |
Страна/регион |
Название |
Дата назначения |
Месяц |
Салон красоты |
Москва |
Россия |
Сварочный аппарат |
30.05.2005 |
5 |
3. База данных «Расходы»
3.1. Схема базы данных «Расходы»
В базе данных «Расходы» установлены следующие связи между таблицами типа «один-ко-многим»:
3.2. Сведения о транспортных расходах
Для использования и последующего анализа получить сведения о транспортных расходах в определенном месяце текущего года.
3.2.1. Определение состава выходного сообщения
Из анализа результатов информационной потребности, определим состав и структуру требуемого сообщения S [Сведения о транспортных расходах].
S ([Отчеты о расходах].КодОтчетаОРасходах, Сотрудники.Имя, Сотрудники.Фамилия, Сотрудники.Должность, [Типы расходов].КатегорияРасходов, [Отчеты о расходах].ДатаВыставления, [Сведения о расходах].СуммаСтатьиРасходов).
Затраты на автотранспорт |
||||||
Код отчета |
Имя |
Фамилия |
Должность |
Тип расходов |
Дата |
Сумма расходов |
Реквизит Тип расходов является обязательным по условию, а остальные используются в процедурах сегментации и связи.
3.2.2. Разработка модели процесса
Определим состав полей и таблиц, используемых в запросе, исходя из схемы базы данных, приведенной в пункте 3.1.
Так как сведения о типах расходов хранятся в таблице Типы расходов, сведения о сотрудника – в таблице Сотрудники, сведения о расходах – в таблице Сведения о расходах, а сведения об отчетах – в таблице Отчеты о расходах, то в запросе будут использованы поля из всех перечисленных 4 таблиц.
На выходе процесса представлено сообщение с определенной выше структурой.
3.2.3. Общее описание процесса решения задачи
Получение выходного сообщения позволит уменьшить трудозатраты на выборку информации о затратах на транспорт за определенный период.
Для потребителя-пользователя этот запрос характеризуется как простой с поэтапным потреблением информации. Полученные по запросу данные могут быть экспортированы в Excel для анализа. В Access этот запрос является запросом на выборку.
Все исходные данные, участвующие в запросе, обновляются при занесении новых записей.
Данные размещаются на сервера сети для возможности доступа к ним многих пользователей.
Подготовка запроса в Microsoft Access выполняется в режиме Конструктора.
3.2.4. Представление подсхемы данных
Таблица Сведения о расходах имеет простой ключ КодСведенийО Расходах, таблица Типы расходов – КодТипаРасходов, таблица Отчеты о расходах – КодОтчетаОРасходах, таблица Сотрудники – КодСотрудника.
3.2.5. Ручная обработка данных
Выполним вручную процедуру реляционной обработки данных. Представим исходные данные в таблицах:
Типы расходов |
||
Код типа расходов |
Тип расходов |
Учетный номер |
1 |
Оплата служащим |
1 |
2 |
Оплата помещения |
2 |
3 |
Оплата автотранспорта |
3 |
4 |
Культурно-развлекательные мероприятия |
4 |
Сотрудники |
|||||||||||||
Код сотрудника |
Номер паспорта |
Табельный номер |
Имя |
Фамилия |
Должность |
Внутренний |
Адрес |
Город |
Регион |
Область |
Индекс |
Страна/ регион |
Рабочий телефон |
1 |
52 00 125425 |
1 |
Николай |
Волков |
Директор |
9-90 |
ул. Лосоностровская, 54 |
Москва |
Россия |
Московская |
107150 |
Россия |
125-00-65 |
3 |
25 78 125478 |
2 |
Мария |
Петрова |
Бухгалтер |
5-45 |
ул. Ватутина |
Подольск |
Россия |
Московская |
142300 |
Россия |
68-96-96 |
4 |
98 45 123476 |
3 |
Олег |
Пузов |
Инженер |
6-46 |
пр-т Космонавтов |
Королев |
Россия |
Московская |
141070 |
Россия |
513-02-56 |
5 |
15 08 963852 |
4 |
Вадим |
Ширшин |
Электрик |
7-99 |
ул. Ногина |
Ногинск |
Россия |
Московская |
143652 |
Россия |
85-98-74 |
Сведения о расходах |
|||||
Код расходов |
Код отчета |
Код типа расходов |
Сумма расходов |
Описание расходов |
Дата расходов |
1 |
1 |
Оплата служащим |
1 000,00р. |
Оплата за ремонт |
05.02.2005 |
2 |
2 |
Культурно-развлекательные мероприятия |
500,00р. |
Оплата за билеты |
10.02.2005 |
3 |
3 |
Оплата автотранспорта |
100,00р. |
Оплата за автотранспорт |
10.02.2005 |
4 |
4 |
Культурно-развлекательные мероприятия |
2 550,00р. |
Оплата за кафе |
25.02.2005 |
Отчеты о расходах |
||||||||
Код отчета |
Код сотрудника |
Тип расходов |
Название |
Описание отчета |
Дата |
Задаток |
Отдел оплаты |
Оплачено |
1 |
Петрова, Мария |
4 |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
2 |
Волков, Николай |
1 |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
3 |
Пузов, Олег |
2 |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
4 |
Ширшин, Вадим |
1 |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
Выполним операцию произведение таблиц Отчеты о расходах и Типы расходов
Код отчета |
Код сотрудника |
Тип расходов |
Название |
Описание отчета |
Дата |
Задаток |
Отдел оплаты |
Оплачено |
Код типа расходов |
Тип расходов |
1 |
Петрова, Мария |
4 |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
1 |
Оплата служащим |
2 |
Волков, Николай |
1 |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
1 |
Оплата служащим |
3 |
Пузов, Олег |
2 |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
1 |
Оплата служащим |
4 |
Ширшин, Вадим |
1 |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
1 |
Оплата служащим |
1 |
Петрова, Мария |
4 |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
2 |
Оплата помещения |
2 |
Волков, Николай |
1 |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
2 |
Оплата помещения |
3 |
Пузов, Олег |
2 |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
4 |
Ширшин, Вадим |
1 |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
2 |
Оплата помещения |
1 |
Петрова, Мария |
4 |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
3 |
Оплата автотранспорта |
2 |
Волков, Николай |
1 |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
3 |
Оплата автотранспорта |
3 |
Пузов, Олег |
2 |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
3 |
Оплата автотранспорта |
4 |
Ширшин, Вадим |
1 |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
3 |
Оплата автотранспорта |
1 |
Петрова, Мария |
4 |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
4 |
Культурно-развлекательные мероприятия |
2 |
Волков, Николай |
1 |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
4 |
Культурно-развлекательные мероприятия |
3 |
Пузов, Олег |
2 |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
4 |
Культурно-развлекательные мероприятия |
4 |
Ширшин, Вадим |
1 |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
4 |
Культурно-развлекательные мероприятия |
Теперь выполним операцию соединения – сцепление строк с совпадающими значениями полей Тип расходов и Код типа расходов:
Код отчета |
Код сотрудника |
Название |
Описание отчета |
Дата |
Задаток |
Отдел оплаты |
Оплачено |
Код типа расходов |
Тип расходов |
2 |
Волков, Николай |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
1 |
Оплата служащим |
4 |
Ширшин, Вадим |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
1 |
Оплата служащим |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
1 |
Петрова, Мария |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
4 |
Культурно-развлекательные мероприятия |
Далее выполним операцию сцепление полученных выше данных с данными таблицы Сведения о расходах:
Код отчета |
Код сотрудника |
Название |
Описание отчета |
Дата |
Задаток |
Отдел оплаты |
Опла чено |
Код типа расходов |
Тип расходов |
Код расходов |
Код отчета |
Код типа расходов |
Сумма расходов |
Дата расходов |
2 |
Волков, Николай |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
1 |
Оплата служащим |
1 |
1 |
Оплата служащим |
1 000,00р. |
Оплата за ремонт |
4 |
Ширшин, Вадим |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
1 |
Оплата служащим |
1 |
1 |
Оплата служащим |
1 000,00р. |
Оплата за ремонт |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
1 |
1 |
Оплата служащим |
1 000,00р. |
Оплата за ремонт |
1 |
Петрова, Мария |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
4 |
Культурно-развлека тельные мероприятия |
1 |
1 |
Оплата служащим |
1 000,00р. |
Оплата за ремонт |
2 |
Волков, Николай |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
1 |
Оплата служащим |
2 |
2 |
Культурно-развлекательные мероприятия |
500,00р. |
10.02.2005 |
4 |
Ширшин, Вадим |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
1 |
Оплата служащим |
2 |
2 |
Культурно-развлекательные мероприятия |
500,00р. |
10.02.2005 |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
2 |
2 |
Культурно-развлекательные мероприятия |
500,00р. |
10.02.2005 |
1 |
Петрова, Мария |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
4 |
Культурно-развлека тельные мероприятия |
2 |
2 |
Культурно-развлекательные мероприятия |
500,00р. |
10.02.2005 |
2 |
Волков, Николай |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
1 |
Оплата служащим |
3 |
3 |
Оплата автотранспорта |
100,00р. |
10.02.2005 |
4 |
Ширшин, Вадим |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
1 |
Оплата служащим |
3 |
3 |
Оплата автотранспорта |
100,00р. |
10.02.2005 |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
3 |
3 |
Оплата автотранспорта |
100,00р. |
10.02.2005 |
1 |
Петрова, Мария |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
4 |
Культурно-развлека тельные мероприятия |
3 |
3 |
Оплата автотранспорта |
100,00р. |
10.02.2005 |
2 |
Волков, Николай |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
1 |
Оплата служащим |
4 |
4 |
Культурно-развлекательные мероприятия |
2 550,00р. |
25.02.2005 |
4 |
Ширшин, Вадим |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
1 |
Оплата служащим |
4 |
4 |
Культурно-развлекательные мероприятия |
2 550,00р. |
25.02.2005 |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
4 |
4 |
Культурно-развлекательные мероприятия |
2 550,00р. |
25.02.2005 |
1 |
Петрова, Мария |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
4 |
Культурно-развлека тельные мероприятия |
4 |
4 |
Культурно-развлекательные мероприятия |
2 550,00р. |
25.02.2005 |
Теперь выполним операцию соединение – сцепление строк с совпадающими полями Код типа расходов и Код расходов:
Код отчета |
Код сотрудника |
Название |
Описание отчета |
Дата |
Задаток |
Отдел оплаты |
Опла чено |
Код типа расходов |
Тип расходов |
Код отчета |
Код типа расходов |
Сумма расходов |
Дата расходов |
2 |
Волков, Николай |
Оплата за билеты |
Оплата за культпоход |
10.02.2005 |
500,00р. |
1 |
Нет |
1 |
Оплата служащим |
1 |
Оплата служащим |
1 000,00р. |
Оплата за ремонт |
4 |
Ширшин, Вадим |
Оплата за кафе |
Затраты на кафе |
25.02.2005 |
2 550,00р. |
2 |
Нет |
1 |
Оплата служащим |
1 |
Оплата служащим |
1 000,00р. |
Оплата за ремонт |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
2 |
Культурно-развлекательные мероприятия |
500,00р. |
10.02.2005 |
1 |
Петрова, Мария |
Оплата за ремонт |
Оплата за услуги |
05.02.2005 |
1 000,00р. |
1 |
Да |
4 |
Культурно-развлека тельные мероприятия |
4 |
Культурно-развлекательные мероприятия |
2 550,00р. |
25.02.2005 |
Результат выполнения операции селекции – выбора строк по принадлежности поля Описание отчета значению Аренда автотранспорта:
Код отчета |
Код сотрудника |
Название |
Описание отчета |
Дата |
Задаток |
Отдел оплаты |
Опла чено |
Код типа расходов |
Тип расходов |
Код отчета |
Код типа расходов |
Сумма расходов |
Дата расходов |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
1 |
Да |
2 |
Оплата помещения |
2 |
Культурно-развлекательные мероприятия |
500,00р. |
10.02.2005 |
Результат выполнения операции проекции:
Код отчета |
Код сотрудника |
Название |
Описание отчета |
Дата |
Задаток |
3 |
Пузов, Олег |
Оплата за аренду |
Аренда автотранспорта |
10.02.2005 |
100,00р. |
Для получения в автоматизированном режиме таблицы с результатом выполнения операции произведения используется запрос:
SELECT [Типы расходов].*,[Сведения о расходах].*,[Отчеты о расходах].*, Сотрудники.* FROM [Типы расходов] ,[Сведения о расходах],[Отчеты о расходах], Сотрудники;
Для получения в автоматизированном режиме таблицы с результатом выполнения операции соединения используется запрос:
SELECT [Отчеты о расходах].КодОтчетаОРасходах, Сотрудники.Имя, Сотрудники.Фамилия, Сотрудники.Должность, [Типы расходов].КатегорияРасходов, [Отчеты о расходах].ДатаВыставленияСчета, [Сведения о расходах].СуммаСтатьиРасходов
FROM [Типы расходов] RIGHT JOIN ((Сотрудники INNER JOIN [Отчеты о расходах] ON Сотрудники.КодСотрудника = [Отчеты о расходах].КодСотрудника) INNER JOIN [Сведения о расходах] ON [Отчеты о расходах].КодОтчетаОРасходах = [Сведения о расходах].КодОтчетаОРасходах) ON [Типы расходов].КодТипаРасходов = [Сведения о расходах].КодТипаРасходов;
Для получения в автоматизированном режиме таблицы с результатом селекции используется запрос:
SELECT [Отчеты о расходах].КодОтчетаОРасходах, Сотрудники.Имя, Сотрудники.Фамилия, Сотрудники.Должность, [Типы расходов].КатегорияРасходов, [Отчеты о расходах].ДатаВыставленияСчета, [Сведения о расходах].СуммаСтатьиРасходов
FROM [Типы расходов] RIGHT JOIN ((Сотрудники INNER JOIN [Отчеты о расходах] ON Сотрудники.КодСотрудника=[Отчеты о расходах].КодСотрудника) INNER JOIN [Сведения о расходах] ON [Отчеты о расходах].КодОтчетаОРасходах=[Сведения о расходах].КодОтчетаОРасходах) ON [Типы расходов].КодТипаРасходов=[Сведения о расходах].КодТипаРасходов
WHERE ((([Типы расходов].КатегорияРасходов)="Оплата автотранспорта"));
Для получения операции проекции используется запрос:
SELECT DISTINCT [Отчеты о расходах].КодОтчетаОРасходах, Сотрудники.Имя, Сотрудники.Фамилия, Сотрудники.Должность, [Типы расходов].КатегорияРасходов, [Отчеты о расходах].ДатаВыставленияСчета, [Сведения о расходах].СуммаСтатьиРасходов
FROM [Типы расходов] RIGHT JOIN ((Сотрудники INNER JOIN [Отчеты о расходах] ON Сотрудники.КодСотрудника=[Отчеты о расходах].КодСотрудника) INNER JOIN [Сведения о расходах] ON [Отчеты о расходах].КодОтчетаОРасходах=[Сведения о расходах].КодОтчетаОРасходах) ON [Типы расходов].КодТипаРасходов=[Сведения о расходах].КодТипаРасходов
WHERE ((([Типы расходов].КатегорияРасходов)="Оплата автотранспорта"));
3.2.6. Формирование и отладка запроса
Так как между таблицами существуют связи типа «один-ко-многим», то для исключения повторяющихся строк следует использовать инструкцию:
SELECT DISTINCTROW [Отчеты о расходах].КодОтчетаОРасходах, Сотрудники.Имя, Сотрудники.Фамилия, Сотрудники.Должность, [Типы расходов].КатегорияРасходов, [Отчеты о расходах].ДатаВыставленияСчета, [Сведения о расходах].СуммаСтатьиРасходов
FROM [Типы расходов] RIGHT JOIN ((Сотрудники INNER JOIN [Отчеты о расходах] ON Сотрудники.КодСотрудника=[Отчеты о расходах].КодСотрудника) INNER JOIN [Сведения о расходах] ON [Отчеты о расходах].КодОтчетаОРасходах=[Сведения о расходах].КодОтчетаОРасходах) ON [Типы расходов].КодТипаРасходов=[Сведения о расходах].КодТипаРасходов
WHERE ((([Типы расходов].КатегорияРасходов)="Оплата автотранспорта"));
3.2.7. Подготовка запроса в Конструкторе
В режиме Конструктора запрос имеет вид:
При выполнении запроса получим:
Затраты на автотранспорт |
||||||
Код отчета |
Имя |
Фамилия |
Должность |
Тип расходов |
Дата |
Сумма расходов |
1 |
Мария |
Петрова |
Бухгалтер |
Оплата служащим |
05.02.2005 |
1 000,00р. |
2 |
Николай |
Волков |
Директор |
Культурно-развлекательные мероприятия |
10.02.2005 |
500,00р. |
3 |
Олег |
Пузов |
Инженер |
Оплата автотранспорта |
10.02.2005 |
100,00р. |
4 |
Вадим |
Ширшин |
Электрик |
Культурно-развлекательные мероприятия |
25.02.2005 |
2 550,00р. |
4. База данных «Бумаги»
4.1. Схема базы данных «Бумаги»
Между таблицами базы данных «Бумаги» установлены следующие связи типа «один-ко-многим» между таблицами:
4.2. Определения наличия определенного количества определенной бумаги
Как проверить, имеется ли у агента, выставившего на продажу определенную бумагу, эта бумага в соответствующем количестве?
4.2.1. Определение состава выходного сообщения
Проанализировав результаты информационной потребности, определим состав и структуру требуемого сообщения S [Наличие определенной бумаги в требуемом количестве].
S (Агенты.НаимАг, Бумаги.НаимБум, ЗаказыНаПродажу.ОбъемЗаявкиПрТек, ЗаявкиНаПокупки.ОбъемЗаявкиПок, Разность: [ОбъемЗаявкиПрТек]-[ОбъемЗаявкиПок])
Наличие определенной бумаги |
||||
НаимАг |
НаимБум |
ОбъемЗаявкиПрТек |
ОбъемЗаявкиПок |
Разность |
Реквизит НаимБум является обязательным, все остальные – дополнительными.
4.2.2. Разработка модели процесса
Определим состав полей и таблиц, используемых в запросе, опираясь на приведенную в пункте 4.1 схемы базы данных «Бумаги».
Поскольку сведения об агентах хранятся в таблице Агенты, сведения о бумагах – в таблице Бумаги, а данные о заявках на покупку и продажу бумаг хранятся в таблицах ЗаявкиНаПокупку и ЗаказыНаПродажу, то в запросе будут участвовать поля из перечисленных таблиц.
На выходе процесса представлено сообщение с определенной в предыдущем пункте структурой:
4.2.3. Общее описание процесса решения задачи
Получение выходного сообщения позволит уменьшить трудозатраты на выборку информации об имеющемся и требуемом количестве определенной бумаги у конкретного агента.
Для потребителя-пользователя запрос характеризуется как простой с поэтапным потреблением информации. Для работы с данными результирующая таблица может быть экспортирована в Excel. В Access запрос будет являться запросом на выборку.
Данные во всех используемых таблицах являются справочными и обновляются при поступлении новых.
Для использования данных многими потребителями они размещаются на сервере сети, функционирующей под управлением Microsoft SQL Server.
Подготовка запроса в Access проводится в режиме Конструктора.
4.2.4. Представление подсхемы данных
Таблицы Агенты, Бумаги, Заказы на продажу и Заявки на покупки имеют простые ключи КодАг, КодБум, КодЗаявкиПр и КодЗаявкиПок соответственно.
4.2.5. Ручная обработка данных
Выполним вручную реляционную обработку данных. Приведем исходные данные, участвующих в запросе таблиц:
Агенты |
|||
КодАг |
НаимАг |
СуммаДен |
Комментарий |
1 |
Автосервис |
100 000 000,00р. |
|
2 |
Сибэнерго |
20 000 000,00р. |
|
3 |
Салон красоты |
40 000 000,00р. |
Бумаги |
|||||
КодБум |
НаимБум |
Номинал |
СуммОбъем |
ДатаЗп |
ТипБум |
1 |
Вексель |
20 000,00р. |
100 000,00р. |
10.05.2005 |
Ценная |
2 |
Казначейское обязательство |
10 000,00р. |
50 000,00р. |
11.05.2005 |
Банковская |
3 |
Акция |
1 000,00р. |
1 000,00р. |
15.05.2005 |
Обменная |
ЗаказыНаПродажу |
||||||
КодЗаявкиПр |
КодАг |
КодБум |
ОбъемЗаявкиПрНач |
ОбъемЗаявкиПрТек |
ЦенаЗаявкиПр |
ДатаЗаявкиПр |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
23.05.2005 |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
24.05.2005 |
ЗаявкиНаПокупки |
|||||||
КодЗаявкиПок |
КодАг |
КодБум |
КодЗаявкиПр |
ОбъемЗаявки Пок |
Цена ЗаявкиПок |
ПризнакПок |
ДатаЗаякиПок |
1 |
3 |
2 |
001 |
5 |
8 000,00р. |
Куплено |
23.05.2005 |
3 |
1 |
1 |
003 |
10 |
33 000,00р. |
В продаже |
24.05.2005 |
Выполним реляционную операцию произведение для таблиц Заказы на продажу и Заявки на покупки:
Код ЗаявкиПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Аг |
Код бум |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
3 |
2 |
001 |
5 |
8 000,00р. |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
1 |
3 |
2 |
001 |
5 |
8 000,00р. |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
3 |
1 |
1 |
003 |
10 |
33 000,00р. |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
1 |
1 |
003 |
10 |
33 000,00р. |
Теперь выполним операцию соединение – сцепление строк с одинаковыми значениями полей КодАг:
Код ЗаявкиПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код бум |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
2 |
001 |
5 |
8 000,00р. |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
1 |
003 |
10 |
33 000,00р. |
Далее вновь выполним операцию соединение – сцепление строк с совпадающими значениями полей КодБум:
Код ЗаявкиПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
Отберем только те строки, для которых ОбхемЗаявкиПок не превышает ОбъемЗаявкиПрТек:
Код ЗаявкиПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
Теперь выполним операцию сцепления для полученной таблицы с таблицей Агенты:
Код Заяв киПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
Код Аг |
Наим Аг |
СуммаДен |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
1 |
Автосервис |
100000000 |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
2 |
Автосервис |
20000000 |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
3 |
Салон красоты |
40000000 |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
1 |
Автосервис |
100000000 |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
2 |
Автосервис |
20000000 |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
3 |
Салон красоты |
40000000 |
Выполним операцию соединения – сцепления строк с одинаковыми полями КодАг:
Код Заяв киПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
Наим Аг |
СуммаДен |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
Салон красоты |
40000000 |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
Автосервис |
100000000 |
Выполним операцию произведения полученной таблицы с таблицей Бумаги:
Код Заяв киПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
Наим Аг |
СуммаДен |
Код Бум |
Наим Бум |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
Салон красоты |
40000000 |
1 |
Вексель |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
Автосервис |
100000000 |
1 |
Вексель |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
Салон красоты |
40000000 |
2 |
Казн обяз |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
Автосервис |
100000000 |
2 |
Казн обяз |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
Салон красоты |
40000000 |
3 |
Акция |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
Автосервис |
100000000 |
3 |
Акция |
Отберем строки у которых совпадают поля КодБум (результат сцепления):
Код Заяв киПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
Наим Аг |
СуммаДен |
Наим Бум |
8 |
1 |
1 |
10 |
8 |
30 000,00р. |
3 |
003 |
10 |
33 000,00р. |
Автосервис |
100000000 |
Вексель |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
Салон красоты |
40000000 |
Казн обяз |
Выполним операцию селекции – отбор строк, в которых ОбъемЗаявкиПок не превышает ОбъемЗаявкиПрТек:
Код Заяв киПр |
Код Аг |
Код Бум |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Код Заявки Пок |
Код Заявки Пок |
Объем заявки пок |
Цена ЗаявкиПок |
Наим Аг |
СуммаДен |
Наим Бум |
7 |
3 |
2 |
5 |
6 |
10 000,00р. |
1 |
001 |
5 |
8 000,00р. |
Салон красоты |
40000000 |
Казн обяз |
Выполним операцию проекции:
Код Заяв киПр |
Объем Заявки ПрНач |
Объем Заявки ПрТек |
Цена ЗаявкиПр |
Объем заявки пок |
Цена ЗаявкиПок |
Наим Аг |
СуммаДен |
Наим Бум |
7 |
5 |
6 |
10 000,00р. |
5 |
8 000,00р. |
Салон красоты |
40000000 |
Казн обяз |
Для получения в автоматизированном режиме таблицы с результатом произведения используется запрос:
SELECT Агенты.*, Бумаги.*, ЗаказыНаПродажу.*, ЗаявкиНаПокупки.* FROM Агенты, Бумаги, ЗаказыНаПродажу, ЗаявкиНаПокупки ;
Для получения в автоматизированном режиме таблицы с результатом операции соединения используется запрос:
SELECT Агенты.НаимАг, Бумаги.НаимБум, ЗаказыНаПродажу.ОбъемЗаявкиПрТек, ЗаявкиНаПокупки.ОбъемЗаявкиПок, [ОбъемЗаявкиПрТек]-[ОбъемЗаявкиПок] AS Разность
FROM Бумаги INNER JOIN ((Агенты INNER JOIN ЗаказыНаПродажу ON Агенты.КодАг = ЗаказыНаПродажу.КодАг) INNER JOIN ЗаявкиНаПокупки ON Агенты.КодАг = ЗаявкиНаПокупки.КодАг) ON (Бумаги.КодБум = ЗаявкиНаПокупки.КодБум) AND (Бумаги.КодБум = ЗаказыНаПродажу.КодБум);
Для получения в автоматизированном режиме таблицы с результатом операции проекции используется запрос:
SELECT DISTINCT Агенты.НаимАг, Бумаги.НаимБум, ЗаказыНаПродажу.ОбъемЗаявкиПрТек, ЗаявкиНаПокупки.ОбъемЗаявкиПок, [ОбъемЗаявкиПрТек]-[ОбъемЗаявкиПок] AS Разность
FROM Бумаги INNER JOIN ((Агенты INNER JOIN ЗаказыНаПродажу ON Агенты.КодАг = ЗаказыНаПродажу.КодАг) INNER JOIN ЗаявкиНаПокупки ON Агенты.КодАг = ЗаявкиНаПокупки.КодАг) ON (Бумаги.КодБум = ЗаявкиНаПокупки.КодБум) AND (Бумаги.КодБум = ЗаказыНаПродажу.КодБум);
4.2.6. Формирование и отладка запроса
Так как между всеми таблица существуют связи «один-ко-многим», для исключения повторов строк следует использовать следующий запрос:
SELECT DISTINCTROW Агенты.НаимАг, Бумаги.НаимБум, ЗаказыНаПродажу.ОбъемЗаявкиПрТек, ЗаявкиНаПокупки.ОбъемЗаявкиПок, [ОбъемЗаявкиПрТек]-[ОбъемЗаявкиПок] AS Разность
FROM Бумаги INNER JOIN ((Агенты INNER JOIN ЗаказыНаПродажу ON Агенты.КодАг = ЗаказыНаПродажу.КодАг) INNER JOIN ЗаявкиНаПокупки ON Агенты.КодАг = ЗаявкиНаПокупки.КодАг) ON (Бумаги.КодБум = ЗаявкиНаПокупки.КодБум) AND (Бумаги.КодБум = ЗаказыНаПродажу.КодБум);
4.2.7. Подготовка запроса в Конструкторе
Для определения наличия определенной бумаги в нужном количестве создадим запрос, которые будет включать поле НаимАг из таблицы Агенты, поле НаимБум из таблицы Бумаги, поле ОбъемЗаявкиПрТек из таблицы ЗаказыНаПродажу и поле ОбъемЗаявкиПок из таблицы ЗаявкиНаПокупку.
Для определения наличия определенной бумаги создадим в запросе вычисляемое поле Разность: [ОбъемЗаявкиПрТек]-[ОбъемЗаявкиПок], которое будет определять разность между предложением по продаже и спросом.
Если эта разность положительна, значит бумага имеется в нужном количестве.
В Конструкторе запрос имеет структуру:
Получим результат запроса:
Наличие определенной бумаги |
||||
НаимАг |
НаимБум |
ОбъемЗаявкиПрТек |
ОбъемЗаявкиПок |
Разность |
Салон красоты |
Казначейское обязательство |
6 |
5 |
1 |
Арык |
Вексель |
2 |
2 |
0 |
Автосервис |
Вексель |
8 |
10 |
-2 |
Автосервис |
Казначейское обязательство |
2 |
4 |
-2 |
Сибэнерго |
Акция |
10 |
22 |
-12 |
Салон красоты |
Вексель |
11 |
14 |
-3 |
По этим данным можно сделать вывод, что для бумаг, у которых поле Разность положительна, имеется их требуемое количество.
Список источников
1. Гофман В.Э., Хомоненко А.Д. Работа с базами данных в Delphi. – СПб,: БХВ-Петербург, 2001. – 656 с.: ил.
2. Левин А. Самоучитель работы на компьютере. Москва, издательство «Нолидж», 1999 – 624 с.
3. Козырев А.А. Самоучитель работы на персональном компьютере. Учебное пособие. Изд. 2-е, переработанное и дополненное. СПб.: Изд-во Михайлова В.А., 2000 – 304 с.
4. Вейскас Дж. Эффективная работа: Microsoft Office Access 2003. Издательский дом «Питер», 2005. – 1168 с.
5. Хэлворсон М., Янг М. Эффективная работа: Office XP. Издательский дом «Питер», 2004. – 1072