Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции для 16 группы.docx
Скачиваний:
46
Добавлен:
13.02.2015
Размер:
293.45 Кб
Скачать

7.2.3. Специальный тип rowid

Тип ROWID – специальный тип данных, который служит для представления указателей на запись в таблице. При создании строки в таблице ей сразу присваивается ROWID, который остается неизменным до ее удаления или реорганизации данных. Использование ROWID – самый быстрый способ доступа к строке в таблице.

7.2.4. Тип данных для хранения даты и времени

Тип DATE (применяется только в Oracle) используется для хранения даты и времени. Допускаются даты с 1 января 4712 г. до н.э. до 31 декабря 4712 г. н.э. Время хранится с точностью до секунды.

Синтаксис: DATE

Поддерживается специальная арифметика дат и времен. Добавление к переменной типа DATE числа интерпретируется Oracle как определение более поздней даты, а вычитание – как определение более ранней. В Oracle одному дню соответствует число 1. Для оперирования одним часом можно использовать выражение 1/24, одной минутой – 1/24/60 и т.д.

7.2.5. Типы данных для хранения больших объемов информации

Тип CLOB (применяется только в Oracle) используется для хранения символьных данных переменной длины размером до 4 гигабайт.

Синтаксис: CLOB.

При необходимости сохранить в БД большой объем текстовой информации, превышающей 4000 символов, допустимых в типе VARCHAR2, в таблице должна быть создана колонка с типом СLOB.

Тип BLOB (применяется только в Oracle) используется для хранения данных размером до 4 гигабайт.

Синтаксис: BLOB

При необходимости сохранить в БД рисунок, аудиозапись или видеозапись в таблице должна быть создана колонка с типом BLOB.

Тип BFILE (применяется только в Oracle) используется для хранения указателей на двоичные данные, находящиеся во внешних по отношению к СУБД файлах. Сами файлы хранятся в файловой системе.

Синтаксис: BFILE

Для работы с типами данных, предназначенных для хранения больших объемов информации, используется стандартный пакет процедур и функций DBMS_LOB, который входит в комплект поставки СУБД Oracle.

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

Varchar2 – для хранения строк символов;

Number и Integer – для хранения числовых данных;

Date – для хранения даты и времени;

Blob и Clob – для хранения информации больших объемов.

7.3. Создание, модификация и удаление таблиц

Операторы языка определения данных DDL предназначены для создания, модификации и удаления объектов базы данных.

Рассмотрим операторы языка DDL, предназначенные для создания, модификации и удаления таблиц.

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

Оператор определения таблиц Oracle содержит довольно большое число ключевых слов и параметров. Рассмотрим синтаксис сокращенной конструкции:

CREATE TABLE [имя_схемы.]имя_таблицы (

имя_столбца тип_данных

[DEFAULT выражение]

[ограничение_целостности_столбца],

...

)

В данной конструкции тип_данных соответствует синтаксису определенного типа.

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

Для понимания смысла синтаксической конструкции ограничение_целостности_столбца рассмотрим пример.

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

CREATE TABLE project (

proj_no NUMBER(4),

proj_name VARCHAR2(30),

bdate DATE,

budget NUMBER(10,2) )

Внесем некоторые уточнения:

  • колонка proj_no не должна содержать неопределенные (NULL) значения и должна быть первичным ключом таблицы;

  • колонка proj_name должна содержать наименования проектов, которые начинаются с латинских символов от “A” до “Z”;

  • колонка bdate по умолчанию (в случае, если ее значение не задано явно) должна содержать текущую (системную) дату;

  • колонка budget не должна содержать неопределенные (NULL) значения.

Для обеспечения этих требований синтаксическую конструкцию для создания таблицы придется изменить:

CREATE TABLE project (

proj_no NUMBER(4) CONSTRAINT pk_project PRIMARY KEY,

proj_name VARCHAR2(30) CONSTRAINT name_project CHECK(SUBSTR(proj_name,1,1) BETWEEN 'A' AND 'Z'),

bdate DATE DEFAULT SYSDATE,

budget NUMBER(10,2) CONSTRAINT budget_project NOT NULL )

В данной конструкции помимо определения типов колонок присутствуют определения следующих ограничений целостности:

1) CONSTRAINT pk_project PRIMARY KEY – это ограничение целостности указывает, что значения колонки proj_no будут выступать в качестве первичного ключа. В данном случае по умолчанию значения колонки не могут принимать значения NULL;

2) CONSTRAINT name_project CHECK( SUBSTR( proj_name, 1, 1) BETWEEN 'A' AND 'Z' ) – это ограничение целостности указывает, что первый символ наименования проекта, который вычисляется с помощью встроенной в СУБД Oracle функции SUBSTR, должен находиться между символами “A” и “Z”. В данном случае функции SUBSTR, предназначенной для получения подстроки из строки, передаются 3 параметра: исходная строка, начальная позиция в строке и длина подстроки в строке. Анализу подвергаются коды символов: конструкция BETWEEN 'A' AND 'Z' анализирует попадание кода первого символа наименования проекта в диапазон кодов заглавных латинских букв.

3) CONSTRAINT budget_project NOT NULL – это ограничение целостности, которое указывает, что колонка budget не должна содержать неопределенные (NULL) значения.

Как видно из примера, ограничение целостности начинается с ключевого слова CONSTRAINT, после которого следует название ограничения целостности (в нашем случае это pk_project, name_project и budget_project). Далее следует само выражение ограничение целостности.

Кроме того, для колонки bdate задано значение по умолчанию, соответствующее текущим (системным) дате и времени, возвращаемым встроенной в Oracle функцией SYSDATE.

При проектировании базы данных часто возникает необходимость изменения структуры существующих таблиц. Существующие таблицы могут быть модифицированы с помощью команды ALTER TABLE. С ее помощью можно добавить один или несколько новых столбцов, ограничения целостности, модифицировать определение существующего столбца (тип данных, длину, значение по умолчанию или ограничение целостности). Рассмотрим синтаксис команды ALTER TABLE на примере таблицы project. Предположим, что таблица была создана без каких-либо ограничений целостности и без указания значений по умолчанию, т.е. был использован первый вариант команды CREATE TABLE project. Добавить требуемые ограничения целостности и значение по умолчанию позволят следующие команды:

ALTER TABLE project ADD CONSTRAINT pk_project PRIMARY KEY (proj_no)

ALTER TABLE project ADD CONSTRAINT name_project CHECK(SUBSTR(proj_name,1,1) BETWEEN 'A' AND 'Z')

ALTER TABLE project MODIFY (budget NOT NULL)

ALTER TABLE project MODIFY (bdate DEFAULT SYSDATE)

С помощью команды ALTER TABLE можно также изменить тип данных какой-либо колонки, удалить колонку, а также удалить ограничение целостности. Ниже приведены команды, позволяющие сначала изменить тип колонки budget c NUMBER(10,2) на INTEGER, а колонки proj_name – c VARCHAR2(30) на VARCHAR2(300), а затем вообще удалить колонку budget и ограничение целостности name_project:

ALTER TABLE project MODIFY (budget INTEGER, proj_name VARCHAR2(300))

ALTER TABLE project DROP (budget)

ALTER TABLE project DROP CONSTRAINT name_project

Для добавления столбца в таблицу также можно воспользоваться командой ALTER TABLE. Например, чтобы снова создать колонку budget, необходимо использовать следующую команду:

ALTER TABLE project ADD (budget NUMBER(10,2) CONSTRAINT budget_project NOT NULL)

Достаточно часто требуется кроме определения первичного ключа вводить ограничение целостности, обеспечивающее уникальность значений какого-либо другого столбца. Такое ограничение целостности часто называют уникальным ключом. Например, пусть в таблице project колонка proj_name должна содержать уникальные значения. Для этого добавим в таблицу уникальный ключ, используя следующую команду ALTER TABLE:

ALTER TABLE project ADD CONSTRAINT uk_project UNIQUE (proj_name)

Для организации связи между таблицами используется ограничение целостности, называемое внешним ключом (Foreign Key - FK). Предположим, что каждый проект закреплен за каким-либо отделом предприятия. Сначала создадим таблицу отделов department с помощью следующей команды CREATE TABLE:

CREATE TABLE department (

dept_no NUMBER(5) CONSTRAINT pk_dept PRIMARY KEY,

dept_name VARCHAR2(30) CONSTRAINT name_dept NOT NULL)

Теперь добавим в таблицу project колонку dept_no, которая будет содержать номер отдела:

ALTER TABLE project ADD (dept_no NUMBER(5))

Наконец, можно создать ограничение целостности, представляющее собой внешний ключ, с помощью команды ALTER TABLE с ключевыми словами FOREIGN KEY и REFERENCES:

ALTER TABLE project

ADD CONSTRAINT fk_dept_no FOREIGN KEY (dept_no)

REFERENCES department (dept_no)

Представленная команда создает ограничение целостности, при котором удаление записи из таблицы department не будет возможным до тех пор, пока существуют связанные записи в таблице project. Однако можно установить другие правила:

1) при удалении записи в таблице department значения колонки dept_no в связанных записях таблицы project будут устанавливаться в неопределенное значение (NULL) – для этого в команду необходимо добавить в конце ключевые слова ON DELETE SET NULL;

2) при удалении записи из таблицы department будут удалены все связанные записи из таблицы project – для этого необходимо добавить в конце ключевые слова ON DELETE CASCADE.

Для удаления из базы данных таблицы (вместе с ее содержимым) используется оператор DROP TABLE. Оператор удаления таблицы имеет следующий синтаксис:

DROP TABLE [имя_схемы.]имя_таблицы

[CASCADE CONSTRAINTS]

После выполнения команды удаления все индексы и триггеры, ассоциированные с таблицей, даже если они были созданы другим пользователем, удаляются. Все хранимые программы, зависящие от таблицы, остаются, но становятся недействительными (непригодными для использования). Все синонимы удаленной таблицы остаются, но возвращают ошибку при обращении к ним. Если указаны ключевые слова CASCADE CONSTRAINTS, то удаляются все ограничения целостности, ссылающиеся на первичные ключи данной таблицы. Если такие ссылки существуют, а конструкция CASCADE CONSTRAINTS отсутствует, то удаление таблицы не выполняется и СУБД возвращает сообщение об ошибке.