- •Основные понятия
- •1.1.Состав субд
- •1.2. Классификация баз данных
- •1. 3. Архитектура баз данных
- •Глава 2 проектирование баз данных
- •2.1. Этапы проектирования базы данных
- •2.2. Моделирование локальных представлений
- •3.1 Иерархические модели
- •3.2. Сетевые модели
- •3.3. Реляционные базы данных
- •Реляционные основы концептуального проектирования
- •4.1. Нормализация отношений
- •4.2. Проектирование реляционных баз данных (рбд)
- •5. Агрегированные объекты могут быть сведены в одно реляционное отношение в том случае, если те объекты, с которыми связан каждый из них, полностью совпадают (рис.4.13).
- •Упражнения к главе 4
- •Операции над отношениями
- •5.1. Выполнение операций над отношениями
- •На рис.5.1 приведены примеры операций реляционной алгебры над отноше
- •Реляционные языки запросов
- •6.1. Язык sql (Structured Query Language)
- •6.2. Операторы манипулирования данными
- •Поставщики (s)Tаблица 6.1
- •6.3.Выборки
- •Результат: номер поставщикасостояние
- •Результат: номер_деталивес
- •Р6 Шайба Красный 19 Липецк
- •6.4.3Апросы, использующие соединения
- •6.5.Подзапросы
- •6.6. Подзапросы с несколькими уровнями вложения
- •6.7. Коррелированный подзапрос.
- •6.8. Квантор существования. Запрос, использующий exists
- •6.9. Стандартные функции
- •6.10. Использование группировок (group by)
- •6.11. Объединение с использованием union
- •6.12. Многоаспектный запрос
- •6.13. Операции обновления
- •6.14. Представления
- •Упражнения к главе 6
- •Субд foxpro 2.0
- •7.1. Системный интерфейс FoxPro, главное меню
- •7.2. Архитектура субд FoxPro 2.0
- •Типы и размеры полей (в байтах).
- •Поле дат 8.
- •7.3. Основные команды FoxPro 2.0
- •7.4. Создание и редактирование бд
- •Антонов 4
- •7.5. Команды просмотра и редактирования записей
- •7.6. Создание командных файлов
- •Сведения о сотрудниках
- •7.7. Команды управления
- •7.8. Циклы в FoxPro
- •7.9. Построение экранных форм
- •Карта ввода
- •Карта ввода
- •7.10. Работа с массивами
- •Фио Должность Оклад
- •7.11. Построение меню
- •Пример составления меню
- •7.12. Модульное программирование
- •7.13.Изобразительные средства субд
- •7.14. Функции в FoxPro
- •7.15. Работа с несколькими бд, связывание бд
- •7.16. Работа с окнами
- •Упражнения к главе 7
- •Создание базы данных в среде Microsoft Access
- •8.1. Создание и открытие базы данных
- •8.2. Конструирование форм в среде Microsoft Access
- •8.3. Связывание таблиц в Microsoft Access
- •8.4. Запросы к связанным таблицам
- •8.5. Отчеты
- •8.6. Рисунки и другие объекты в среде Microsoft Access
- •Приложение 1 База данных поставок
- •Приложение 2 Список вопросов для повторения учебного материала
- •Приложение 3 Задания для самостоятельного выполнения
- •Список литературы
- •Оглавление
- •Глава 7. Субд foxpro 2.0................................................…….........………… 54
- •Глава 8. Создание базы данных в среде Microsoft Access .........……................88
7.15. Работа с несколькими бд, связывание бд
Используется принцип рабочих областей. В каждый момент времени пользователь работает в одной из 25 рабочих областей. В каждой рабочей области может быть открыт один файл БД, до 7 индексных файлов и один форматный файл. Максимальное число открытых файлов при этом не может превышать 15.
Для переключения рабочих областей в ходе работы используется команда: SELECT <номер рабочей области> / <алиас>
Алиасами рабочей области являются латинские буквы от А до J. Доступ к данным из других рабочих областей осуществляется по её алиасу.
Например, чтобы обратиться к некоторому полю файла из другой рабочей области необходимо использовать конструкцию:
<алиас> <имя поля>
Например:
SELECT A
USE STUD
SELECT В
USE ICZ
A FIOS
Для наглядности вместо номеров областей или букв можно использовать имена БД, открытых в этих областях, или альтернативные имена этих баз.
81
Например:
SELECT В
USE SOTR ALIAS S2
В дальнейшем при необходимости сделать область 'В' текущей можно написать:
SELECT S2
Если альтернативное имя не назначено, то по умолчанию им становится основное имя БД.
Например:
SELECT В
USE SOTR
Далее можно написать:
SELECT SOTR
В команде USE можно указывать и область, в которой открывается база:
USE KADRS IN A
Однако перехода в указанную область здесь не происходит. Для перехода необходимо указывать SELECT.
Существуют две возможности связывания двух БД. Первый способ обеспечивает объединение двух БД из разных рабочих областей в новом файле:
JOIN WITH <алиас> ТО <имя файла новой БД>
FOR <условие> [FIELDS <список полей>]
Если список полей отсутствует, берутся все поля из текущего файла и все поля из алиасного.
Записи нового файла формируются по следующему правилу:
Для каждой записи текущего файла просматриваются все записи алиасного файла с проверкой условия. Если условие выполняется, то объединенная запись добавляется в новый файл.
При использовании этого способа необходимо знать о наличии места на диске.
Например, слияние двух баз данных : “SPISOKD(Name, Cena, Kod)” (табл. 7.1) и “KOLDETAL (Kod, Kol, Data )” (табл. 7.2) в один - “Справочник деталей” производится следующим образом:
S
Имя
поля Тип Длина
Kod
C 4
Kolich N
6.2
Data C
4
Имя поля |
Тип |
Длина |
Name Cena Kod
|
C N C |
40 6.2 4 |
82
Слияние баз:
SELECT B
USE KOLDETAL
SELECT A
USE SPISOKD
JOIN WITH В ТО ОТНЕТ FOR Kod = B Kod
FIELDS Kod, Name, Cena, В Kolich, В Data
Программа:
SET TALK OFF
CLEAR
SET DEVICE TO SCREEN
SELECT В
USE KOLD
SELECT A
USE SPISOKD
INDEX ON KOD TO KODIND
JOIN WITH В TO OTCHET FOR Kod = В Kod
FIELDS Kod, Name, Cena, В Kolich, В Data
CLOSE ALL
USE OTCHET
INDEX ON NAME TO INDOTCH
@ 1,1 SAY 'Список деталей'
STORE 2 TO ST
STORE REPLICATE ('_', 20) TO CHERTA
2,1 SAY CHERTA
DO WHILE .NOT. EOF()
? N, Name
SKIP N = N +1
ENDDO
CLOSE ALL
SET TALK ON
RETURN
Второй способ связывания не создает нового файла, а только связывает указатели текущей записи в активном и алиасном файлах.
Связывание обеспечивается командой:
SET RELATION ТО [<ключевое поле>/RECNO()/<выражение> INTO <алиас>]
или SET RELATION TO <ключевое поле> INTO <алиас>
SET RELATION TO <выражение> INTO <имя>
SET RELATION TO RECNO () INTO <алиас>
Для работы этой команды необходимы следующие условия:
- открытый файл в текущей рабочей области;
открытый файл в другой рабочей области;
83
- если используется опция <ключевое поле>, то главный файл должен быть ин-
дексирован по этому полю и оба файла должны иметь его в своей структуре;
RECNO ( ) функция, которая определяет номер текущего кортежа в активном отношении.
Суть работы команды:
1) Если указана опция <ключевое поле>, то каждая запись активного файла связывается с первой записью алиасного файла, имеющего такой же ключ.
2) Если указана опция RECNO( ), то каждая запись активного файла связывается с записью алиасного файла, имеющего тот же номер.
3) Если используется опция <выражение>, то каждая запись активного файла связывается с одной записью алиасного файла, номер которой равен значению <выражения>.
Пример 7.9.
SPISOKD (Name, Cena, Kod)
KOLD (Kod, Kolich, Data)
ОТСН (Kod, Name, Cena, Kolich, Data)
SELECT В
USE KOLD
SELECT A
USE SPISOKD
INDEX ON Kod TO KODNDX
SET RELATION TO Kod INTO В
LIST Kod, Name, Cena, В Kolich, В Data
Индексируется при этом только главный файл.
Пример 7.10. Работа с тремя БД. Пусть имеется 3 БД:
KADR (FIO, GR, DOLG, STAG)
O
A
B
DOPL (FIO, DOPL)
S
KADR FIO DOLGN OKLAD FIO
SUMMA
USE KADR INDEX ON FIO TO KADR1
SELECT B
U
FIO,
DOLGN
SUMMA
SELECT C
USE DOPL
INDEX ON FIO TO DOPL1
С
Рис.7.18
вяжем таблицыKADR и OKLAD (рис.7.18)
SELECT A
SET RELATION TO FIO INTO B
L
84
Далее свяжем таблицы OKLAD и DOPL
SELECT В
SET RELATION TO FIO INTO С
LIST FIO, SUMMA, С DOPL, С DOPL + SUMMA
REPLACE ALL SUMMA WITH С DOPL + SUMMA
Связывание таблиц оператором LOCATE.
Пусть имеется 3 БД: STUDENT (NS, FIO, GRUPPA)
DISCIPL (ND, NAME_D, KAF)
YSPEV (NS, ND, ОС)
Пример 7.11. Поиск студентов, получивших 5 по всем предметам:
SELECT A
USE STUD
SELECT В
USE DISCIPL
SELECT С
USE YSPEV
LOCATE FOR ОС = 5
IF FAUND( )
ST=2
DO WHILE FOUND()
SELECT A
LOCATE FOR NS = C NS
IF FOUND ()
@ ST, 1 SAY FIO
@ ST.20 SAY GRUPPA
ENDIF
ST = ST + 1
CONTINUE
ENDDO
WITH "Нажмите ввод"
ELSE
@ 1,1 SAY "Отличников нет"
ENDIF
CLOSE ALL
Пример 7.12. Поиск студентов, получивших неудовлетворительные оценки по математике.
CLEAR
SELECT В
LOCATE FOR NAME_D = ‘ ’
NUM = ND
SELECT С
85
LOCATE FOR ND = NUM AND ОС = 2
IF FAUND()
ST = 2
DO WHILE FOUND()
SELECT A
LOCATE FOR NS = С NS
IF ST > 20
WATE ' '
@ 2,0 CLEAR
ST = 2
ENDIF
ST = ST + 1
IF FOUND()
@ ST,1 SAY FIO
@ ST,20 SAY GRUPPA
ENDIF
SELECT С
CONTINUE
ENDDO
WITH "Нажмите ввод"
ELSE
@ 1,1 SAY "Студентов с неудовлетворительной оценкой нет"
ENDIF
CLOSE ALL
RETURN