Программирование >>  Sql: полное руководство 

1 ... 100 101 102 [ 103 ] 104 105 106 ... 264


Когда СУБД выполняет инструкцию create table, она сравнивает определение каждого внешнего ключа с определениями связанных таблиц. СУБД проверяет, соответствуют ли друг другу внешний ключ и первичный ключ в связанных таблицах как по числу столбцов, так и по типу данных. Для того чтобы такая проверка была возможна, связанная таблица уже должна быть определена.

Если две или более таблиц образуют ссылочный цикл (как таблицы offices и salesreps), то для первой создаваемой таблицы невозможно определить внешний ключ, так как связанная с нею таблица еще не сушествует. СУБД откажется выполнять инструкцию create table, выдав сообшение о том, что в определении таблицы присутствует ссылка на несуществующую таблицу. В этом случае необходимо создать таблицу без определения внешнего ключа и добавить данное определение позже с помощью инструкции alter table. (В Стандарте SQL2 и нескольких ведущих СУБД предлагается иной подход к решению данной проблемы - инструкция create schema, с помощью которой разом создается все множество таблиц. Эта инструкция, а также объекты базы данных, входящие в состав схемы в SQL2, описываются в конце главы )

Обратите внимание на то, что в предложении foreign key задаются также правила удаления и обновления, которым будет подчиняться создаваемое отношение таблиц. Эти правила объяснялись в главе 11. Если ни одно из них не указано, то по умолчанию устанавливается правило no action.

Условия уникальности

В соответствии со стандартом SQL2 условия уникальности задаются в предложении unique инструкции create table Ниже приведена модифицированная инструкция create table ДЛЯ таблицы offices С включснным В нее условием уникальности для столбца city:

Определить таблицу offices с условием уникальности.

CREATE TABLE OFFICES

(OFFICE INTEGER NOT NULL,

CITY VARCHAR(15) NOT SDLL, REGION VARCHARdO) NOT NULL,

MGR INTEGER, TARGET MONEY, SALES MONEY NOT NOLL, PRIMARY KEY (OFFICE),

CONSTRAINT HASMGR FOREIGN KEY (MGR) REFERENCES SALESREPS ON DELETE SET NULL, unique (CITY))

Если первичный или внешний ключ включает в себя только один столбец либо если условие уникальности или условие на значения касаются одного столбца, стандарт ANSI/ISO разрешает использовать сокращенную форму ограничения, при которой оно просто добавляется в конец определения столбца. Например:

Определить таблицу offices с условием уникальности (синтаксис ANS1/1S0).

CREATE TABLE OFFICES

{OFFICE INTEGER NOT NOLL PRIMARY KEY,

CITY VARCHAR(15) NOT NULL UNIQUE,

REGION VARCHARdO) NOT NULL,



MGR INTEGER REFERENCES SALESREPS, TARGET MONEY, SALES MONEY NOT NULL)

Подобный синтаксис поддерживается в ряде ведущих СУБД, в частности, в SQL Server, Informix, Sybase и DB2.

Ограничения на значения столбцов

Появившееся в SQL2 офаничение check (рассмафивалось в главе 11) также задается в инсфукции create table. Оно содержит условие на значения (идентично условию отбора в запросе на выборку), проверяемое всякий раз при попытке модификации содержимого таблицы (с помощью инсфукций insert, update или delete). Если после модификации условие остается истинным, такое изменение допускается; в противном случае СУБД отвергает изменения и выдает сообщение об ошибке. Ниже приведена инсфукция create table, создающая таблицу offices с простым Офаничением на значения столбца target, позволяющим гарантировать, что плановый объем продаж офиса всегда будет большим $0,00.

Определить таблицу offices с ограничением на значения столбца target

CREATE TABLE OFFICES

(OFFICE INTEGER NOT NULL,

CITY VARCHAR(15) NOT NOLL, REGION VARCHAR (10) NOT NOLL,

MGR INTEGER, TARGET MONEY, SALES MONEY NOT NULL, PRIMARY KEY (OFFICE),

CONSTRAINT HASMGR FOREIGN KEY (MGR) REFERENCES SALESREPS ON DELETE SET NULL,

CHECK (TARGET = 0.00))

Дополнительно можно задать имя офаничения, которое будет отображаться в сообщениях об ошибках, выдаваемых СУБД при нарушении данного офаничения Вот пример более сложного ограничения для таблицы salesreps, требующего соблюдения правила служащим, принятым на работу после 1 января 1988 года, нельзя назначать план больше чем $300000 . Этому офаничению назначено имя quota cap:

CREATE TABLE SALESREPS

(EMPL NUM INTEGER NOT NULL,

NAME VARCHAR (15) NOT NULL,

CONSTRAINT WORKSIN FOREIGN KEY (REP OFFICE) REFERENCES OFFICES

ON DELETE SET NULL CONSTRAINT QUOrA CAP CHECK ((HIRE DATE < Ol-JAN-88 ) OR

(QUOTA <= 300000)))

Подобный синтаксис поддерживается многими ведущими СУБД.



Управление физической памятью *

Обычно в инструкцию create table ВХОДИТ ОДНО ИЛИ несколько необязательных предложений, в которых для создаваемой таблицы определяются характеристики физической памяти. Этими предложениями пользуется в основном администратор для того, чтобы оптимизировать работу промышленной базы данных. В силу своей природы эти предложения являются весьма специфическими, зависят от конкретной СУБД и для большинства пользователей не представляют какого-либо практического интереса. Раатичные структуры физической памяти, применяемые в разных СУБД, характеризуют уровень сложности СУБД и то, для каких целей она предназначена

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

В многопользовательских базах данных физическая память, как правшю, организована более сложным образом. Это обеспечивает повышение производительности базы данных. Например, в СУБД Ingres администратор может задать несколько именованных областей памяти, в которых будет храниться информация базы данных. Эти области памяги могут быть распределены по нескольким дисковым томам для параллельного вьщолнения операций ввода/вывода. В инструкции create table при необходимости можно указать одну или несколько областей памяти для хранения таблицы.

CREATE TABLE OFFICES {определение таблшы)

WITH LOCATION = [область!, область2, областьЗ)

Задавая фуппу областей памяти, содержимое таблицы можно распределить по нескольким дисковым томам, чтобы обеспечить параллельный доступ к таблице.

Аналогичный подход используется и в Sybase Adaptive Server, где администратор может задать одно или несколько логических устройств базы данньа, предназначенных для хранения данных. Соответствие между логическим устройством и реальным жестким диском устанавливается с помощью специальной утилиты, а не посредством SQL. Инструкция create database позволяет указать, на каких логических устройствах долж>1а размещаться база данных:

CREATE DATABASE имя

ON устройство!, устройство2, устройствоЗ

В пределах логического устройства администратор может определить логический сегмент, полюуясь одной из системных хранимых процедур. Тогда в инструкции create table можно указать сегмент, в котором будет располагаться создаваемая таблица:

CREATE TABLE OFFICES (определение таблицы) ON SEGMENT имя сегмента

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

CREATE TABLE OFFICES (определение таблицы) IN АШШЪЪ. табличная область



1 ... 100 101 102 [ 103 ] 104 105 106 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика