Цель работы:
-изучить основные типы данных СУБД InterBase, команды по работе со структурой БД;
-научиться использовать sql-скрипты для работы с базой данных.
Задание:
а) изучить команды создания, удаления, подключения/отсоединения от базы данных;
б) создать базу данных, подключиться к базе данных, отсоединиться от базы данных, удалить базу данных (с помощью программы InterBase Console / Inreactive SQL и при помощи sql-скрипта);
в) изучить типы данных СУБД InterBase;
г) изучить команды создания, модификации и удаления доменов, структуры таблицы данных;
д) определить ограничения и создать домены в базе данных (в соответствии со своим вариантом);
е) используя домены, создать структуры таблиц данных, связать таблицы по внешним ключам;
е) научиться использовать команды модификации и удаления доменов, структур таблиц данных;
ж) рассмотреть возможности программы SQL Explorer для работы с базой данных;
и) оформить и сдать отчет по лабораторной работе N 2.
Создание базы данных
База данных в InterBase физически представляет собой один файл с расширением *.gdb, в котором хранится все содержимое базы данных, начиная от служебной информации и заканчивая пользовательскими данными. Это отличает InterBase от многих СУБД, где каждая таблица, индекс и т.п. структуры хранятся в отдельном файле, а база данных представляет собой совокупность файлов на диске, что, например, характерно для СУБД FoxPro, Access и др.
Работу с базой данных, в том числе и создание, можно осуществлять различными способами:
-автоматизированным: при помощи утилит IBConsole, Interactive SQL;
-ручным: с использованием sql-скрипта (команды CREATE DATABASE (см. документ Language Reference)).
В качестве примера рассмотрим создание базы данных "Tелефонная книга". ER-диаграмма предметной области приведена на рисунке 1. При составлении диаграммы использовались следующие семантические утверждения:
-одному человеку может соответствовать несколько номеров телефонов (сотовый, домашний, рабочий и т.п.), некоторые номера телефонов могут соответствовать одинаковым личностям;
-каждой личности соответствует только одни адрес проживания, но по одному адресу может проживать несколько личностей.
Рисунок 1 - ER-диаграмма предметной области "Телефонная книга"
Рассмотрим последовательность действий для создания базы данных, используя утилиту IB Console:
а) запустите сервер InterBase (если установка сервера осуществляется вручную, а не автоматически после загрузки операционной системы). Это условие является обязательным для любой операции над базой данных или для работы с сервером, поэтому в дальнейшем мы его будем опускать, считая, что оно выполняется по умолчанию;
б) откройте программу IB Console;
в) вызовите меню Database > Create Database;
г) введите алиас (псевдоним) базы данных, путь и название файла базы данных и нажмите кнопку "ОК".
Рисунок 2 - Создание базы данных
Диалект базы данных
Обратите внимание на рисунок 2: при создании базы данных система просит установить свойство SQL Dialect. Это свойство может принимать только два значения: 1 или 3. Принципиально эти диалекты отличаются следующим:
-диалект 3 позволяет использовать расширенный набор типов данных, таких, как типы для работы с большими целыми числами, типы для работы с датой и временем - DATE и TIME;
-диалект 3 различает регистр идентификаторов, если они заключены в двойные кавычки. Например, Table1 и TABLE1 в обоих диалектах будут равнозначны, а "Table1" и "TABLE1" - нет;
-диалект 3 не поддерживает неявное приведение типов данных, что было в диалекте 1.
Следует придерживаться следующих рекомендаций при выборе диалекта:
-следует выбирать диалект 3, если база данных проектируется под приложение, которое будет использовать современные библиотеки прямого доступа к серверу InterBase;
-лучше использовать диалект 1, если необходима совместимость с более ранними библиотеками доступа к InterBase, такими, как BDE, поскольку BDE не всегда корректно работает с диалектом 3.
Когда вы работаете с базой данных при помощи специального sql-скрипта, необходимо выполнить следующее:
а) создайте на диске текстовый файл (для распознавания sql-скрипта используйте расширение *.sql , хотя это не является обязательным условием), например, bd.sql, со следующим содержанием:
CREATE DATABASE "C:\BD\Telephone.gdb" USER "SYSDBA" PASSWORD "masterkey";
Замечание:
каталог, в котором создается БД, уже должен существовать на диске, иначе команда создания БД выдаст ошибку.
в) запустите утилиту Interactive SQL либо через IB Console, либо из каталога, где установлен InterBase - bin/isql.exe;
г) выберите меню Query -> Load Script, и найдите на диске файл, который вы создали - bd.sql (рисунок 3);
Рисунок 3 - Открытие скрипта
д) запустите скрипт на выполнение командой Query -> Execute. В случае удачного завершения система система создает базу данных, автоматически подключается к ней, о чем свидетельствует присутствие название базы данных в строке состояния окна Interactive SQL. В противном случае система выдаст сообщение об ошибке.
Замечание: в дальнейшем описание запуска на выполнение sql-скрипта мы будем опускать, поскольку этот процесс он достаточно подробно описан в пункте д).
Подключение / Отсоединение от базы данных
Режим подключения к базе данных используется в том случае, когда база данных уже существует, необходимо произвести в ней кое-какие изменения.
Замечание:
после создания базы данных, она автоматически подключается системой и становится доступной для дальнейшей работы. Не нужно использовать дополнительных команд подключения.
Если Вы собираетесь работать с базой данных в автоматизированном режиме, то подключиться к ней можно, используя команду меню Database -> Connect. Для дальнейшей работой с базой данных следует вызвать Tools -> Interactive SQL.
Во втором случае файл sql-скрипта должен иметь следующее содержание:
CONNECT "C:\BD\Telephone.gdb" USER "SYSDBA" PASSWORD "masterkey";
Удаление базы данных
Удаление базы данных при помощи ISQL можно осуществить, вызвав меню Database-> Drop Database.
Замечание: удалить базу данных можно только после того, как вы к ней подключились.
При помощи скрипта можно удалить базу данных следующим образом:
CONNECT "C:\BD\Telephone.gdb" USER "SYSDBA" PASSWORD "masterkey";
DROP DATABASE;
Основные типы данных
Приведем перечень обрабатываемых в InterBase типов данных.
Целочисленные типы
SMALLINT - слово, короткое целое (2 байта) со знаком (от -32768 до 32767).
INTEGER - двойное слово, длинное целое (4 байта)
со знаком (от
Вещественные типы
FLOAT - числа с плавающей точкой одинарной точности (4 байта) - 7 значащих цифр. Отметим, что точность этого типа для хранения большинства дробных значений недостаточна, особенно это касается денежных величин. В переменных типа FLOAT очень быстро нарастают ошибки округления.
DOUBLE PRECISION - числа с плавающей точкой двойной точности (8 байтов) - 15 значащих цифр.
Типы данных с фиксированной точкой
DECIMAL (размер, точность) / NUMERIC (размер, точность). Размер переменной (от 1 до 15) указывает гарантированную точность переменной, то есть число значащих цифр. Точность (от 1 до 15) задает число цифр после запятой (должно быть меньше или равно размеру). Например, DECIMAL(10,3) содержит числа в формате ppppppp.sss
Типы данных DECIMAL и NUMERIC имеют смысл только для внешнего представления данных. В базе они реально хранятся в одном из числовых форматов (SMALLINT, INTEGER, FLOAT, DOUBLE PRECISION):
-если размер и точность не указаны, то данные хранятся как INTEGER;
-если точность не указана, то принимается равной 0. Хранимый тип при этом будет зависеть от размера. Если размер меньше 5, то тип SMALLINT, если находится в интервале от 5 до 9, то INTEGER, если больше 9, то DOUBLE PRECISION.
Типы хранения даты и времени
Тип DATE хранит даты с точностью до дня. Значения могут варьироваться от 1 января 100 г. до 29 февраля 32768 г.
Тип TIME хранит данные о времени с точностью до десятитысячной доли секунды. Диапазон возможных значений - от 00:00 АМ до 23:59.9999 РМ.
Тип TIMESTAMP представляет собой комбинацию типов DATE и TIME.
Для преобразования дат в строки используется группа функций EХTRACT.
Символьные типы
CHAR(n) / CHARACTER(n) - строка фиксированной длины n. Максимальный размер 32 кбайт.
CHARACTER VARYING(n) / VARCHAR(n) - строка переменной длины; максимальный размер 32 кбайт. В отличие от строки фиксированной длины, которая хранит полные n символов, даже, если реальная строка содержит меньше символов, строка переменной длины хранит столько символов, сколько есть в реальной строке, причем n - максимальное количество должно быть обязательно объявлено, если это не 1.
InterBase конвертирует строку переменной длины в строку фиксированной длины путем добавления пробелов до необходимого количества символов.
Замечание: при использовании указанных выше типов нет никакого смысла указывать их полные названия, скоращенные гораздо удобнее;
Важнейшей характеристикой символьного поля является его набор символов - CHARACTER SET. Набор символов определяется для всей базы данных и используется по умолчанию для всех символьных полей, если не переопределяется явно при создании поля.
Чтобы создать символьное поле с явным указанием конкретного набора символов, необходимо в описании столбца (пример будет рассмотрен ниже) добавить описание набора символов. Для поддержки русского языка обычно используется набор символов WIN1251.
Помимо указания набора символов для символьных полей возможно также указвать порядок сортировки (COLLATION ORDER), который будет определять, как будут сортироваться символы набора данных. Для русского языка возможно два варианта сортировки - WIN1251 и PXW_CYRL.
В документации InterBase 6.0 указывается возможность применения типов NCHAR и NCHAR VARYING, которые используют по умолчанию кодировку ISO8859_1. То есть фактически использование типа NCHAR аналогично применению CHAR DEFAULT CHARACTER SET ISO8859_1.
Тип данных BLOB
Тип данных BLOB предназначен для хранения большого количества данных большого размера - картинки, музакльные файлы, видеофрагменты и т.д.
Объявляются данные типа BLOB также как и днные остальных типов, однако реализация их внутри базы данных значительно отличается. Поля остальных типов расположены на страницах данных рядом друг с другом, а в случае BLOB, на странице хрантся только идентификатор этого поля, а само содержимое располагается на отдельной странице. Именно такая организация данных позволяет хранить данные нефиксированного размера.
Массивы
Все перечисленные типы данных, кроме BLOB, могут быть организованы в массивы. Массивы реализованы на базе полей типа BLOB. Но не стоит забывать, что такие библиотеки доступа, как BDE и IBX, не имеют возможности работать с массивами. Подробнее об этом типе данных смотрите в документации.
Замечание: элементом массива не может быть массив.
Домены
Столбцы в различных таблицах базы данных могут содержать однотипные данные. Кроме того, виды контроля этих данных также могут быть одинаковыми. В таких условиях описание данных и методов их контроля целесообразно выполнить один раз, тогда при описании таблиц достаточно указать только имя соответствующего описания данных.
Для указанных выше целей и служат домены. Напомним, что в реляционной модели данных под доменом понимается множество допустимых значений определенного типа данных.
Перед тем как создавать таблицу данных, необходимо продумать, какие логические и физические ограничения накладываются на атрибуты отношения, выделить домены и создать их.
Создание домена
Для создания домена используется команда CREATE DOMAIN, в результате выполнения которой будет создан домен, на который можно будет ссылаться при создании и модификации таблиц данных.
Рассмотрим подробнее синтаксис описания доменов.
CREATE DOMAIN domain_name [AS] [DEFAULT {literal | NULL | USER}]
[NOT NULL] [CHECK ( [COLLATE collation]
domain_name - имя создаваемого домена
datatype - любой допустимый в InterBase тип данных
[DEFAULT {literal | NULL | USER}] - задание значения
по умолчанию. Значение по умолчанию присваивается соответствующему
атрибуту при создании новой строки в таблице. Literal указывает значение
явно, NULL - задает признак "Нет значения", USER - имя пользователя,
создающего запись. Для полей типа "дата" можно указать NOW - в этом
случае вводится текущая дата и время; TODAY - текущая дата;
YESTERDAY - вчерашняя дата; TOMORROW - завтра.
CHECK ( VALUE <operator> <val>
/ VALUE [NOT] BETWEEN <val> AND <val>
/ VALUE [NOT] LIKE <val> [ESCAPE <val>]
/ VALUE [NOT] IN (<list_val>)
/ VALUE IS [NOT] NULL
/ VALUE [NOT] CONTAINING <val>
/ VALUE [NOT] STARTING [WITH] <val>
/ (<dom_condition>)
/ NOT (<dom_condition>)
/ <dom_condition> OR <dom_condition>
/ <dom_condition> AND <dom_condition>
<operator> ::= {= | < | > | <= | >= | !< | !> | <> | !=}
При использовании конструкции CHECK необходимо помнить следующее:
-домены создаются независимо друг от друга;
-домен может иметь только одну конструкцию CHECK;
-конструкция CHECK не может быть переопределена при
описании поля таблицы. Если при описании поля в таблице, ссылающегося
на домен, имеющий CHECK, указана своя конструкция CHECK,
то действовать будут оба ограничения, то есть будет работать
конструкция CHECK ( Примеры. Создадим логический тип данных,
множество допустимых значений которого описываются значениями
"1" и "2", значение поля не может быть пустым, т.е. ввод информации в это
поле обязателен.
CREATE DOMAIN Logical12 AS SMALLINT NOT NULL CHECK (VALUE IN (1,2));
Определим допустимые значения для типа полей
задания весовых характеристик (если вес не задан, то значение
поля равно NULL, иначе - не меньше технологически минимального
для данного производства).
CREATE DOMAIN Pveight AS NUMERIC(12,2) DEFAULT NULL CHECK ((VALUE IS NULL) or (VALUE>1.25));
Удаление домена
Удаление доменов осуществляется командой DROP DOMAIN.
Следует помнить, если домен используется в нескольких
таблицах, то удалить его нельзя без предварительного удаления в таблицах
тех столбцов, в описании которых он используется.
Синтаксис команды следующий:
DROP DOMAIN dom_name
dom_name - имя домена, который необходимо удалить.
Модификация домена
Изменение доменов осуществляется командой ALTER DOMAIN.
С помощью этой команды можно изменить любые характеристики домена,
кроме типа данных и установки NOT NULL. Сделанные изменения воздействуют
на атрибуты всех таблиц, где использовался измененный домен.
Заметим, что значения в ячейках таблиц
не изменяются, в связи с чем может возникнуть ряд проблем
при модификации домена.
Команда ALTER DOMAIN доступна либо владельцу
базы данных, либо пользователю SYSDBA.
Полный синтаксис команды представлен в Language Reference.
Создание структуры таблицы данных
Для создания таблицы данных исползуется следующая команда
CREATE TABLE name_table [EXTERNAL [FILE]
"<filespec>"] (LIST_<col_def> [, LIST_<tconstraint>);
name_table - имя создаваемой таблицы.
Имя таблицы внутри базы должно быть уникальным;
[EXTERNAL [FILE] "<filespec>"] - задает таблицу,
данные которой размещаются во внешней (не InterBase) таблице или файле;
<col_def> - описание поля таблицы;
<tconstraint> - описание логической целостности для таблицы в целом.
Подробное описание данной команды можно прочитать
в документации к InerBase "Language Reference".
Рассмотрим пример создания таблицы данных.
Предположим, в ходе проектирования базы данных "Фильмотека"
мы получили следующую модель базы данных (работа студента 99ВМК1 Ковтуна А.В.),
ER-диаграмма представлена на рисунке 4.
Рисунок 4 - ER-диаграмма предметной области "Фильмотека"
Kino(Nomer, Name, Zanr, Year, Akter, Reziser, Opisanie, Photo, Dlitelnost)
Реализация вышеуказанной схемы отношения в виде
sql-скрипта будет выглядеть следующим образом.
/*Вначале создадим базу данных:*/
CREATE DATABASE "c:\bd\Filmoteka.gdb" USER "sysdba" PASSWORD "masterkey";
/*Создадим домены:*/
CREATE DOMAIN Nomer_d AS SMALLINT NOT NULL;
CREATE DOMAIN Name_d AS VARCHAR(100) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL;
CREATE DOMAIN Zanr_d AS VARCHAR(50) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL;
CREATE DOMAIN God_d AS SMALLINT CHECK (VALUE BETWEEN 1850 AND 2500);
CREATE DOMAIN FIO_d AS VARCHAR(250) CHARACTER SET WIN1251 NOT NULL COLLATE PXW_CYRL;
CREATE DOMAIN Opisanie_d AS VARCHAR(500) CHARACTER SET WIN1251 COLLATE PXW_CYRL;
CREATE DOMAIN Photo_d AS BLOB;
CREATE DOMAIN Dlitelnost_d AS SMALLINT NOT NULL CHECK (VALUE>0);
/*Создадим таблицу данных:*/
CREATE TABLE Kino (
Nomer Nomer_d,
Zanr Zanr_d,
God God_d,
Akter FIO_d,
Reziser FIO_d,
Opisanie Opisanie_d,
Photo Photo_d,
Dlitelnost Dlitelnost_d
);
Для запуска этого скрипта на выполнение
выполните следующее
1) сохраните его в файле, например, c:\bd\film.sql.
2) затем запустите программу Interactive SQL.
3) загрузите скрипт с использованием команды меню
Query -> Load Script;
4) командой Query -> Execute запустите скрипт на выполнение
(рисунок 5).
Рисунок 5
InterBase позволяет задавать ограничения на отдельные
столбцы или таблицу в целом, называемые
ограничениями логической целостности,
которые задают порядок управления зависимостями между столбцом и таблицей или
таблицей и таблицей. Они воздействуют не все выполненные с таблицей действия,
автоматически поддерживаясь системой. В зависимости от типа ограничения
они применяются либо к таблице целиком, либо к отдельным ее столбцам.
Рассмотрим следующие ограничения.
Ограничения первичного (PRIMARY KEY) и уникального
(UNIQUE) ключей означают, что значение в соответствующем столбце является
уникальным, то есть в таблице не может быть двух строк с одинаковыми
значениями в данном столбце. Соответственно значения в таком столбце
не могут принимать значение NULL. При попытке записать значение, которое
уже хранится в таблице в данном столбце, система выдаст ошибку.
И первичные, и уникальные ключи могут строиться
не только по отдельному полю, но и по группе полей.
Однако в отличие от первичного ключа, который может быть
единственным в таблице, уникальных ключей может быть несколько.
Ограничение внешнего ключа
REFERENCES other_table [(List_other_col)]
Это ограничение означает, что данное поле
(для которого оно указано) соответствует
первичному ключу в другой таблице other_table, и в этой таблице имеется
строка с указанным значением. Если список опущен, то предполагается
список из одного поля, имеющего то же имя, что и описываемое.
Рассмотрим пример, описывающий связь между
таблицами данных.
Выше, на рисунке 1, была представлена
ER-диаграмма предметной области
"Телефонная книга". Ниже представлен sql-скрипт
на создание базы данных с подробным описанием отдельных команд.
/* устанавливаем кодировку для Windows Interactive SQL*/
SET NAMES WIN1251;
/* создаем базу данных*/
CREATE DATABASE "c:\bd\tel.gdb" USER "SYSDBA" PASSWORD "masterkey"
DEFAULT CHARACTER SET WIN1251;
/* создаем домены*/
CREATE DOMAIN ID AS INTEGER NOT NULL CHECK (VALUE>0);
CREATE DOMAIN Home AS SMALLINT NOT NULL CHECK (VALUE>0);
CREATE DOMAIN Box AS SMALLINT CHECK ((VALUE>0) OR (VALUE IS NULL));
CREATE DOMAIN Number AS CHARACTER(20) NOT NULL;
/* создаем таблицу, описывающую сущность "Личность"*/
/*объявляем поле ID первичным ключом*/
/*для задания имени первичного ключа используем CONSTRAINT*/
CREATE TABLE Lichnost(
ID ID,
Family CHARACTER(20) NOT NULL COLLATE PXW_CYRL,
Name CHARACTER(20) NOT NULL COLLATE PXW_CYRL,
Surname CHARACTER(25) NOT NULL COLLATE PXW_CYRL,
Birthday DATE,
CONSTRAINT Lich_ID PRIMARY KEY(ID)
);
/* создаем таблицу, описывающую сущность "Телефон"*/
/* объявляем поле Number первичным ключом и задаем его имя*/
CREATE TABLE Tel(
Number Number,
Comment CHARACTER(100) COLLATE PXW_CYRL,
CONSTRAINT Tel_PK PRIMARY KEY(Number)
);
/* поскольку между сущностями "Личность" и "Номер телефона"*/
/* существует связь М:М, создадим новую таблицу*/
/* объявляем поля ID и Number первичным ключом и задаем его имя*/
/* поскольку ID и Number должны соответствовать значениям таблиц*/
/* Lichnost и Tel объявим их внешними ключами*/
/* для задания имени внешнего ключа используется также конструкция CONSTRAINT*/
CREATE TABLE Tel_Number(
Number Number,
ID ID,
CONSTRAINT Tel_Num PRIMARY KEY(Number,ID),
CONSTRAINT Tel_Num_ID FOREIGN KEY(ID) REFERENCES Lichnost(ID),
CONSTRAINT Tel_Num_Num FOREIGN KEY(Number) REFERENCES Tel(Number)
);
/* создаем таблицу, описывающую сущность "Место проживания"*/
/* в данной таблице первичный ключ является составным*/
/* поскольку между сущностями "Личность" и "Номер телефона"*/
/* существует связь М:1, добавим поле ID в таблицу Adr*/
/* и объявим это поле внешним ключом, указав, что*/
/* это поле связано с таблицей Lichnost и соответствующим полем ID*/
/* для задания имени внешнего ключа используется также конструкция CONSTRAINT*/
CREATE TABLE Adr(
ID_Adr ID,
ID ID,
Street CHARACTER(30) NOT NULL COLLATE PXW_CYRL,
Home Home,
Box Box,
Comment CHARACTER(100) COLLATE PXW_CYRL,
CONSTRAINT Adr_Un PRIMARY KEY(ID_Adr),
CONSTRAINT Lich_Adr FOREIGN KEY(ID) REFERENCES Lichnost(ID)
);
Удаление таблицы данных
Команда DROP TABLE предназначена для удаления таблиц.
Ее синтаксис:
DROP TABLE table_name;
table_name - имя удаляемой таблицы.
В результате выполнения команды DROP TABLE удаляется
содержимое таблицы,
ее описание,
все связанные с таблицей индексы и триггеры.
Если в базе данных есть ссылки на удаляемую таблицу из других
структур (таблиц, представлений или прцедур), то удаление не выполняется.
Кроме того, удаление не произойдет, если активна транзакция,
работающая с удаляемой таблицей.
Следовательно, перед удалением таблицы необходимо:
-завершить все транзакции, работающие с таблицей;
-удалить все ссылки на удаляемую таблицу.
Например, удалим таблицу Kino:
DROP TABLE Kino;
Модификация таблицы данных
Команда ALTER TABLE предназначена для изменения
структуры уже существующих таблиц данных.
Она позволяет:
-добавить в таблицу новый столбец;
-удалить из таблицы существующий столбец;
-добавить в таблицу ограничение на столбец или таблицу;
-удалить из таблицы ограничение на столбец или таблицу.
В одной команде ALTER TABLE можно задать любое
число изменений. Внесение изменений разрешено создателю БД и таблицы,
а также SYSDBA.
Модификация таблицы, если она содержит данные и связана
с другими таблицами, является потенциально опасной операцией. Поэтому прежде
чем приступить к изменению таблицы, необходимо тщательно продумать
схему внесения изменений.
Добавление столбцов в таблицу
При добавлении нового столбца в таблицу конфликтов
с ранее введенными данными не возникает. Однако, если вы поставили
на столбец какое либо ограничение, например, NOT NULL, то следует
позаботиться о том, чтобы записанные в него данные имели допустимые значения.
Удаление столбца из таблицы
Удалить столбец из таблицы можно только в том случае,
если он не используется ни в каких ограничениях (например, не является
внешним или внутренним ключом, и т.п.). Поэтому прежде чем удалить столбец,
необходимо удалить все ограничения, в которых он присутствует.
Изменение формата столбца
Синтаксис команды ALTER TABLE не предполагает изменения
столбца. Поэтому для изменения столбца требуется выполнить две команды
ALTER TABLE. Первая - удалить столбец и вторая - добавить столбец.
Если данные необходимо сохранить, то операция
замены распадается не следующие операции:
-добавить новый столбец с тем же типом данных,
что и изменяемый (ALTER TABLE ADD ...);
-скопировать данные из существующего столбца в новый
(UPDATE ...);
-выполнить необходимые действия по удалению существующего
столбца (удалить соответствующие ограничения);
-выполнить удаление существующего столбца (ALTER TABLE DROP ...);
-создать столбец с именем удаленного
и новыми характеристиками (ALTER TABLE ADD ...);
-скопировать данные из столбца-копии
с измененными характеристиками (UPDATE ...=CAST(...)...);
-удалить столбец-копию (ALTER TABLE DROP ...);
-выполнить операцию по восстановлению (при необходимости)
группы ограничений, удаленных в процессе подготовки к удалению исходного
столбца.
Добавление и удаление ограничений
Добавление и удаление ограничений не требует никаких
вспомогательных действий. Необходимо только в случае добавления или
удаления нескольких ограничений соблюдать порядок их добавления.
Подробный синтаксис команды ALTER TABLE представлен
в документации, файл Language References.
Примеры.
Предположим, мы имеем следующее отношение:
Sotrudnik (Tab_No, FIO, Otdel)
Добавим в отношение новый атрибут - стаж работы.
ALTER TABLE Sotrudnik ADD Stag NUMERIC(4,2);
Сделаем поле Tab_No уникальным ключом, для чего
вначале создадим домен, имеющий множество допустимых значений не
пустых и больше нуля.
CREATE DOMAIN Sotr_Unik SMALLINT NOT NULL CHECK (VALUE>0);
Создадим новый атрибут в отношении Sotrudnik, описанный при помощи домена Sotr_Unik
ALTER TABLE Sotrudnik ADD Tab_No_1 Sotr_Unik;
Скопируем значения из поля Tab_No в поле Tab_No_1
UPDATE Sotrudnik SET Tab_No_1=Tab_No;
Удалим поле Tab_No из отношения
ALTER TABLE Sotrudnik DROP Tab_No;
Создадим новый атрибут с тем же именем, но с новым описанием
ALTER TABLE Sotrudnik ADD Tab_No Sotr_Unik;
Скопируем значения атрибута обратно из поля Tab_No_1
UPDATE Sotrudnik SET Tab_No=Tab_No_1;
Удалим временный столбец Tab_No_1
ALTER TABLE Sotrudnik DROP Tab_No_1;
SQL Explorer
Для работы с базой данных достаточно удобно использовать
программу Database SQL Explorer, которая входит в стандартный пакет Delphi.
Вид программы представлен на рисунке 6.
Рисунок 6 - Вид программы SQL Explorer
С помощью этой программы можно выполнять следующие операции:
-просматривать и изменять структуру базы данных;
-просматривать содержимое базы данных и системных таблиц, изменять содержимое базы данных;
Для работы с базой данных первоначально необходимо определить
для нее псевдоним, или алиас. Для чего в меню Object выберите пункт New.
После чего программа запросит тип СУБД, в которой была создана база данных -
выберите InterBase (рисунок 7).
Рисунок 7 - Создание нового объекта
После этого система создаст новый объект
и попросит ввести имя алиаса (псевдонима) базы данных (по умолчанию имя
будет INTERBASE1) (рисунок 8).
Рисунок 8 - Параметры объекта
В правой части окна располагается целый список параметров,
которые необходимо настроить для удобного обращения к базе данных.
Перечислим основные:
SERVER NAME - путь к базе данных.
LANGDRIVER - кодировка, для удобного обращения
с русскими символами используйте Pdox ANSI Cyrillic.
USER NAME - имя пользователя, которое будет выводиться
по умолчанию при подключении к базе данных.
Остальные параметры списка рассмотрим
по случаю необходимости их использования.
После того как были введены необходимые параметры,
сохраните изменения Object -> Apply.
Для подключения к базе данных, нажмите на
значке "+" рядом с алиасом, либо выберите команду меню Object -> Open.
Система попросит ввести идентификаторы (имя пользователя и пароль).
После прохождения процедур идентификации и аутентификации
пользователь может начать работу с базой данных (рисунок 9).
Рисунок 9 - Просмотр и изменение содержимого таблицы данных
С помощью программы SQL Explorer можно обращаться
к базе данных в режиме SQL запросов, для чего откройте закладку
Enter SQL, введите запрос и нажмите на кнопку выполнения (рисунок 10).
Рисунок 10 - Организация запроса
Номер варианта задания определяется
Вашим номером в журнале преподавателя, взятым по модулю 10.
Перед выполнением лабораторной работы осуществите
переход от инфологической модели к даталогической, используя в качестве
СУБД InterBase 5.0. Определите домены, схемы отношений, первичные
и внешние ключи.
Вариант 0
Предметная область "Магазин видеофильмов". Выделены две
сущности: "Видеофильм" и "Жанр". Связь между сущностями
описывается следующей семантикой:
-видеофильм может относится к нескольким жанрам одновременно.
Например, фильм "Двенадцать стульев" можно отнести и к комедии, и к
приключениям;
-к каждому жанру может отностится большое число видеофильмов.
Рисунок 11 - ER-диаграмма предметной области "Магазин видеофильмов"
Вариант 1
Предметная область "Библиотека". Выделены
сущности: "Книга" и "Читатель". Связь между сущностями
описывается следующей семантикой:
-в один момент времени книга может находиться только
у одного читателя, либо лежать на полке;
-читатель одновременно может взять из библиотеки несколько
книг.
Рисунок 12 - ER-диаграмма предметной области "Библиотека"
Вариант 2
Предметная область "Кафедра". Выделены
сущности: "Преподаватель" и "Дисциплина". Связь между сущностями
описывается следующей семантикой:
-каждый преподаватель кафедры может читать несколько дисциплин
на кафедре;
-одна и та же дисциплина может преподаваться
несколькими преподавателями.
Рисунок 13 - ER-диаграмма предметной области "Кафедра"
Вариант 3
Предметная область "Деканат". Выделены
сущности: "Студент" и "Группа". Связь между сущностями
описывается следующей семантикой:
-студент в один момент времени может учиться только в одной
группе;
-в одной группе может учиться несколько студентов.
Рисунок 14 - ER-диаграмма предметной области "Деканат"
Вариант 4
Предметная область "Приемная комиссия". Выделены
сущности: "Абитуриент" и "Специальность". Связь между сущностями
описывается следующей семантикой:
-абитуриент может подать заявление на поступление
одновременно на несколько специальностей;
-на одну специальность могут быть приняты документы многих
абитуриентов.
Рисунок 14 - ER-диаграмма предметной области "Приемная комиссия"
Вариант 5
Предметная область "Фонд алгоритмов и программ". Выделены
сущности: "Программа" и "Автор". Связь между сущностями
описывается следующей семантикой:
-автор может иметь права на несколько программных продуктов;
-авторство на один программный продукт может принадлежать
нескольким личностям.
Рисунок 15 - ER-диаграмма предметной области "ФАиП"
Вариант 6
Предметная область "Анкетирование". Выделены
сущности: "Вопрос" и "Ответ". Связь между сущностями
описывается следующей семантикой:
-на каждый вопрос может быть несколько вариантов ответов;
-каждый ответ может отноститься только с одним вопросом.
Рисунок 16 - ER-диаграмма предметной области "Анкетирование"
Вариант 7
Предметная область "Автобусное депо". Выделены
сущности: "Водитель" и "Автобус". Связь между сущностями
описывается следующей семантикой:
-в один момент времени водитель может работать только на одном
автобусе;
-в каждый момент времени автобус может находиться под управлением
только одного водителя.
Рисунок 17 - ER-диаграмма предметной области "Автобусное депо"
Вариант 8
Предметная область "Бухгалтерия". Выделены
сущности: "Сотрудник" и "Разряд". Связь между сущностями
описывается следующей семантикой:
-каждому сотруднику может соответствовать только один разряд;
-в организации в один момент времени может работать несколько
сотрудников с одинаковыми разрядами.
Рисунок 18 - ER-диаграмма предметной области "Бухгалтерия"
Вариант 9
Предметная область "Зал доступа в Интернет". Выделены
сущности: "Студент" и "Рабочее место". Связь между сущностями
описывается следующей семантикой:
-в один момент времени студент может работать только за одним
рабочим местом;
-рабочее место в один момент времени может быть занято только
одним студентом.
Рисунок 19 - ER-диаграмма предметной области "Зал доступа в Интернет"
1. Что представляет собой база данных в СУБД InterBase?
2. Перечислите типы данных InterBase и охарактеризуйте их.
3. Перечислите разновидности диалектов InterBase, чем они
отличаются?
4. Что понимается под доменом? Назовите команды
по работе с доменами. Приведите примеры.
5. Какие виды ограничений типа данных поддерживает
InterBase?
6. Перечислите команды по работе с таблицой данных.
Приведите примеры работы каждой команды.
7. Что понимается под первичным ключом? Как создать
первичный ключ в отношении?
8. Чем отличаются между собой PRIMARY KEY и UNIQUE?
9. Дайте понятие внешнего ключа. Как создать внешний
ключ между отношениями?
10. Есть ли какие-нибудь условия создания
внешнего ключа?
Варианты заданий
Контрольные вопросы