Автор: Пользователь скрыл имя, 18 Ноября 2012 в 14:40, лекция
Лекции с глоссарием по базам данным
Основным отличием реальной дедуктивной
СУБД от реляционной является то, что
и правила интенциональной
Отметим, что обычно языки запросов и определения интенциональной части БД являются логическими (поэтому дедуктивные БД часто называют логическими). Имеется прямая связь дедуктивных БД с базами знаний (интенциональную часть БД можно рассматривать как БЗ).
Какова же связь дедуктивных БД с реляционными СУБД, кроме того, что реляционная БД является вырожденным частным случаем дедуктивной? Основным является то, что для реализации дедуктивной СУБД обычно применяется реляционная система. Такая система выступает в роли хранителя фактов и исполнителя запросов, поступающих с уровня дедуктивной СУБД. Такое использование реляционных СУБД резко актуализирует задачу глобальной оптимизации запросов.
При обычном применении реляционной СУБД запросы обычно поступают на обработку по одному, поэтому нет повода для их глобальной (межзапросной) оптимизации. Дедуктивная же СУБД при выполнении одного запроса пользователя в общем случае генерирует пакет запросов к реляционной СУБД, которые могут оптимизироваться совместно.
Конечно, в случае, когда набор правил дедуктивной БД становится велик, и их невозможно разместить в оперативной памяти, возникает проблема управления их хранением и доступом к ним во внешней памяти. Здесь опять же может быть применена реляционная система, но уже не слишком эффективно. Требуются более сложные структуры данных и другие условия выборки. Известны частные попытки решить эту проблему, но общего решения пока нет.
Для создания СБЗ могут использоваться следующие средства:
Пример: Создадим экспертную систему,
с помощью которой можно
Таблица 10.1 Массив факты | ||||
Характеристика |
Птица |
Самолет |
RULES |
В следующей таблице представлен массив факты, который фактически является в нашем случае базой знаний. В нем перечислены некоторые характеристики объектов “птица” и “самолет”, наличие данной характеристики и объекта отмечено цифрой 1, отсутствие - 0. |
Крылья |
1 |
1 |
0 | |
Хвост |
1 |
1 |
0 | |
Клюв |
1 |
0 |
1 | |
Двигатель |
0 |
1 |
-1 | |
Перья |
1 |
0 |
1 | |
Шасси |
0 |
1 |
-1 |
Сформируем теперь правило вывода.
Для этого тем характеристикам,
которые присущи обоим
Массив FACTS заполняется при опросе пользователя. Нетрудно убедиться, что при полном и правильном указании всех характеристик объектов механизм получения решений дает 2 для “птицы” и -2 для “самолета”.
Язык SQL (Structured Query Language - структурированный язык запросов) основывается на некоторой смеси алгебраических и логических конструкций.
В начале 70-х годов в компании IBM была разработана экспериментальная СУБД System R на основе языка SEQUEL (Structured English Qeury Language - структурированный английский язык запросов), который можно считать непосредственным предшественником SQL. Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. В 1981 году IBM объявила о своем первом, основанном на SQL программном продукте, SQL/DS. Чуть позже к ней присоединились Oracle и другие производители. Первый стандарт языка SQL был принят Американским национальным институтом стандартизации (ANSI) в 1987 (так называемый SQL level /уровень/ 1) и несколько уточнен в 1989 году (SQL level 2). Дальнейшее развитие языка поставщиками СУБД потребовало принятия в 1992 нового расширенного стандарта (ANSI SQL-92 или просто SQL-2). В настоящее время ведется работа по подготовке третьего стандарта SQL, который должен включать элементы объектно-ориентрованного доступа к данным.
SQL в настоящее время является промышленным стандартом, который в большей или меньшей степени поддерживает любая СУБД, претендующая на звание “реляционной”.
Хотя SQL стандартизован, любая его версия отличается от стандарта. Бывает, что одни и те же конструкции не работают на разных платформах. Сам SQL покрывает все подмножество реляционной алгебры. И считается, что на нем можно написать любую реляционную БД.
Можно выделить следующие группы операторов:
CREATE SCHEMA |
- |
создать схему БД, |
DROP SCHEMA |
- |
удалить схему БД, |
CREATE TABLE |
- |
создать таблицу, |
ALTER TABLE |
- |
изменить таблицу, |
DROP TABLE |
- |
удалить таблицу, |
CREATE DOMAIN |
- |
создать домен, |
ALTER DOMAIN |
- |
изменить домен, |
DROP DOMAIN |
- |
удалить домен, |
CREATE COLLECTION |
- |
создать последовательность, |
ALTER COLLECTION |
- |
изменить последовательность, |
DROP COLLECTION |
- |
удалить последовательность, |
CREATE VIEW |
- |
создать представление, |
ALTER VIEW |
- |
изменить представление, |
DROP VIEW |
- |
удалить представление. |
SELECT |
- |
выбрать строки из таблиц, |
INSERT |
- |
добавить строки в таблицы, |
UPDATE |
- |
изменить строки в таблице, |
DELETE |
- |
удалить строки, |
COMMIT |
- |
зафиксировать внесенные изменения, |
ROLLBACK |
- |
откатить внесенные изменения. |
CREATE ASSERTION |
- |
создать ограничение, |
DROP ASSERTION |
- |
удалить ограничение, |
GRANT |
- |
Предоставить привилегии пользователю или приложению на манипулирование объектами, |
REVOKE |
- |
отменить привилегию. |
CREATE TABLE <имя таблицы> (Имя столбца1, тип столбца1 [NOT NULL],…, Имя столбца n, тип столбца n [NOT NULL])
Тип столбца:
CHAR (m) |
- |
строка символов длиной m (240 – max), |
NUMBER |
- |
числовые значения (+ или -, м.б. десятичная точка, не более 40 цифр), |
NUMBER (m) |
- |
m – количество цифр (m<=40), |
NUMBER (m,d) |
- |
d – количество знаков после запятой, |
DATE |
- |
календарные даты. |
Предположим, надо создать следующую таблицу:
Таблица 10.1 Таблица “Бюджет” | ||
Номер темы |
Название |
Бюджет |
101 |
a |
250’000 |
102 |
b |
175’000 |
103 |
g |
95’000 |
CREATE TABLE Themes <BK> (Theme_number NUMBER (3) NOT_NULL, <BK>, Name CHAR (10), <BK>, Budget NUMBER (8,2)); <BK>
Рассмотрим еще один пример:
SQL> CREATE TABLE Сотрудники( |
Таб_номер NUMBER (6), |
Фамилия CHAR (15), | |
Должность CHAR (15), | |
Руководитель NUMBER (6), | |
Дата_приема DATE, | |
Оклад NUMBER (6,2), | |
Премия NUMBER (5,2), | |
Отдел NUMBER (3)); |
Спецификация максимальных длин не означает обязательного соответствующего расходования физической памяти БД.
Вставка записей в таблицу
INSERT INTO <имя таблицы>
(имя столбца 1,… ,имя столбца n)
VALUES (значение 1,… ,значение n);
В результате выполнения этого оператора к таблице, имя которой указано после слова INTO, добавляется одна запись. Для добавления записи заполняются поля перечисленные в списке. Значения полей берутся из списка, расположенного после слова VALUES. Списки полей и списки значений должны соответствовать друг другу по числу и по типу их элементов. При присвоении значений для первого поля берется первое значение, для второго – второе и т. д. В команде INSERT можно указывать имена только тех столбцов, в которые вводятся значения, остальные столбцы остаются пустыми, т.е. принимают значение NULL.
Пример. Добавляем информацию в таблицу “Сотрудники”:
INSERT INTO Сотрудники
VALUES (4954, ‘Карпов’, ‘Бухгалтер’, 7698, ‘4 NOV 86’, 120, NULL, 30);
Порядок ввода значений должен соответствовать объявленному порядку столбцов в таблице. В команде INSERT можно указывать не все столбцы, которые окажутся пустыми.
Пример:
INSERT INTO Сотрудники (ТабНомер, Фамилия, Дата приема, Отдел)
VALUES (7954, ‘Волков’ , ‘10 NOV 86’, 30);
Редактирование записей – это изменение значений полей в группе записей.
Оно выполняется оператором UPDATE:
UPDATE <имя таблицы>
SET <имя столбца 1> = <выражение 1>
(<имя столбца 2> = < выражение 2>,…)
[WHERE <условие отбора>];
Во всех записях, удовлетворяющих условию отбора, изменяются значения полей. Имя столбца указывает модифицируемое поле всей совокупности записей, а выражение определяет значения, которые будут присвоены этому полю.
Операции сравнения |
||
= |
Равно | |
> |
Больше | |
< |
Меньше | |
>= |
Больше или равно | |
<= |
Меньше или равно | |
<> или != |
Не равно | |
!> |
Не больше | |
!< |
Не меньше | |
LIKE |
Сравнение по шаблону | |
IS NULL |
Проверка нулевого значения | |
IN |
Проверка вхождения | |
BETWEEN |
Проверка вхождения в диапазон | |
Логические операции |
||
AND |
Логическое И | |
OR |
Логическое ИЛИ | |
NOT |
Логическое НЕ | |
Круглые скобки |
Повышение приоритета |
Запишем ряд логических правил SQL: