русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Средства описания баз данных (DDL) в SQL.


Дата добавления: 2013-12-23; просмотров: 1060; Нарушение авторских прав


Ключи таблиц.

Базовые типы данных.

¨ CHAR(k) и VARCHAR(k) – строковый тип, соответственно фиксированной длины k и переменной длины £k (VARCHAR(k) ~ string[k] в Паскаль).

¨ INTEGER – целочисленный тип.

¨ NUMERIC(k,m) – вещественный тип в форме с фиксированной точкой (k,m – ширина и точность, как в форматах вывода Паскаль).

¨ DATE и TIMESTAMP – тип дата-время.

¨ Ключ таблицы задается списком ее полей (через запятую и в круглых скобках). Составной ключ – содержит более одного поля.

¨ Уникальный ключ (UNIQUE)– значение ключа для строки таблицы однозначно идентифицирует эту строку в таблице, т.е. таблица не может содержать двух строк с одинаковым значением такого ключа (значения ключа различаются, если они различаются по значению хотя бы одного ключевого поля).

¨ Первичный ключ (PRIMARY KEY)– выделенный уникальный ключ таблицы. В качестве первичного может быть объявлен любой уникальный ключ, но только один.

Межтабличные связи и ключи. Межтабличную связь можно объявить только для пары таблиц (бинарную) и только типа (1:N) – (Родительская таблица : Дочерняя таблица).

Связь определяется с помощью пары ключей: родительский ключ (REFERENCES) – один из уникальных ключей родительской таблицы (чаще всего, это ее первичный ключ), внешний ключ (FOREIGN KEY) – ключ дочерней таблицы (как правило, это неуникальный ключ).

В этой связи строке родительской таблицы соответствуют все строки дочерней таблицы, у которых значение внешнего ключа равно значению родительского ключа строки родительской таблицы.

Одна и та же таблица может быть и родительской и дочерней для нескольких таблиц, но в разных связях.

Еще раз отметим, что родительский ключ уникальный, поэтому получаем связь типа 1:N, т.к. в родительской таблице не более одной строки с заданным значением такого ключа.



Связь объявляется при дочерней таблице

§ поэтому внешний ключ (FOREIGN KEY) содержит ее же поля;

§ дочерняя ссылается (REFERENCES) на родительскую таблицу и соответствующий связи родительский ключ, который естественно содержит поля родительской таблицы.

Ограничения целостности базы данных. Ограничения целостности (Integrity Constraint) – это условия правильности данных. СУБД не допускает внесения изменений в данные таблиц, при которых нарушаются объявленные требования к правильности данных.

Ограничения целостности можно классифицировать.

¨ Внутритабличные горизонтальные. Каждая строка таблицы (или конкретное поле каждой строки) должна удовлетворять объявленному условию: заданному обычным логическим выражением (CHECK) или специальными, например NOT NULL – поле должно иметь непустое значение (*).

¨ Внутритабличные вертикальные. Набор значений в конкретном списке колонок таблицы (конкретного списка полей по всем строкам) должен удовлетворять условию неповторяемости - UNIQUE, PRIMARY (влечет UNIQUE);

¨ Межтабличные (ограничения ссылочной целостности). Для каждой строки дочерней таблицы межтабличной связи, если значение ее внешнего ключа не NULL, то должна существовать строка в соответствующей родительской таблице с таким же значением родительского ключа.

Стратегии поддержания ссылочной целостности. Существуют две основные стратегии поддержания ссылочной целостности.

¨ RESTRICT (ОГРАНИЧИТЬ) - не разрешать выполнение операции, приводящей к нарушению ссылочной целостности. Это самая простая стратегия, требующая только проверки, для строки дочерней таблицы имеется ли соответствующая строка в родительской таблице.

