Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовые-задачи

.pdf
Скачиваний:
24
Добавлен:
26.05.2014
Размер:
93.61 Кб
Скачать

Задание 11. В базе данных некоторой гостинницы для учета свободных номеров служит таблица

CREATE TABLE номера (

 

 

номер

INTEGER

NOT NULL,

дата_приезда

DATE

NOT NULL,

дата_отъезда

DATE

NOT NULL,

клиент

CHAR(30),

PRIMARY KEY (номер, дата_приезда),

CHECK (дата_отъезда >= дата_приезда));

В настоящем виде ограничение целостности CHECK() обеспечивает невозможность ввода даты отъезда, которая предшествует дате приезда. Однако, требуется большее — гарантировать невозможность бронирования номера с какой-либо даты, если она противоречит предшествующей дате отъезда из этого номера. Как это сделать?

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

CREATE TABLE сотрудники (

номер_сотрудника

INTEGER PRIMARY KEY,

имя

CHAR(20) NOT

NULL,

фамилия

CHAR(20) NOT

NULL);

CREATE TABLE телефоны ( номер_сотрудника INTEGER NOT NULL,

тип_телефона

CHAR(3), NOT NULL

 

CHECK (тип_телефона

 

IN (’дом’,’фкс’))

телефон

CHAR(12) NOT NULL,

PRIMARY KEY

(номер_сотрудника,

 

тип_телефона,

телефон), FOREIGN KEY номер_сотрудника

REFERENCES сотрудники(номер_сотрудника)

Коды «дом» и «фкс» указывают является ли данный номер домашним телефоном сотрудника или номером факса. Требуется напечатать отчет, в котором на каждого сотрудника отводится по одной строке, и в котором будут указаны оба телефона, либо NULL в случае отсутствия какого-либо из них.

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

Задание 13. Поставьте следующий эксперимент. Создайте таблицу

CREATE TABLE tab (

редкий INTEGER NOT NULL, -- 5 разных значений

частый

INTEGER NOT NULL, -- по 500 раз-

ных значений

 

-- на каждое из значений -- столбца ’редкий’

пустышка CHAR(100) NOT NULL)); -- что угодно

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

CREATE INDEX ind1 ON tab (редкий);

CREATE INDEX ind2 ON tab (редкий,частый); CREATE INDEX ind3 ON tab (частый);

CREATE INDEX ind4 ON tab (частый,редкий);

Объясните результаты измерений.

Соседние файлы в предмете Системы управления базами данных