Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ НА ГОС.doc
Скачиваний:
39
Добавлен:
11.11.2018
Размер:
3.34 Mб
Скачать

Базы данных

49. Понятие базы данных. Банк данных, словарь данных и приложения

База данных - набор сведений, хранящихся некоторым упорядоченным способом. Можно сравнить базу данных со шкафом, в котором хранятся документы. Иными словами, база данных - это хранилище данных. Сами по себе базы данных не представляли бы интереса, если бы не было систем управления базами данных (СУБД). «Банк данных» – это система специальным образом организованных данных (баз данных), программных, технических, языковых, организационно-методических средств, предназначенных для обеспечения централизованного накопления и коллективного многоцелевого использования данных»

Словарь данных (data dictionary) — это область, где Oracle хранит инфор­мацию о структуре базы данных. Сами данные находятся в других местах, а в словаре лишь описано, как организованы реальные данные

Приложение – статический набор команд

50. Реляционная модель данных. Индексирование и связывание таблиц

Реляционная модель данных (РМД) — логическая модель данных, прикладная теория построения баз данных, которая является приложением к задачам обработки данных таких разделов математики как теории множеств и логика первого порядка.

Реляционная модель данных включает следующие компоненты:

  • Структурный аспект (составляющая) — данные в базе данных представляют собой набор отношений.

  • Аспект (составляющая) целостности — отношения (таблицы) отвечают определенным условиям целостности. РМД поддерживает декларативные ограничения целостности уровня домена (типа данных), уровня отношения и уровня базы данных.

  • Аспект (составляющая) обработки (манипулирования) — РМД поддерживает операторы манипулирования отношениями (реляционная алгебра, реляционное исчисление).

Кроме того, в состав реляционной модели данных включают теорию нормализации.

Для лучшего понимания РМД следует отметить три важных обстоятельства:

  • модель является логической, то есть отношения являются логическими (абстрактными), а не физическими (хранимыми) структурами;

  • для реляционных баз данных верен информационный принцип: всё информационное наполнение базы данных представлено одним и только одним способом, а именно — явным заданием значений атрибутов в кортежах отношений; в частности, нет никаких указателей (адресов), связывающих одно значение с другим;

  • наличие реляционной алгебры позволяет реализовать декларативное программирование и декларативное описание ограничений целостности, в дополнение к навигационному (процедурному) программированию и процедурной проверке условий.

Индесы помогают SQL Серверу находить данные. Они ускоряют выбор данных, указывая SQL Серверу положение табличных данных на диске. Одна таблица может иметь несколько индексов.

Индексы непосредственно недоступны пользователю, поскольку в языке SQL нельзя явно указать на индекс в запросе. Пользователь может лишь создать или удалить табличный индекс, а SQL Сервер сам решает как использовать его при запросе к таблице. По мере того как изменяются данные в таблице, SQL Сервер может изменить индекс, чтобы он отражал произошедшие изменения. Опять же это происходит автоматически без вмешательства со стороны пользователя.

SQL Сервер поддерживает следующие виды индексов:

 

Составные (сложные) индексы - включающие более одного табличного столбца. Эти индексы используются, когда данные в нескольких столбцах логически взаимосвязаны;

Уникальные индексы - запрещающие использование повторяющихся значений в указанных столбцах. SQL Сервер проверяет, нет ли повторяющихся значений, когда создается такой индекс (если в таблице уже есть данные) и повторяет проверку при каждой модификации данных;

Кластеризованные и некластеризованные индексы - позволяют связывать физическое и логическое расположение данных. При наличии кластеризованного  индекса физическое расположение строк таблицы на запоминающем устройстве соответствует их логическому (индексированному) расположению. У таблицы может быть лишь один кластеризованный индекс. Некластеризованный индекс не обеспечивает такого соответствия и данные  могут располагаться в любом порядке.

 

Сравнение двух способов создания индексов

 Табличный индекс можно создать либо с помощью оператора creat index (создание индекса), либо указав ограничение целостности в виде уникального (unique) или главного (primary) ключа в операторе создания таблицы creat table. Однако, второй способ имеет следующие ограничения:

 

Не позволяет создавать индексы по неуникальным полям;

Не позволяет воспользоваться опциями, предусмотренными в команде creat index, уточняющими способ использования индекса;

Эти индексы можно удалить только вместе с ключами оператором alter table.

 Если эти ограничения явлются обременительными для приложения, с которым работает пользователь, то индексы следует создавать оператором creat index. В противном случае нужно использовать уникальный или главный ключ, поскольку это самый простой способ связывания индекса с таблицой. Более детально об уникальных и главных ключах рассказывалось в главе 7 “Создание баз данных и таблиц”.

 

Рекомендации по использованию индексов

 

Индексы ускоряют выборку данных. Наличие индекса у табличного столбца часто приводит к значительному изменению времени ответа на запрос, когда вместо долгого ожидания ответ появляется почти сразу. Рекомендации по использованию индексов:

 

Если необходимо изменить данные в столбце-счетчике (IDENTITY), то целесообразно связать с ним уникальный индекс, чтобы избежать повторения значений в этом столбце;

С табличным столбцом, по которому проводится сортировка данных и который обычно указывается в предложении order by, необходимо связать индекс, чтобы SQL Сервер мог проводить упорядочение значений по этому индексу;

Столбцы, по которым часто проводится соединение таблиц, всегда должны индексироваться, поскольку в этом случае данные располагаются в порядке возрастания индекса и соединение происходит значительно быстрее;

Со столбцом таблицы, который объявлен главным ключом (primary), обычно связывается кластеризованный индекс, особенно тогда, когда он часто используется при соединении с другими таблицами. (Помните, что у таблицы может быть только один кластеризованный индекс);

Со столбцом, в котором данные выбираются из некоторого диапазона, целесообразно связать кластеризованный индекс. В этом случае как только будет найдено первая строка с нужным значением, все последующие значения будут расположены рядом с ней. Кластеризованный индекс не так эффективен при поиске строк с конкретными значениями данных.

 Несколько случаев, когда использование индексов нецелесообразно:

 

Столбцы, которые редко используются в запросах, не стоит индексировать, поскольку выигрыш во времени поиска будет очень маленьким;

Столбцы, которые содержат всего два или три значения, например, мужской,  женский пол или значения “да”, “нет”, также не стоит индексировать.

 Если поиск в таблице осуществляются по значению в неиндексированном столбце, то система просто просматривает одну строку за другой для нахождения нужного значения. В этом случае время поиска прямо пропорционально числу строк в таблице.

 

Создание индексов для ускорения выборки данных

 Индексы связываются со столбцом таблицы с целью ускорения выборки данных. Простешая форма команды create index (создание индекса) имеет следующий вид:

 create index название_индекса

on название_таблицы (название_столбца)

 Например, команда для создания индекса в столбце au_id таблицы authors имеет следующий вид:

 create index au_id_ind

on authors (au_id)

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

Индексы нельзя связывать со столбцами типа bit, text и image.

Пользователь должен быть владельцем таблицы, чтобы иметь право создавать или удалять индекс. Владелец таблицы может в любое время создать или удалить индекс независимо от того, содержит ли таблица какие-нибудь данные или нет. Индексы можно связывать и с таблицами в другой базе данных путем соответствующего расширения названий таблиц.

 

Синтаксис команды создания индексов

 Полный синтаксис команды создания индексов create index имеет следующий вид:

 create [unique] [clustered | nonclustered]