¨ CASCADE (КАСКАДИРОВАТЬ) - разрешить выполнение требуемой операции, но внести при этом необходимые поправки в других таблицах так, чтобы не допустить нарушения ссылочной целостности и сохранить все имеющиеся связи. Изменение начинается в родительской таблице и каскадно выполняется в дочерней таблице. В реализации этой стратегии имеется одна тонкость, заключающаяся в том, что дочерняя таблица сама может быть родительской для некоторой третьей таблицы. При этом может дополнительно потребоваться выполнение какой-либо стратегии и для этой связи и т.д. Если при этом какая-либо из каскадных операций (любого уровня) не может быть выполнена, то необходимо отказаться от первоначальной операции и вернуть базу данных в исходное состояние. Это самая сложная стратегия, но она хороша тем, что при этом не нарушается связь между строками родительской и дочерней таблиц.

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

CREATE TABLE ИмяТаблицы

(Колонка, ... [, ОграничениеТаблицы, ...])

Колонка = ИмяКолонки ТипКолонки

[DEFAULT Константа] [ОграничениеКолонки ...]

ОграничениеКолонки =

NOT NULL | UNIQUE | PRIMARY KEY | CHECK(Условие)

| REFERENCES ИмяРодительскойТаблицы

[(ИмяЕеКолонки)] [СтратегияПоддержки]

ОграничениеТаблицы =

CHECK(Условие)

| UNIQUE (ИмяКолонки, ...)

| PRIMARY KEY (ИмяКолонки, ...)

| FOREIGN KEY (ИмяКолонки, ...)

REFERENCES ИмяРодительскойТаблицы

[(ИмяЕеКолонки, ...)] [СтратегияПоддержки]

СтратегияПоддержки =

ON DELETE CASCADE

| ON UPDATE CASCADE

Оператор CREATE TABLE описывает (и создает пустую) таблицу, ее ограничения целостности и ее связи с родительскими таблицами.

§ Метасимволы: [] – «может отсутствовать», | - «один из вариантов», ... – «допустимо повторение через предыдущий символ».

§ ОграничениеКолонки UNIQUE | PRIMARY KEY | REFERENCES используются в случае несоставного ключа, а иначе эти ограничения описываются как ОграничениеТаблицы.

§ CHECK(Условие) используется как ОграничениеТаблицы, если Условие зависит более чем от одного поля.

§ Если в ограничении ссылочной целостности не указан родительский ключ, то по умолчанию родительским считается первичный ключ (PRIMARY KEY) родительской таблицы.

§ Если в ограничении ссылочной целостности не указана СтратегияПоддержки, то по умолчанию действует стратегия RESTRICT (ОГРАНИЧИТЬ).

ПРИМЕР.

/* Table: PSTS, ПОСТАВЩИКИ */

CREATE TABLE PSTS

(

KPST INTEGER DEFAULT 0 NOT NULL PRIMARY KEY,

IMPST VARCHAR(20) DEFAULT '',

ADRPST VARCHAR(30) DEFAULT ''

);

/* Table: DET, ДЕТАЛИ */

CREATE TABLE DET

(

KDET INTEGER DEFAULT 0 NOT NULL PRIMARY KEY,

IMDET VARCHAR(20) DEFAULT '',

CVET VARCHAR(10) DEFAULT ''

);

/* Table: DOG, ДОГОВОРА */

CREATE TABLE DOG

(

KPST INTEGER DEFAULT 0 NOT NULL REFERENCES PSTS,

KDET INTEGER DEFAULT 0 NOT NULL REFERENCES DET,

KOL INTEGER,

DTN DATE,

DTK DATE,

PRIMARY KEY (KPST, KDET), CHECK (DTN<DTK)

);

/* Table: PST, ПОСТАВКИ */

CREATE TABLE PST

(

KPST INTEGER DEFAULT 0 NOT NULL,

KDET INTEGER DEFAULT 0 NOT NULL,

KOL INTEGER,

DTP DATE CHECK (DTP>'01.01.2000'),

FOREIGN KEY (KPST, KDET) REFERENCES DOG

);



<== предыдущая лекция | следующая лекция ==>
Самитов Р.К. | Выражения в SQL.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.