Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЭУБД лекции.doc
Скачиваний:
25
Добавлен:
27.08.2019
Размер:
399.36 Кб
Скачать

Организация данных в бд 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 Store

WHERE EXISTS

(SELECT C_Move FROM Cards

WHERE

C_Date BETWEEN "1.10.2002" AND "31.10.2002")

Со склада отбираются данные о товарах, для которых было движение (приход или расход) за октябрь 2002г.

Операнд SINGULAR(<ОтборМ>) возвращает True, если при отборе возвращено только одно значение.

Пример

SELECT Name FROM Personnel

WHERE SINGULAR

(SELECT Position FROM Position

WHERE Position.Code = Personnel.Code)

Из таблицы Personnel выбираются фамилии сотрудников, которые занимают только одну должность.

Операнд PLAN задает план выполнения запроса:

<План выполнения запроса> =

[{JOIN|[SORT] MARGE}]

(<Таблица>) | <План выполнения запроса>,

...

[(<Таблица>) | <План выполнения запроса>]

<Таблица> = {<Имя таблицы> | <Псевдоним таблицы>}

{NATURAL | INDEX (<Список индексов>) | ORDER <Список индексов>}

Задание плана выполнения запроса позволяет управлять методами доступа к данным и может увеличить скорость выполнения запроса. Для каждой таблицы, которая задается именем или псевдонимом, можно определить:

  • NATURAL – использование метода последовательного доступа к данным; если при поиске отсутствуют индексы, то используется последовательный метод;

  • INDEX – использование для доступа к данным индексно-последовательного метода на основе указанных методов;

  • ORDER – сортировка таблицы по указанным индексам.

Описатель JOIN указывает, что план относится к связанным таблицам. Если у этих таблиц существуют соответствующие индексы, то с их помощью будет организован индексно-последовательный метод доступа. Если таких индексов нет, то для связных таблиц следует указать описатель MARGE или SORT MARGE.