Структурная схема терминов
Сортировка
Сортировка определяет порядок расположения записей в наборе данных. Порядок расположения записей в БД может быть неопределенным. По умолчанию записи не отсортированы или сортируются по текущему индексу.
С отсортированными наборами данных работать более быстро и удобно. Сортировка заключается в упорядочивании записей по определенному полю в порядке возрастания или убывания содержащихся в нем значений. Сортировку можно выполнить и по нескольким полям. Сортировка наборов TTable выполняется автоматически по текущему индексу. При смене индекса происходит автоматическое переупорядочивание записей.
Текущий индекс задается свойствами компонента TTable: IndexName, IndexFieldNames. Свойства являются взаимоисключающими, можно выбрать только одно из них.
Направление сортировки задает свойство ixDescending; если оно выключено – сортировка ведется по возрастанию, а если включено, то – по убыванию.
Пример 1
Procedure TForm1.Button4Click (Sender: TObject);Begin Case RadioGroup1.ItemIndex of 0: Table1. IndexName := 'indName'; 1: Table1. IndexName := 'indBirthDay'; end;end;Пример 2
Procedure TForm1.Button5Click (Sender: TObject);Begin Case RadioGroup1.ItemIndex of 0: Table1.IndexFieldNames := 'Name'; 1: Table1.IndexFieldNames := 'Name; BirthDay'; 2: Table1.IndexFieldNames := 'Code'; end;end;Фильтрация записей
Фильтрация записей – это задание ограничения для записей отбираемых в набор данных.
Система Delphi дает возможность осуществлять фильтрации записей:
· по выражению;
· по диапазону.
По умолчанию фильтрация записей не ведется и набор TTable содержит все записи связанной с ним таблицы БД, а в набор TQuery включаются все записи, отвечающие SQL-запросу, содержащемуся в свойстве SQL. При использовании фильтрации набор данных ограничивается записями, удовлетворяющими условию фильтра, что ограничивает состав записей SQL-запроса, кроме того, поиск с помощью фильтрации действует медленнее, чем индексный, поэтому при работе с удаленными БД фильтрацию использовать не целесообразно.
Организация данных в БД InterBase
В отличие от локальной БД, состоящей из отдельных или связанных таблиц, удаленная БД имеет более сложную структуру, которая включает:
· таблицы;
· индексы;
· ограничения;
· домены;
· просмотры;
· генераторы;
· триггеры;
· функции пользователя;
· хранимые процедуры;
· исключения;
· BLOB-фильтры;
· привилегии.
Элементы структуры удаленной БД называют метаданными, где "мета" означает "над" данными.
Для InterBase
· максимальное число таблиц в БД = 65536;
· максимальное число столбцов в таблице = 1000.
Поиск в наборах данных
Поиск записи, удовлетворяющей определенным условиям, означает переход на эту запись. Поиск похож на фильтрацию, т.к. выполняется проверка полей записей по некоторым условиям, однако в процессе поиска количество записей в наборе данных не изменяется.
В локальных БД ускоренный поиск ведется по индексированным полям, а для работы с неиндексированными полями служат методы Locate и Lookup.
В удаленных БД действуют совершенно иные принципы обработки данных. Все действия с данными основаны на SQL запросах, даже компоненты типа TIBTable (и TOraTable в Oracle) фактически организованы как SQL–запрос:
select * from <имя таблицы>.Поэтому сортировка, поиск и фильтрация сводятся к манипулированию данными с использованием параметров SQL-запросов.
Манипулирование данными в выборках
Отбор записей выполняется оператором SELECT. Формат этого оператора для работы с удаленными БД имеет свои особенности.
SELECT [DISTINCT | ALL] {* | <список полей>}FROM <таблица>[WHERE <условие отбора>][ORDER BY<список полей для сортировки>][GROUP BY <список полей для группировки>][HAVING <Условия группирования>][UNION <Вложенная инструкция SELECT>][PLAN <План выполнения запроса>]По сравнению с локальной версией, дополнительно здесь появились:
· описатель ALL – позволяет отбирать записи с повторяющимися значениями (DISTINCT обеспечивает отбор только уникальных значений);
· операнд PLAN – задает план выполнения запроса.
Фильтрация обеспечивается условием отбора записей в предложении Where, которые для удаленных БД могут быть более сложными.
<Условие отбора> ={<Выражение> <Операция сравнения> {<Выражение1> | (<Отбор1>)} |<Выражение> [NOT] <Мин. значение> AND <Макс. значение> |<Выражение> [NOT] LIKE <Выражение1> [ESCAPE <Выражение2>] |<Выражение> [NOT] IN(<Выражение 1> [,<Выражение 2>]...[,<Выражение N>] |(<ОтборМ>)) |<Выражение> IS [NOT] NULL |<Выражение> [NOT] {<Операция сравнения> |ALL|SOME|ANY) (<ОтборМ>) |Exists(<ОтборМ>)|SINGULAR (<ОтборМ>)<Выражение> [NOT] CONTAINING <Выражение1> |<Выражение> [NOT] STARTING [WITH] <Выражение1>}Элементы, обозначенные как отбор, представляют собой вложенные инструкции select:
· <Отбор1> – возвращает одно значение, в частном случае, ни одного;
· <ОтборМ> – возвращает несколько значений, в частном случае, ни одного.
Условие отбора (фильтрации) может состоять из нескольких условий, связанных логическими операциями NOT, OR, AND.
Операнд <Выражение> [NOT] CONTAINING <Выражение1> позволяет выбрать записи на основании частичного совпадения значений; обычно применяется для строк.
Пример
Select * from Store where S_Name CONTAINING "то"Для таблицы Store ("склада") выводятся все столбцы с данными о товарах, названия которых содержат символы "то", начиная с любой позиции.
В общем случае выражения могут быть сложными и состоять из нескольких операндов, знаков операций и круглых скобок.
Операнд <Выражение> [NOT] STARTING [WITH] <Выражение1> отличается от предыдущего тем, что требует вхождения уже с начала выражения.
Отбор записей с частичным совпадением значений можно производить и при помощи операнда LIKE.
Операнды Exists и SINGULAR проверяют количество записей, возвращаемых в них подзапросом:
Операнд Exists(<ОтборМ>) возвращает True, если возвращено непустое множество значений.
Операнд SINGULAR(<ОтборМ>) возвращает True, если при отборе возвращено только одно значение
Пример
SELECT S_Name, S_Number FROM StoreWHERE EXISTS(SELECT C_Move FROM CardsWHEREC_Date BETWEEN "1.10.2002" AND "31.10.2002")Со склада отбираются данные о товарах, для которых было движение (приход или расход) за октябрь 2002г.
Операнд SINGULAR(<ОтборМ>) возвращает True, если при отборе возвращено только одно значение.
Пример
SELECT Name FROM PersonnelWHERE SINGULAR(SELECT Position FROM PositionWHERE Position.Code = Personnel.Code)Из таблицы Personnel выбираются фамилии сотрудников, которые занимают только одну должность.
Операнд PLAN задает план выполнения запроса:
<План выполнения запроса> =[{JOIN|[SORT] MARGE}](<Таблица>) | <План выполнения запроса>,...[(<Таблица>) | <План выполнения запроса>] <Таблица> = {<Имя таблицы> | <Псевдоним таблицы>}{NATURAL | INDEX (<Список индексов>) | ORDER <Список индексов>}Задание плана выполнения запроса позволяет управлять методами доступа к данным и может увеличить скорость выполнения запроса. Для каждой таблицы, которая задается именем или псевдонимом, можно определить:
· NATURAL – использование метода последовательного доступа к данным; если при поиске отсутствуют индексы, то используется последовательный метод;
· INDEX – использование для доступа к данным индексно-последовательного метода на основе указанных методов;
· ORDER – сортировка таблицы по указанным индексам.
Описатель JOIN указывает, что план относится к связанным таблицам. Если у этих таблиц существуют соответствующие индексы, то с их помощью будет организован индексно-последовательный метод доступа. Если таких индексов нет, то для связных таблиц следует указать описатель MARGE или SORT MARGE.
Тема 3.6.Управление транзакциями и кэширование памяти
Дата добавления: 2021-09-25; просмотров: 280;