|
Программирование >> Хронологические базы данных
Пояснения 1. Список допустимых имен встроенных типов, которые можно указывать как значение параметра <имя встроенного типа>, приводится в разделе 4.2 главы 4. 2. Необязательный параметр определения значения по умолчанию задает значение по умолчанию, которое будет применяться к каждому столбцу, определенному на этом домене и не имеющему собственного явного заданного значения по умолчанию (подробности приводятся в следующем разделе). Значение этого параметра должно иметь вид DEFAULT Оначение по умолчанию>, где параметр Оначение по умолчанию>, в свою очередь, может быть литералом, именем встроенного 0-адического оператора или ключевым словом NULL. Замечание. Оператор, который не имеет операндов, называется 0-адическим (например, CURRENT DATE). 3. В необязательном параметре <ограннчениЯ> перечисляются все ограничения, применяемые к определяемому домену. Обсуждение ограничений мы откладываем до главы 8. Существующий SQL-домен можно в любое время изменить с помощью оператора ALTER DOMAIN. В частности, этот оператор позволяет определить для указанного домена новое значение по умолчанию (заменяя при этом старое значение, если оно было указано) или удалить существующее. Он также позволяет ввести новое ограничение целостности для данного домена или удалить уже существующие ограничения. Подробное изложение всех этих опций (а они довольно сложны) выходит за рамки данной книги. Интересующийся читатель может обратиться к [4.19]. И наконец, существующий домен можно отменить с помощью оператора DROP DOMAIN, имеющего следующий синтаксис. DROP DOMAIN <имя домена> <режим> ; Здесь параметр <режиМ> может принимать значения RESTRICT и CASCADE. Общая идея состоит в следующем. При выборе опции RESTRICT домен не будет уничтожен, если на него имеются какие-либо ссылки. При выборе опции CASCADE операция будет выполнена и каскадно продолжена во всех направлениях. Столбцы, которые были ранее определены на основе удаляемого домена, будут рассматриваться как определенные непосредственно на базе типа данных этого домена. Механизм такой операции достаточно сложен, и поэтому подробности опускаются. Дополнительные сведения можно найти в [4.19]. Подробное обсуждение поддержки в языке SQL пустых значений (обозначаемых ключевым словом NULL) мы отложим до главы 18. Однако отдельных упоминаний о пустых значениях в этой главе не избежать. Базовые таблицы Прежде чем обсуждать базовые таблицы, необходимо сделать пару замечаний относительно таблиц языка SQL вообще. Во-первых, в таблицах языка SQL, в отличие от настоящих отнощений, допустимы повторяющиеся строки, поэтому им не требуются какие-либо первичные ключи (или, более общо, потенциальные ключи). Во-вторых, в таблицах языка SQL, в отличие от настоящих отнощений, столбцы рассматриваются в порядке слева направо. Например в таблице поставщиков S столбец SI может быть первым столбцом, столбец SNAME - вторым и т.д. Перейдем непосредственно к базовым таблицам. Они определяются с помощью оператора CREATE TABLE (обратите внимание, что ключевое слово TABLE означает здесь исключительно базовую таблицу; то же самое касается операторов ALTER TABLE и DROP TABLE, которые описываются ниже). Синтаксис выражения следующий. CREATE TABLE <имя базовойта6лицЫ> ( <список элементов базовой таблицы> ); Здесь каждый параметр <элемент базовой та6лиць{> является либо определением столбца, либо определением ограничения базовой таблицы. В последнем случае элемент задает ограничение поддержки целостности данных, которое будет применяться к создаваемой таблице. Подробное обсуждение подобных ограничений мы отложим до главы 8. Каждое определение столбца (по крайней мере одно такое определение обязательно должно присутствовать), в свою очередь, выглядит следующим образом. <имя стол6ца> <тип или имя домена> [ <значение по умолчанию> ] Здесь параметр <имя стол6ца> указывает название столбца, параметр <тип или имя домена> задает используемый тип данных или домен, а необязательный параметр <значение по умолчанию> устанавливает значение по умолчанию для описываемого столбца, которое подавляет значение по умолчанию, указанное на уровне домена (если такое имеется). Замечание. Параметр <значение по умогчанию> задает значение по умолчанию, которое помещается в соответствующий столбец в том случае, если пользователь не указал конкретное значение для этого столбца в операторе INSERT. Подобный случай проиллюстрирован в разделе 4.6 главы 4. Если для данного столбца собственное значение по умолчанию явно не определено, а также если нет такового значения, наследуемого из домена, то предполагается, что значение по умолчанию- NULL, т.е. NULL- это значение по умолчанию, используемое по умолчанию . Пример использования оператора CREATE TABLE показан на рис. 4.1 главы 4. Существующее определение базовой таблицы можно в любое время изменить с помощью оператора ALTER TABLE. Он позволяет выполнить следующие изменения. Добавить столбец Задать для существующего столбца новое значение по умолчанию (которое заменит прежнее значение, если оно было определено) Удалить значение по умолчанию для существующего столбца Удалить существующий столбец Задать новые ограничения целостности Удалить существующие ограничения целостности Приведем пример для первого случая. ALTER TABLE S ADD COLUMN DISCOUNT INTEGER DEFAULT -1 ; Этот оператор добавляет в базовую таблицу поставщиков столбец с именем DISCOUNT (имеющий тип INTEGER). Начальным значением каждой строки этого столбца во всех случаях будет -1. Наконец, существующую базовую таблицу можно уничтожить с помощью оператора DROP TABLE. DROP TABLE <имя базовой та6лицЫ> <режи1 ; Здесь (как и в случае оператора DROP DOMAIN) опция <режи1> принимает одно из двух возможных значений - RESTRICT или CASCADE. При выборе опции RESTRICT базовая таблица не будет уничтожена, если на нее имеются ссылки в каком-либо представлении или ограничении целостности. При выборе опции CASCADE операция будет выполнена (будут удалены все строки таблицы, а затем и сама таблица), при этом также будут удалены все представления и ограничения целостности, ссылающиеся на эту таблицу. 5.6. Резюме в этой главе подробно рассматривалась структурная часть реляционной модели, а именно - домены и отношения. Домен - это, в сущности, тип данных (возможно, определенный в системе (встроенный), но в общем случае определенный пользователем). Он представляет собой совокупность множества значений (всех возможных значений этого типа), из которого будут получать свои значения различные атрибуты, различных отношений, и набор операторов (операторов чтения и обновления), которые могут использоваться для манипулирования значениями и переменными этого типа. Составляющие тип значения могут быть любого вида - числа, строки, даты, время, аудио- и видеозаписи, карты, геометрические точки и т.д. и т.п. Типы ограничивают возможность выполнения операций, т.е. в общем случае требуется, чтобы используемые в операции значения принадлежали одному домену (имеет место строгий контроль типов). Строгий контроль типов полезен тем, что он позволяет выявить многие логические ошибки во время компиляции, а не во время работы. К тому же, как вы узнаете из следующей главы, строгий контроль типов имеет много важных применений при выполнении таких реляционных операций, как соединение, объединение и т.д. Тип может быть либо скалярным, либо нескалярным. Скалярные типы не содержат видимых пользователю компонентов. Наиболее важными яескалярными типами в реляционной модели являются типы отношений, которые определяются с помощью операции генератора типов RELATION. Следует четко различать типы и их физические представления (тип - это модель, а физическое представление - это ее реализация). Кроме того, каждый тип обязательно должен иметь хотя бы одно декларированное допустимое представление. Автоматически задаются оператор выбора для каждого допустимого представления и операторы ТНЕ - для каждого компонента этого допустимого пред-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.002
При копировании материалов приветствуются ссылки. |