Лекции №15,16 (2 и 4.11.2004)

advertisement
Определение схемы (структуры) базы данных.
CREATE TABLE имя (список элементов).
 Как правило, элементы – это атрибуты и их типы, также
можно объявить ключи и ограничения.
 Команда CREATE X применяется для других элементов
структуры X: представлений (VIEW), индексов (INDEX),
утверждений (ASSERTION), триггеров(TRIGGER).
 «DROP X имя» удаляет созданный элемент вида X с
именем «имя».
Пример.
CREATE TABLE Sells (
bar CHAR(20),
beer VARCHAR(20),
price REAL
);
DROP TABLE Sells;
Типы.
1. INT или INTEGER.
2. REAL или FLOAT.
3. CHAR( n ) = строка символов фиксированной длины,
дополненная, в случае необходимости справа символомзаполнителем (чаще всего – пробелом).
4. VARCHAR( n ) = строка символов переменной длины, не
более n символов.
 В Oracle используется тип VARCHAR2( n ). Отличие:
память под VARCHAR2 имеет переменную длину;
VARCHAR хранится в массиве, имеющем
ограничивающий символ.
 Использовать VARCHAR в Oracle нежелательно (этот
тип данных может быть запрещен в будущем);
постарайтесь использовать тип VARCHAR2.
5.

6.
7.
Даты. Форма этого типа в SQL - DATE 'yyyy-mm-dd'
В Oracle используются отличные от SQL форматы дат.
Время. Форма этого типа в SQL - TIME 'hh:mm:ss[.ss...]' .
В Oracle: NUMBER – это и целое число, и число с
плавающей точкой.
Дата в Oracle по умолчанию.
Формат даты по умолчанию определяется в момент
генерации системы и может быть позднее изменен
системным администратором для всех или пользователем в
пределах сеанса работы, текущий формат - 'dd.mm.yy',
например, 09.04.02
 Величина, хранимая в поле типа DATE, будет иметь
точность, которая допустима на компьютере.
Пример:
CREATE TABLE Days (
d DATE
);
INSERT INTO Days VALUES('06.11.97');
 В Oracle есть функция to_date для преобразования дат в
формат по умолчанию.
INSERT INTO Days
VALUES(to_date('2000-01-01', 'yyyy-mm-dd'));
Определение ключей.
Используются ключевые слова PRIMARY KEY или
UNIQUE.
 В Oracle эти опции являются синонимами.
 В SQL может быть только один первичный ключ, а
уникальных - может быть несколько.
 SQL разрешает реализациям создавать индекс (для
ускорения доступа к данным по ключу) только для опции
PRIMARY KEY.
 Oracle создает индексы при задании и той и другой
опции.
 SQL не разрешает оставлять не заполненными значения
первичных ключей (NULL), но это допустимо для
«уникальных» столбцов (которые могут иметь два или
более пустых значения, но не пустые значения не могут
повторяться).
Ключи определяются в одном из двух мест:
1. После типа атрибута, если этот атрибут представляет
собой ключ.
2. Как отдельный элемент.
 Существенно, если ключ содержит более чем 1 атрибут.
Пример.
CREATE TABLE Sells (
bar CHAR(20),
beer VARCHAR(20),
price REAL,
PRIMARY KEY(bar,beer)
);
Другие свойства, которые можно назначать атрибутам.
1. NOT NULL = каждый кортеж должен иметь
определенное значение для этого атрибута.
2. DEFAULT значение = значение, которое будет присвоено
атрибуту, если не какое другое значение.
Пример.
CREATE TABLE Drinkers (
name CHAR(30) PRIMARY KEY,
addr CHAR(50) DEFAULT '123 Sesame St',
phone CHAR(16)
);
INSERT INTO Drinkers(name)
VALUES('Sally')
В результате выполнения команд получим:
name
addr
phone
Sally
123 Sesame St.
NULL
 Первичный ключ не может принимать значения по
умолчанию NULL.
 Такое добавление допустимо.
 Допускается в INSERT указывать список атрибутов и
список соответчтвующих значений.
 Если бы в CREATE TABLE определили
phone CHAR(16) NOT NULL
то такое добавление было бы невозможным.
Изменение столбцов.
Добавить атрибут к отношению R можно, используя
команду:
ALTER TABLE R ADD < описание столбца > ;
Пример:
ALTER TABLE Bars ADD phone CHAR(16)
DEFAULT 'unlisted';
 Столбец можно удалить.
ALTER TABLE Bars DROP license;
Представления (VIEWs).
Выражение, которое описывает таблицу, но не создает ее.
V
R
S
 Представление определяется командой:
CREATE VIEW < имя > AS < запрос > ;
Пример.
Представление CanDrink – это набор пар посетитель-сорт
пива (drinker-beer) таких, что посетитель часто посещает
бар, предлагающий данный сорт.
CREATE VIEW CanDrink AS
SELECT drinker, beer
FROM Frequents, Sells
WHERE Frequents.bar = Sells.bar;
Запросы к представлениям.
Выборка производится как для обычного отношения.
Пример.
SELECT beer
FROM CanDrink
WHERE drinker = 'Sally';
Семантика использования представлений.
SQL запрос
реляционная
алгебра
SQL
SQL определение
представления
реляционная
алгебра
Пример.
drinker, beer
 beer
drinker_’Sally’
Frequents
Sells
CanDrink
CanDrink
Query
В результате комбинирования получаем
 beer
drinker_’Sally’
drinker, beer
Frequents
Sells
Оптимизировать запрос.
1. Поместить выбор вниз дерева.
2. Удалить ненужные проекции.
 beer
drinker=’Sally’
Frequents
Sells
Download