Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
23. Создание и модификация, перемещение БД. (FoxPro)
Создание БД начинается вводом команды для формирования структуры файла данных:
CREATE <имя файла базы данных>
После ввода этой команды появляется окно, в котором Вы должны задать все параметры структуры базы: Имя поля, Тип поля, Размер поля, Количество полей.
Завершение ввода всей структуры подтверждается нажатием клавиши "OK", затем FoxPro запрашивает необходимость заполнения полей создаваемой базы данных.
Чтобы убедиться в том, что Ваш файл действительно создан, можно ввести команду
DIR
В результате на экране появится список баз данных (в данном случае включающий одно имя), хранящихся на диске, сведения о занимаемом объеме памяти и о наличии на диске свободной памяти. Команду DIR можно использовать во всех случаях, когда необходимо посмотреть, какие БД находятся на диске, уточнить имя БД для последующего обращения к ней и т. д.
Для работы с созданной базой данных ее надо открыть посредством команды
USE <имя файла базы данных>
Для просмотра структуры файла ввести команду
DISPLAY STRUCTURE или LIST STRUCTURE
Закрытие базы данных осуществляется командой CLOSE <имя файла базы данных>
Дополнение БД записями выполняется по интерактивной команде APPEND
Получить на экране дисплея содержимое записей предварительно открытой базы данных можно по команде LIST <список полей> (и еще DISPLAY)
GO N позволяет сделать запись с номером N текущей. Она имеет два формата,
позволяющих сделать текущей:
а) первую по порядку запись - GO TOP
б) последнюю запись - GO BOTTOM
Для перемещения по базе данных на заданное число записей используется команда SKIP N
Продвижению вперед соответствует положительное значение N, продвижению назад - отрицательное.
Edit – позволяет редактировать её поля. Удалять и добавлять данные. Browse – тоже один из вариантов редактирования.
24. Создание индексов
Индекс – указатель на данные в таблице.
CREATE INDEX имя ON имя таблицы
Типы индексов:
простые – индекс, создаваемый по данным одного столбца таблицыCREATE INDEX имя ON имя таблицы (имя столбца)
уникальные – используются не только для ускорения поиска данных, но и для обеспечения их целостности. Наличие уникального индекса позволяет ввести в таблицу дубликаты записи. Его можно создать только по тому столбцу таблицы, данные которого уникальны.CREATE UNIQUE INDEX имя ON имя таблицы (имя столбца)
составные – индексы, составленные по значениям нескольких столбцов таблицы. При создании составного индекса следует учитывать вопросы производительности базы данных. Поскольку порядок столбцов в условии индекса может сильно влиять на скорость извлечения данных. Общее правило для повышения производительности – более ограничивающее значение должно идти первым. Но первым должен указываться столбец, наличие которого всегда предполагается в условиях выбора.CREATE INDEX имя ON имя таблицы (имя столбца1, имя столбца2)
Использование составного индекса оказывается наиболее эффективным в том случае, когда соответствующие индексу столбцы часто одновременно используются в условиях запросов в выражении WHERE. Не рекомендуется создание индексов для таблиц с ключами очень большой длины, так как скорость работы такой таблицы снижается из-за больших объемов ввода/вывода.
FoxPro
Индексы предназначаются для создания первичных ключей, используемых для определения отношений между таблицами и условий целостности данных. В этом случае индексы должны быть уникальными.
Например:
Если для создания уникального индекса используется простой, значения поля должны быть неповторяющимися. Когда для создания уникального индекса используется составной, значения в каждом из полей, входящих в индекс, могут повторяться, но индексное выражение должно быть уникальным.
Regular – обычный. Создается индекс, в котором для каждой записи таблицы хранится значение индексного выражение. Если несколько записей имеют одинаковые значения индексного выражения, то каждое значение хранится отдельно и содержит ссылку на связанную с ним запись.
Unique – создается индекс, в котором хранятся только неповторяющиеся значения индексного выражения. Если 2 или более записей содержат одинаковые значения индексного выражения, то будет храниться только одно значение и ссылка на первую из записей с одинаковым значением индексного выражения
Candidate – создается уникальный индекс, который не содержит полей с пустыми значениями
Primary – создается уникальный индекс, который используется для связывания таблиц и определения условий целостности данных. Поля, входящие в первичный ключ, не должны допускать ввода пустых значений.
Cascade – при изменении значений полей первичного ключа или ключа кандидата в родительской таблице, автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице.
Restrict – не позволяет изменять значения полей первичного ключа или ключа кандидата в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на неизменяемую запись.
Ignore – позволяет изменить значение полей первичного ключа или ключа кандидата в родительской таблице независимо от существования связанных записей в дочерней таблице. Целостность данных при этом не поддерживается.
Для определения целостности данных используется построитель целостности данных, который содержит перечень всех установленных отношений между таблицами. Таблица содержит имена родительской, дочерней таблицы, индексов и связей.
25. Поиск и сортировка, ускоренный поиск (на примере СУБД FoxPro).
Упорядочение, поиск и выборка данных.
Процесс упорядочения записи БД по возрастанию или убыванию значения какого-либо поля называется сортировкой. Поле, по которому осуществляется сортировка, называется ключевым.
Сортировка.
Сортировка записей открытой БД осуществляется по команде SORT TO <имя файла базы данных> ON <ключ-выражение> </опции> FOR < условие >
Создается новый файл базы данных, в котором записи активного файла базы данных отсортированы в указанном порядке по заданным ключевым полям. Сортировка выполняется в порядке возрастания значений (опция /А), если не определено иначе.
При выполнении команды SORT необходимо следить за наличием свободного пространства на диске для записи результирующего файла. Для этих целей может потребоваться свободное дисковое пространство, равное утроенному объему обрабатываемого файла.
Упорядочение.
Операции поиска в БД чаще выполняются не для того, чтобы найти единственную запись, а для выборки совокупности записей.
Существенно более высокую эффективность поиска информации в БД, чем простой перебор непосредственно всех записей, дает индексирование. Индексирование отличается от сортировки в том, что не изменяет физически порядок следования на диске записей в исходной БД. В результате индексирования создается дополнительный файл, имеющий расширение IDX
или CDX. Используя этот файл, система по заданному значению ключевого поля определяет номер соответствующей записи исходной БД, вычисляет адрес ее местонахождения на диске и считывает ее.
Индексирование выполняется следующей командой:
INDEX ON <ключ-выражение> TO <IDX-файл> FOR <условие>
Если индексный файл был уже создан, то его нужно открыть при внесении новых записей или редактировании старых и, конечно, если предполагается индексный поиск. Индексные файлы могут быть открыты со своей базой данных, например:
USE student INDEX stud1.idx
Закрытие индексного файла осуществляется командой
CLOSE INDEX
Ускоренный поиск.
Индексный файл не только упорядочивает базу данных для просмотра, но и ускоряет поиск в ней по ключу, заданному в индексе, если пользоваться командой
SEEK <выражение>
Команда использует алгоритм двоичного поиска для просмотра индексного файла, и, получив номер записи в соответствии с выражением, осуществляет установку на него указателя текущий записи. При этом разыскивается только одна первая запись. Разумеется, следующие записи с аналогичным значением поля, если таковые имеются, находятся рядом. Однако, если разыскиваемая запись отсутствует, то можно найти запись с наиболее близким по значению полем с помощью команды
SET NEAR ON Затем с помощью команды BROWSE посмотреть то, что нашлось.
26. Язык запросов SQL. Основные категории
Язык запросов SQL. Основан на реляционном исчислении с переменными-кортежами.
Язык имеет несколько стандартов
SQL1 – был принят в 1989
SQL2 – был принят в 1992
SQL3 – был принят в 1999
Исходное название – SEQUEL – Structured English Query Language
SQL нужен для выполнения операций над таблицами и над данными таблицы.
Как правило, SQL погружен в среду встроенного языка программирования СУБД
Paradox, FoxPro
SQL не обладает функциями языка разработки. Он ориентирован на доступ к данным. В этом случае его называют встроенным SQL, то есть он включен в состав средств разработки программ.
Различают 2 основных метода использования встроенного SQL :
статический динамическийПри статическом использовании языка в тексте программы имеются вызовы функций языка SQL, которые жестко включаются в выполняемый модуль после компиляции.
При динамическом использовании языка предполагается динамическое построение вызовов SQL функций. Динамический метод используется в случае, когда в приложении заранее неизвестен вид SQL вызова.
Основные категории:
DDL Data Definition Language (Язык определения данных)
Основные команды:
Создать таблицу Удалить таблицу Изменить таблицу Создать представление Изменить представление Удалить представление Создать индекс Удалить индексDML Data Manipulation Language (Язык манипулирования данными)
Основные команды:
Создать строку Вставить строку Обновить строкуDQL Data Query Language (Язык запросов к данным)
Основные команды:
1. Select
DCL Data Control Language (Язык управления данными)
Основная команда:
Контроль над возможностью доступа к данным внутри базы данных.Команды DCL обычно используются для создания объектов, относящихся к управлению доступом пользователей к базе данных, а также для назначения пользователям соответствующих уровней привилегий доступа.
Некоторые команды:
Изменить пароль Дать привилегию Отменить привилегиюDAC – Data Administration Commands
Данные команды дают пользователю возможность выполнять анализ операций внутри базы данных.
TTC – Transaction Control Commands (Команды управления транзакциями)
Используются только с командами DML
Сохранить транзакцию Отменить транзакцию 3.Создать точки внутри групп транзакций27. Структурированный язык запросов SQL, описание данных, таблиц, типы данных, целостность данных.
Типы данных языка SQL, определенные стандартом
Данные – это совокупная информация, хранимая в базе данных в виде одного из нескольких различных типов. С помощью типов данных устанавливаются основные правила для данных, содержащихся в конкретном столбце таблицы, в том числе размер выделяемой для них памяти.
В языке SQL имеется шесть скалярных типов данных, определенных стандартом. Их краткое описание представлено в таблице.
Тип данных | Объявления |
Символьный | CHAR | VARCHAR |
Битовый | BIT | BIT VARYING |
Точные числа | NUMERIC | DECIMAL | INTEGER | SMALLINT |
Округленные числа | FLOAT | REAL | DOUBLE PRECISION |
Дата/время | DATE | TIME | TIMESTAMP |
Интервал | INTERVAL |
Символьные данные состоят из последовательности символов, входящих в определенный создателями СУБД набор символов. Поскольку наборы символов являются специфическими для различных диалектов языка SQL, перечень символов, которые могут входить в состав значений данных символьного типа, также зависит от конкретной реализации. Чаще всего используются наборы символов ASCII и EBCDIC. Для определения данных символьного типа используется следующий формат:
<символьный_тип>::=
{ CHARACTER [ VARYING][длина] | [CHAR |
VARCHAR][длина]}
Битовый тип данных используется для определения битовых строк, т. е. последовательности двоичных цифр (битов), каждая из которых может иметь значение либо 0, либо 1. Данные битового типа определяются при помощи следующего формата:
<битовый_тип>::=
BIT [VARYING][длина]
Тип точных числовых данных применяется для определения чисел, которые имеют точное представление, т. е. числа состоят из цифр, необязательной десятичной точки и необязательного символа знака. Данные точного числового типа определяются точностью и длиной дробной части.
<фиксированный_тип>::=
{NUMERIC[точность[,масштаб]|{DECIMAL|DEC}
[точность[, масштаб]
| {INTEGER |INT}| SMALLINT}
Тип округленных чисел применяется для описания данных, которые нельзя точно представить в компьютере, в частности действительных чисел. Округленные числа или числа с плавающей точкой представляются в научной нотации, при которой число записывается с помощью мантиссы, умноженной на определенную степень десяти (порядок), например: 10Е3, +5.2Е6, -0.2Е-4. Для определения данных вещественного типа используется формат:
<вещественный_тип>::=
{ FLOAT [точность]| REAL |
DOUBLE PRECISION}
Тип данных "дата/время" используется для определения моментов времени с некоторой установленной точностью. Стандарт SQL поддерживает следующий формат:
<тип_даты/времени>::=
{DATE | TIME[точность][WITH TIME ZONE]|
TIMESTAMP[точность][WITH TIME ZONE]}
Тип данных DATE используется для хранения календарных дат, включающих поля YEAR (год), MONTH (месяц) и DAY (день). Тип данных TIME – для хранения отметок времени, включающих поля HOUR (часы), MINUTE (минуты) и SECOND (секунды). Тип данных TIMESTAMP – для совместного хранения даты и времени.
Таблицы
Все данные в SQL содержатся в объектах, называемых таблицами. Таблицы представляют собой совокупность каких-либо сведений об объектах, явлениях, процессах реального мира. Никакие другие объекты не хранят данные, но они могут обращаться к данным в таблице. Таблицы в SQL имеют такую же структуру, что и таблицы всех других СУБД и содержат:
- cтроки; каждая строка (или запись) представляет собой совокупность атрибутов (свойств) конкретного экземпляра объекта; cтолбцы; каждый столбец (поле) представляет собой атрибут или совокупность атрибутов. Поле строки является минимальным элементом таблицы. Каждый столбец в таблице имеет определенное имя, тип данных и размер.
Ограничения целостности
Ограничения целостности – механизм, обеспечивающий автоматический контроль соответствия данных установленным условиям (или ограничениям). Ограничения целостности имеют приоритет над триггерами, правилами и значениями по умолчанию. К ограничениям целостности относятся: ограничение на значение NULL, проверочные ограничения, ограничение уникальности (уникальный ключ), ограничение первичного ключа и ограничение внешнего ключа. Последние три ограничения тесно связаны с понятием ключей.
28. Структурированный язык запросов SQL, операторы манипулирования данными, курсор.
Курсор
Запрос к реляционной базе данных обычно возвращает несколько рядов (записей) данных, но приложение за один раз обрабатывает лишь одну запись. Даже если оно имеет дело одновременно с несколькими рядами (например, выводит данные в форме электронных таблиц), их количество по-прежнему ограничено. Кроме того, при модификации, удалении или добавлении данных рабочей единицей является ряд. В этой ситуации на первый план выступает концепция курсора, и в таком контексте курсор – указатель на ряд.
Курсор в SQL – это область в памяти базы данных, которая предназначена для хранения последнего оператора SQL. Если текущий оператор – запрос к базе данных, в памяти сохраняется и строка данных запроса, называемая текущим значением, или текущей строкой курсора. Указанная область в памяти поименована и доступна для прикладных программ.
Обычно курсоры используются для выбора из базы данных некоторого подмножества хранимой в ней информации. В каждый момент времени прикладной программой может быть проверена одна строка курсора. В соответствии со стандартом SQL при работе с курсорами можно выделить следующие основные действия:
- создание или объявление курсора; открытие курсора, т. е. наполнение его данными, которые сохраняются в многоуровневой памяти; выборка из курсора и изменение с его помощью строк данных; закрытие курсора, после чего он становится недоступным для пользовательских программ; освобождение курсора, т. е. удаление курсора как объекта, поскольку его закрытие необязательно освобождает ассоциированную с ним память.
В некоторых случаях применение курсора неизбежно. Однако по возможности этого следует избегать и работать со стандартными командами обработки данных: SELECT, UPDATE, INSERT, DELETE. Помимо того, что курсоры не позволяют проводить операции изменения над всем объемом данных, скорость выполнения операций обработки данных посредством курсора заметно ниже, чем у стандартных средств SQL.
Манипулирование данными
Как и в языке SQL/89, в SQL/92 определены два набора операторов манипулирования данных. Операторы первого набора связаны с курсором, и для них осмысленно использование только в режиме встраивания в некоторый традиционный язык программирования. Операторы второго набора предназначены для индивидуального использования и могут применяться как в режиме встраивания, так и в интерактивном режиме.
Одиночные операторы манипулирования данными
Оператор выборки SELECT [ALL | DISTINCT] <select name>
Оператор поискового удаления DELETE FROM <table name> WHERE [<search condition>]
Оператор поисковой модификации UPDATE <table name> SET <set clause: searched>
Операторы окончания транзакции – текущая транзакция может быть завершена успешно (с фиксацией в базе данных произведенных изменений) путем выполнения оператора COMMIT WORK или аварийно (с удалением из базы данных изменений, произведенных текущей транзакцией) путем выполнения оператора ROLLBACK WORK. При выполнении любого из этих операторов производится принудительное закрытие всех курсоров, открытых к моменту выполнения оператора завершения транзакции.
29. Язык запросов SQL. Тип связывания
Типы связывания:
1. Связывание по равенству EQUIT JOINS
2. Естественное связывание NATURAL JOINS
3. Связывание по неравенству NON – EQUI JOINS
4. Внешнее связывание OUTER JOINS
5. Рекурсивное связывание SELF JOINS
Связывание по равенству EQUIT JOINS
Самый простой тип. Используется чаще всего. Связывание по равенству также называется внутренним связыванием (INNER JOIN). При связывании по равенству таблицы связываются по общему столбцу, который в каждой таблице является ключевым.
Естественное связывание NATURAL JOINS
Почти эквивалентно связыванию по равенству, но при естественном связывании повторение эквивалентных строк исключается. Условие связывания оказывается таким же.
Связывание по неравенству NON – EQUI JOINS
При связывании по неравенству 2 или несколько таблиц объединяются по условию неравенства значения столбца одной таблицы значению столбца другой таблицы.
Внешнее связывание OUTER JOINS
Внешнее связывание используется, когда вывод должен содержать все записи одной таблицы, даже если некоторые из ее записей не имеют соответствующих записей в другой таблице. Во многих реализациях языка внешнее связывание разбито на левое (LEFT JOIN), правое (RIGHT JOIN) и полное внешнее связывание (FULL JOIN).
Рекурсивное связывание SELF JOINS
Рекурсивное связывание предполагает связывание таблицы с ней же самой, как будто бы это 2 таблицы, применяя временные переименования таблицы в операторе SQL.
Если нужно связать таблицы, не имеющие общих столбцов, необходимо использовать третью таблицу, имеющую общие столбцы как с 1-ой, так и со 2-ой таблицей. Такая таблица – связующая таблица.
30. Язык запросов SQL. Многотабличные запросы
Пример: пусть необходимо поставить в соответствие преподавателей и учебные предметы, которые он ведет
Предполагается, что созданы следующие таблицы:
STUDENT (SNUM, SFAM, SIMA, STIP) USPEV (UNUM, OCENKA, UDATA, SNUM, PNUM) PREDMET (PNUM, PNAME, TNUM) TEACHER (TNUM, TFAM, TIMA, TDATE)
UDATA – дата оценки
TDATE – день рождения учителя
SELECT TEACHER. TFAM, PREDMET. PNAME; FROM TEACHER, PREDMET;
WHERE TEACHER. TNUM=PREDMET. TNUM
Эти таблицы уже были соединены через поле TNUM. Эта связь называется состоянием справочной целостности. Объединение многотабличных запросов, которые используют предикаты, основанные на равенствах – объединение по равенству. Этот же подход может использоваться для объединения вместе двух копий одиночной таблицы. Когда объединяется таблица сама с собой, все повторяемые имена столбца заполняются префиксами имени таблицы. Чтобы ссылаться к этим столбцам внутри запроса, необходимо иметь 2 различных имени для этой таблицы. Это можно сделать с помощью определения временных имен, называемых псевдонимами, которые определяются в предложении FROM запроса.
Вывод фамилий студентов, имеющих одинаковый размер стипендииSELECT FIRST. SFAM, SECOND. SFAM, FIRST. STIP; FROM STUDENT FIRST, STUDENT SECOND; WHERE FIRST. STIP=SECOND.STIP
FIRST, SECOND - псевдонимы
В данном запросе SQL ведет себя так, как если бы он соединял 2 различные таблицы, называемые FIRST и SECOND. Псевдоним существует только тогда, команда выполняется, а после завершения запроса псевдоним больше не имеет никакого значения. Допускается использовать любое число псевдонимов для одной таблицы запросов.
Для назначения стипендии на следующий семестр, необходимо просмотреть все варианты комбинаций студентов с разными размерами стипендий 25%, 15%, 0%SELECT FIRST. SFAM, SECOND. SFAM, THIRD. SFAM; FROM STUDENT FIRST, STUDENT SECOND, STUDENT THIRD;
WHERE FIRST. STIP=25 AND SECOND. STIP=15 AND THIRD. STIP=0
Этот запрос находит все комбинации студентов с 3-мя различными размерами стипендии. Такой запрос может быть выполнен с помощью GROUP BY и ORDER BY, поскольку они сравнивают значение только в одном столбце вывода.
В SQL предусматривается создание объединения, которое включает и различные таблицы, и псевдонимы одной таблицы.
4. Написать запрос, который объединяет таблицу с данными об успеваемости для того, чтобы найти учебные предметы, которые уже сданы более, чем одним студентом и таблицу учебных предметов.
SELECT PREDMET. PNAME, FIRST. SNUM, SECOND. SNUM; FROM USP FIRST, USP SECOND, PREDMET; WHERE FIRST. PNUM=SECOND. PNUM; AND PREDMET. PNUM=FIRST. PNUM; AND FIRST. SNUM<SECOND. SNUM
Таким образом, операция объединения в SQL соединяет информацию из двух таблиц, формируя из них пары связанных строк. Объединяемую таблицу образуют пары тех строк из разных таблиц, у которых в связанных столбцах содержатся одинаковые значения.
Иногда необходимо использовать DISTINCT для того, чтобы в подзапросе получать одиночное значение.
5. Преподаватели могут вести занятия по разным дисциплинам. Написать запрос, выводящий дисциплины, которые ведет преподаватель Иванова.
SELECT * FROM PREDMET;
WHERE TNUM=(SELECT DISTINCT TNUM FROM TEACHER;
WHERE TFAM=’Иванова’)
В подзапросах допускается использование агрегатных функций, так как они автоматически производят одиночные значения для любого числа строк, которая может быть использована в основном запросе.
SELECT * FROM USP WHERE OCENKA > (SELECT AVG(OCENKA) FROM USP);
31. Структурированный язык запросов SQL, операции изменения и обновления БД.
Изменение содержимого записей предварительно открытой БД осуществляется по команде EDIT
При этом открывается окно с содержимым базы, и, перемещаясь по записям базы, можно редактировать ее поля. Команду можно ввести с указателем номера записи.
Если в сеансе редактирования предполагается ввести новые значения лишь определенных полей записей БД, то удобнее подобные изменения выполнить посредством команды CHANGE которая может включать опцию <ограничитель>.
Удобные средства редактирования данных по всему полю экрана предоставляются командой BROWSE
С этой командой можно использовать опцию FIELDS, позволяющую указать список редактируемых полей.
Добавление новых записей в конец БД может быть выполнено в режимах APPEND, EDIT, BROWSE. Для вставки новой записи в определенное место среди существующих записей используется команда INSERT.
INSERT [BLANK] [BEFORE]
Если указана опция BEFORE, то запись будет вставлена перед текущей записью, если опущена, то после нее. Опция BLANK обеспечивает вставление пустой записи, которая затем может быть заполнена. Если опция опущена, то на экран будет выдана форма для ввода значений полей вставляемой записи.
Удаление записей в базе данных.
Удаление одной или нескольких записей выполняется по команде DELETE которая может использоваться вместе с опцией <ограничитель>. Команда DELETE не стирает физически запись с диска, а лишь помечает запись на удаление. Записи, помеченные на удаление, могут быть восстановлены по команде RECALL которая может применяться совместно с опцией <ограничитель>. Команда PACK осуществляет окончательное удаление (т. е. физическое стирание с диска) записей, помеченных на удаление.
Команда ZAP удаляет все записи из активной БД, записи не могут быть восстановлены. После выполнения этой команды файл БД будет иметь только описание структуры. Чтобы удалить полностью БД с диска, надо ввести команду ERASE <имя файла базы данных>
Удаляемая база не должна быть открыта. По команде CLOSE DATABASES закрываются все ранее открытые базы данных.
Копирование.
Любое существующее описание структуры может быть полностью или частично скопировано в новую базу с помощью команды COPY STRUCTURE TO <имя файла базы данных>
Прежде чем подать команду копирования, надо открыть существующую БД. Команда копирования также позволяет выборочно копировать в новую БД описания полей существующей структуры с помощью опции FIELDS, содержащей список полей, описания которых переносятся в новую БД.
Копирование структуры вместе с данными в новый файл осуществляется командой COPY TO <имя файла базы данных>
32. Структурированный язык запросов SQL, индексы.
Индекс — объект БД, создаваемый с целью повышения производительности выполнения запросов. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному значению путем последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет находить нужную строку по заданному значению. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск - например, балансированного дерева. Некоторые СУБД расширяют возможности индексов введением возможности создания индексов по выражениям. Например, индекс может быть создан по выражению upper(last_name) и соответственно будет хранить ссылки, ключём к которым будет значение поля last_name в верхнем регистре. Кроме того, индексы могут быть объявлены как уникальные и как неуникальные. Уникальный индекс реализует ограничение целостности на таблице, исключая возможность вставки повторяющихся значений.
Архитектура
Существует два типа индексов: кластерные и некластерные. У каждой таблицы может быть только один кластерный индекс и множество некластерных. При наличии кластерного индекса строки таблицы физически хранятся в заданном порядке и непосредственно связаны с элементами индекса, благодаря чему значительно ускоряется доступ к данным при использовании запросов, использующих данный индекс. Если в таблице нет кластерного индекса, таблица является неупорядоченной. Некластерный индекс, созданный для такой таблицы, содержит только указатели на записи таблицы, в связи с чем при выборке необходимо по крайней мере ещё одно обращение к диску для получения собственно записи.
Индексы физически могут быть реализованы различными структурами. Наиболее частоупотребимы B+ деревья и хэши.
33. Структурированный язык запросов SQL, определение пользовательских представлений.
VIEW – некоторое подобие таблицы, содержание которой выбирается с помощью выполнения запроса. Причем при изменении значения в этих таблицах автоматически меняется их представление.
Представление создается командой CREATE VIEW, после которого указывается его имя, а далее следует запрос, формирующий тело представления. Поля представления могут иметь свои имена, полученные из имен полей основной таблицы. Представления могут также использовать подзапросы, в том числе и соотнесенные.
7. Вывести все оценки по дисциплине, которые больше средней оценки по этой дисциплине.
CREATE VIEW AVG OC AS;
SELECT * FROM USP FIRST;
WHERE OCENKA > (SELECT AVG (OCENKA)
FROM USP SECOND;
WHERE SECOND. PNUM=FIRST. PNUM)
__________________
8. Вывести фамилии, шифр, предмет, который студент сдал.
SELECT STUD. FAM, STUD. SNUM, USP. PNUM, USP. SNUM;
FROM STUD INNER JOIN USP;
ON STUD. SNUM=USP. SNUM
CREATE VIEW <имя>
(<имя поля>, <тип>[(<размер>,…)[,<имя поля>]])
/FROM ARRAY <массив>
INSERT INTO <имя файла>[(<поле1>[,<поле2>])]
VALUES <выражение1>[,<выражение2>]
Добавление записей в конец существующего файла, используя выражения, перечисленные после слова VALUES.
Если опущены имена полей, выражения будут записываться в последовательные поля базы данных в соответствии с ее структурой.
INSERT INTO <имя> FROM ARRAY <имя>
34. Файловые структуры для хранения информации в базах данных
Классификация
Файлы:
1. прямого доступа
2. последовательного доступа
3. индексные
· плотный индекс (индексно-прямые)
· В – деревья
· неплотный (индексно-последовательные)
4. инвертированные списки
5. взаимосвязанные файлы
· с однонаправленными цепочками
· с двунаправленными цепочками
Прямого доступа на устройствах прямого доступа. Имеют фиксированную длину записи, и обеспечивают более быстрый доступ. Адрес м. б. вычислен по номеру записи. Однако поиск по номеру неэффективен. Лучше искать по ключам, поэтому есть ф-я преобразования ключа в номер.(например – хеширование(рассказать))
С переменной длиной записи – последовательного доступа. Тогда конец записи отмечается специальным маркером, либо в начале каждой записи дана ее длина.
Плотный индекс: данные в области данных одинаковой длины. В индексной области все записи упорядочены по значению ключа.
Неплотный индекс – ключ указывает не на запись, а на страницу записей. Внутри страниц записи упорядочены.
Б деревья – построение индекса по индексу
Инвертированные списки: ведется поиск по вторичным ключам. Они м. б. одинаковыми. Инвертированный список – двухуровневая индексная структура. На первом уровне расположены значения вторичных ключей. На втором – блок указателей на записи с таким значением ключа. На третьем – собственно данные.
Деревья – ежику понятно.(LPTR, DATA, RPTR)
35. Файлы прямого и последовательного доступа
Файлы прямого доступа – файлы с постоянной длиной записи, расположенные на устройствах прямого доступа. Обеспечивают наиболее быстрый доступ к произвольным записям и их использование – наиболее перспективное в системах баз данных
Файлы последовательного доступа организованы на устройствах последовательного доступа.
Файлы последовательного доступа могут быть организованы двумя способами.
1. конец записи отмечается специальным маркером
2. в начале каждой записи записывается ее длина
В файлах последовательного доступа физический адрес расположения нужной записи может быть вычислен по номеру записи, но такой доступ в базах данных неэффективный.
Чаще всего необходим поиск по первичному ключу или выборка по внешним ключам. Во всех этих случаях известно значение ключа, но неизвестен номер записи. В некоторых случаях возможно построение функций, которые по значению ключа однозначно вычисляют адрес.
NZ=F(k)
NZ – номер записи
k – значение ключа
F - функция
Функция должна быть линейной, чтобы обеспечивать взаимнооднозначное соответствие.
Когда это не удается, применяются методы хэширования и создаются специальные хэш-функции.
Суть: берется значение ключа и используется для начала поиска, то есть вычисляется некоторая хэш-функция, и полученное значение берется в качестве адреса начала поиска. То есть не требуется такого соответствия, но для увеличения скорости ограничивается время этого поиска. Поэтому допускается, что нескольким разным ключам может соответствовать одно значение хэш-функции, то есть один адрес. Это коллизии. Значения ключей, которые имеют одно и то же значение хэш-функции – синонимы. При использовании хэширования как метода доступа необходимо выбрать хэш-функцию и метод разрешения коллизии.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 |


