ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.






          СПРАВОЧНОЕ РУКОВОДСТВО 


                ПО ЯЗЫКУ SQL  


         Версия 6.0    


          O R A C L E 
          ----------------------------------------------Д
          The Relational Database Management System

 






































                                    -- 1 --




 Справочное руководство по языку SQL
 Версия 6.0
 Part Number 778-V6.0
 Ноябрь 1988 (Пересмотрено - Февраль 1990)


 Общая редакция: Dwight Cheu, Brian Linden

 Авторы: Andrew Mendelsohn, Larry Baer, Shelly Dimmick,
 Dennis Cocharn, Michael Hartstein, Susan Jackson, Ken Jacobs,
 Derry Kabcenell, Larry Stevens


Copyright Oracle Corporation 1988,1990
Все права сохраняются. Отпечатано в США.


        Ограничение прав.

Использование, дублирование  и раскрытие программ подчиняются ограничениям,  
установленным  в  Вашем  контракте  с   Oracle Corporation.

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

Информация, содержащаяся в данном документе, может изменяться без уведомления. 
Если у Вас возникнут проблемы с документацией, напишите нам пожалуйста. Oracle 
Corporation не гарантирует отсутствие ошибок в данном документе.

ORACLE, Easy*SQL, Pro*Ada, Pro*COBOL, Pro*Fortran,Pro*PL/I,
Pro*Pascal, SQL*Calc, SQL*Forms, SQL*Graph, SQL*Loader,
SQL*Menu, SQL*Net и SQL*Plus являются зарегистрированными
торговыми марками Oracle Corporation.
CASE*Designer, CASE*Dictionary,  CASE*Method,  PL/SQL, Pro*C,
SQL*DBA,  SQL*Design  Dictionary,  SQL*QMX и SQL*ReportWriter
являются торговыми марками Oracle Corporation.

DEC - зарегистрированная  торговая  марка  Digital  Equipment Corporation.
DECNET - торговая марка Digital Equipment Corporation.
HP - зарегистрированная торговая марка Hewlett-Paccard.

IBM - зарегистрированная торговая марка International Business Machines.
DB2 - торговая марка International Business Machines.

Перевод на русский язык: Большаков А.И. НПКО МЕКОМП май 1991.











                                    -- 2 --




        ПРЕДИСЛОВИЕ                    

"Справочное руководство по языку SQL" содержит полное описание языка реляцион-
ных баз данных,  который используется для создания, записи, модификации, 
выборки и управления информацией базы данных ORACLE.

Язык, описываемый в данном руководстве - это реализованное в Oracle 
Corporation для системы ORACLE Version 6 подмножество стандарта языка  SQL  
Американского  Национального Института Стандартов (ANSI)  и  Международной  
Организации  Стандартов (ISO).

В этом руководстве содержится также описание вложенного SQL, используемого в 
прекомпиляторах системы ORACLE.  За дополнительной информацией  о  вложенном 
SQL обратитесь к Руководствам программиста по прекомпиляторам ORACLE.  
Подробная  информация о   процедурном   расширении  языка  SQL  -  PL/SQL 
содержится в Справочном руководстве и руководстве  пользователя по PL/SQL.

        Аудитория                     

Это руководство предназначено  для  технического  персонала:
как программистов, так и непрограммистов, желающих использовать SQL.


        Как пользоваться данным руководством          

Руководство разделено на следующие главы:

Глава 1      "Реляционная модель" - описывает основные
             концепции реляционной теории.

Глава 2      "Введение в SQL" - описывает наряду с историей SQL - преимущества 
             использования этого языка по доступу к реляционным базам данных.

Глава 3      "Элементы языка SQL" - описывает основные
             элементы базы данных ORACLE и языка SQL.

Глава 4      "Операторы и функции" - описывает используе-
             мые в языке SQL операторы и функции.

Глава 5      "Справочник по SQL - операторам" - в алфавитном порядке описаны 
             все команды языка SQL.

Глава 6      "Фразы операторов SELECT" - обеспечивает более детальное описание 
             оператора SELECT.

Приложение А "Словарь данных" - кратко перечисляются таблицы и обзоры, 
             составляющие каталог ORACLE.
Приложение В "Синтаксис SQL" - краткое описание синтаксиса SQL.

        Связанные публикации                          

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

* ORACLE RDBMS Database Administrator's Guide, Part No. 3601-V6.0
* SQL Language Reference Manual (это руководство) Part No. 778-V6.0
* SQL Language Quick Reference, Part No. 5421-V6.0

                                    -- 3 --



* SQL Language Tutorial, Part No. 5070-V6.0
* PL/SQL User's Guide and Reference, Part No. 800-V6.0
* ORACLE Utilities User's Guide, Part No. 3602-V6.0
* ORACLE Error Messages and Codes Manual, Part No. 3605-V6.0
* ORACLE RDBMS Perfofmance Tuning Guide, Part No. 5317-V6.0
* Programmer's Guide to the ORACLE Precompilers, Part No. 5135-V1.3
* Programmer's Guide to the ORACLE Call Interfaces, Part No. 5411-V6.0

Соглашения, используемые в данном руководстве         

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

             Представление в    Пример       Пояснения         
             синтаксисе                                        
             --------------------------------------------------------

 Ключевые    ANY_WORD           CREATE       Представлены в символах верх-
 слова       (любое слово)                   него регистра. Вводятся
                                             точно как показано за ис-
                                             ключением необязательного 
                                             использования   верхнего 
                                             регистра.

 Параметры   any_word           tablename    Внутри синтаксического опи-
                                             сания команды представля-
                                             ются в  нижнем  регистре
                                             (строчные). Подставляется
                                             соответствующее значение.

             с                  T            Одиночный символ.
             text или char      'database1'  Символьная константа: ли-
                                             терал в одиночных кавыч-
                                             ках либо символьное выра-
                                             жение. Синтаксис text опи-
                                             сан в Главе 3 этого руководства.

             condition          NAME > 'A'   Условие с не указанным
                                             форматом. Синтаксис condition
                                             описывается в Главе 4 дан-
                                             ного руководства.

             d или e            '01-Jan-88'  Константа - дата или вы-
                                             ражение типа DATE.
             expr               SAL + 100    Выражение с не указанным
                                             типом данных.
             m или n            15*7         Числовая константа или вы-
                                             ражение типа NUMBER.
             number             112          Числовая константа или вы-
                                             ражение типа NUMBER.
             raw                -            Выражение типа RAW
             rowid             00000462.0001.0001
                                             Выражение типа ROWID

             query              SELECT 'x'   Оператор SELECT, находя-
                                FROM DUAL    щийся внутри другого SQL
                                             - оператора. Может содер-

                                    -- 4 --



                                             жать любую фразу предло-
                                             жения SELECT,   исключая
                                             FOR UPDATE OF и ORDER BY.
                                             Описание синтаксиса query
                                             содержится в Главе 6 дан-
                                             ного руководства.

 Пунктуация  фигурные           { UNION |    В них заключаются необхо-
             скобки             MINUS |      димые элементы. Необходи-
                                INTERSECT }  мо выбрать  один  элемент
                                             из нескольких, разделен-
                                             ных вертикальной чертой.
                                             Скобки и вертикальную чер-
                                             ту вводить не надо.

             квадратные         [ NOT |      В них заключаются необя-
             скобки             ADD | OR ]   зательные элементы. Вы мо-
                                             жете выбрать один из ука-
                                             занных в списке элементов.
                                             Скобки и вертикальную чер-
                                             ту вводить не надо. Если
                                             в списке   только   один
                                             элемент,    вертикальная
                                             черта не указывается.

             круглые скобки     POWER(n,m)   В них заключается список
                                             параметров. Скобки и за-
                                             пятые должны   вводиться
                                             так, как указано.

             многоточие        name,name,... Указываются в списке пара-
                                             метров. Означают,    что
                                             предыдущий параметр  мо-
                                             жет быть повторен произ-
                                             вольное число раз.

             подчеркивание     order|noorder Указывает на умалчиваемое
                               ----          значение. Если Вы ничего
                                             не введете, ORACLE будет
                                             использовать  подчеркну-
                                             тое значение.


















                                    -- 5 --




Ваши замечания,  как пользователя ORACLE  и  читателя  руководств являются для 
нас очень ценными. При написании, пересмотре и совершенствовании документации 
Ваше мнение  -  самое ценное из того,  что мы получаем. В конце руководства 
прилагается "Форма читательских комментариев", которую мы советуем использовать
для отзывов о том,  что Вам понравилось или не понравилось в данном (или 
других) руководстве  по ORACLE.  Если форма  уже  использована  и вы хотите 
обратиться к нам, напишите по следующему адресу или позвоните:  (415)598-8000.
        ORACLE RDBMS Product Manager
        Oracle Corporation
        500 Oracle Parkway
        Redwood Shores, CA 94065

        СОДЕРЖАНИЕ                     

 Глава 1 РЕЛЯЦИОННАЯ МОДЕЛЬ . . . . . . . . . . . . . . 

         Модель отношения сущностей . . . . . . . . . . 
         Логическая структура таблиц. . . . . . . . . . 
           Таблицы. . . . . . . . . . . . . . . . . . . 
             Правила создания таблиц. . . . . . . . . . 
           Столбцы. . . . . . . . . . . . . . . . . . . 
             Порядок столбцов . . . . . . . . . . . . . 
             Статическая природа столбцов . . . . . . . 
           Строки . . . . . . . . . . . . . . . . . . . 
             Порядок строк. . . . . . . . . . . . . . . 
             Динамическая природа строк . . . . . . . . 
           Значение . . . . . . . . . . . . . . . . . . 
           Обзоры . . . . . . . . . . . . . . . . . . . 
           Индексы. . . . . . . . . . . . . . . . . . . 
             Обеспечение быстрого доступа . . . . . . . 
             Обеспечение уникальности . . . . . . . . . 
           Кластеры . . . . . . . . . . . . . . . . . . 
             Физическая независимость данных. . . . . . 
         Независимость данных . . . . . . . . . . . . . 
           Физическая независимость данных. . . . . . . 
           Логическая независимость данных. . . . . . . 
         Ключи. . . . . . . . . . . . . . . . . . . . . 
           Основные ключи . . . . . . . . . . . . . . . 
           Внешние ключи. . . . . . . . . . . . . . . . 
           Уникальные ключи . . . . . . . . . . . . . . 
         Относительная целостность. . . . . . . . . . . 
         Ограничения для таблиц и столбцов. . . . . . . 
         Пример таблиц. . . . . . . . . . . . . . . . . 
           Таблица EMP. . . . . . . . . . . . . . . . . 
           Таблица DEPT . . . . . . . . . . . . . . . . 
           Таблица EMPLOYEE_RAISE . . . . . . . . . . . 
           Таблица DUAL . . . . . . . . . . . . . . . . 

 Глава 2 ВВЕДЕНИЕ В SQL . . . . . . . . . . . . . . . . 

         История SQL. . . . . . . . . . . . . . . . . . 
           Стандартизация SQL . . . . . . . . . . . . . 
         Преимущества использования SQL . . . . . . . . 
           Непроцедурный язык . . . . . . . . . . . . . 
           Язык для всех пользователей. . . . . . . . . 
           Унифицированный язык . . . . . . . . . . . . 
           Общий язык для всех реляционных баз данных . 

                                    -- 6 --



         Поддержка национальных языков. . . . . . . . . 
         Встроенный SQL . . . . . . . . . . . . . . . . 
           Термины встроенного SQL. . . . . . . . . . . 
         Лексические соглашения ORACLE. . . . . . . . . 

 Глава 3 ЭЛЕМЕНТЫ ЯЗЫКА SQL . . . . . . . . . . . . . . 

         Объекты базы данных. . . . . . . . . . . . . . 
         Правила именования объектов базы . . . . . . . 
         Указания по именованию объектов базы данных. . 
         Зарезервированные слова. . . . . . . . . . . . 
         Ключевые слова . . . . . . . . . . . . . . . . 
         Термы системы ORACLE . . . . . . . . . . . . . 
           Литералы. . . . . . . . . . . . . . . . . . .
           Переменные. . . . . . . . . . . . . . . . . .
         Типы данных . . . . . . . . . . . . . . . . . .
           Смешанные типы: преобразование типов данных .
         Типы данных CHAR и VARCHAR. . . . . . . . . . .
         Text. . . . . . . . . . . . . . . . . . . . . .
         Тип данных NUMBER . . . . . . . . . . . . . . .
           Использование масштаба и точности . . . . . .
             Отрицательный масштаб . . . . . . . . . . .
             Масштаб больше точности . . . . . . . . . .
             Экспоненциальное представление. . . . . . .
           Подмножество FLOAT. . . . . . . . . . . . . .
           Другие формы NUMBER . . . . . . . . . . . . .
         Integer . . . . . . . . . . . . . . . . . . . .
         Number  . . . . . . . . . . . . . . . . . . . .
         Тип данных DATE . . . . . . . . . . . . . . . .
             Арифметика дат. . . . . . . . . . . . . . .
           Использование Юлианской даты. . . . . . . . .
         Тип данных LONG . . . . . . . . . . . . . . . .
           Ограничение на использование данных LONG. . .
         Типы данных RAW и LONGRAW . . . . . . . . . . .
         Типы данных DB2 и SQL/DS. . . . . . . . . . . .
         Тип данных ROWID. . . . . . . . . . . . . . . .
           Для чего используется ROWID ? . . . . . . . .
         Преобразование типов данных . . . . . . . . . .
           Правила сравнения типов данных. . . . . . . .
             Числовые значения . . . . . . . . . . . . .
             Значения даты . . . . . . . . . . . . . . .
             Символьные значения . . . . . . . . . . . .
           Последовательность сортировки ASCII . . . . .
           Последовательность сортировки EBCDIC. . . . .
         Сводка по типам данных. . . . . . . . . . . . .
         Сводка по числовым типам данных . . . . . . . .
         Значения Null . . . . . . . . . . . . . . . . .
         Псевдостолбцы . . . . . . . . . . . . . . . . .

 Глава 4 ОПЕРАЦИИ И ФУНКЦИИ  . . . . . . . . . . . . . .

         Операции. . . . . . . . . . . . . . . . . . . .
           Арифметические операции . . . . . . . . . . .
           Символьные операции . . . . . . . . . . . . .
           Операции сравнения. . . . . . . . . . . . . .
             Операция NOT IN . . . . . . . . . . . . . .
           Логические операции . . . . . . . . . . . . .
           Операции с множествами. . . . . . . . . . . .

                                    -- 7 --



           Другие операции . . . . . . . . . . . . . . .
         Операция LIKE . . . . . . . . . . . . . . . . .
         Функции . . . . . . . . . . . . . . . . . . . .
           Однострочные числовые функции . . . . . . . .
           Однострочные символьные функции . . . . . . .
             Однострочные символьные функции,
               возвращающие символьные значения. . . . .
             Однострочные символьные функции,
               возвращающие числовые значения  . . . . .
           Групповые функции . . . . . . . . . . . . . .
           Функции преобразования. . . . . . . . . . . .
           Функции для работы с датами . . . . . . . . .
           Другие функции. . . . . . . . . . . . . . . .
         Модели форматов . . . . . . . . . . . . . . . .
             Изменение формата выдачи. . . . . . . . . .
             Назначение правильного формата. . . . . . .
             Функция TO_NUMBER . . . . . . . . . . . . .
           Числовые форматы. . . . . . . . . . . . . . .
           Форматы даты. . . . . . . . . . . . . . . . .
         Выражения . . . . . . . . . . . . . . . . . . .
         Expr. . . . . . . . . . . . . . . . . . . . . .
         Условия . . . . . . . . . . . . . . . . . . . .
         Condition . . . . . . . . . . . . . . . . . . .

 Глава 5 СПРАВОЧНИК ПО  SQL - ОПЕРАТОРАМ . . . . . . . .

         Сводка по SQL - операторам. . . . . . . . . . .
         /* ...*/ (SQL - комментарий). . . . . . . . . .
         ALTER CLUSTER . . . . . . . . . . . . . . . . .
         ALTER DATABASE. . . . . . . . . . . . . . . . .
         ALTER INDEX . . . . . . . . . . . . . . . . . .
         ALTER ROLLBACK SEGMENT. . . . . . . . . . . . .
         ALTER SEQUENCE. . . . . . . . . . . . . . . . .
         ALTER SESSION . . . . . . . . . . . . . . . . .
         ALTER TABLE . . . . . . . . . . . . . . . . . .
         ALTER TABLESPACE. . . . . . . . . . . . . . . .
         ALTER USER. . . . . . . . . . . . . . . . . . .
         AUDIT (Форма I) . . . . . . . . . . . . . . . .
         AUDIT (Форма II). . . . . . . . . . . . . . . .
         CLOSE cursor (Встроенный SQL) . . . . . . . . .
         Ограничение для столбца . . . . . . . . . . . .
         Элемент описания для столбца. . . . . . . . . .
         COMMENT . . . . . . . . . . . . . . . . . . . .
         COMMIT  . . . . . . . . . . . . . . . . . . . .
         COMMIT (Встроенный SQL) . . . . . . . . . . . .
         CONNECT (Встроенный SQL). . . . . . . . . . . .
         Фраза CONSTRAINT. . . . . . . . . . . . . . . .
         CREATE CLUSTER. . . . . . . . . . . . . . . . .
         CREATE DATABASE . . . . . . . . . . . . . . . .
         CREATE DATABASE LINK. . . . . . . . . . . . . .
         CREATE INDEX. . . . . . . . . . . . . . . . . .
         CREATE ROLLBACK SEGMENT . . . . . . . . . . . .
         CREATE SEQUENCE . . . . . . . . . . . . . . . .
         CREATE SYNONYM. . . . . . . . . . . . . . . . .
         CREATE TABLE. . . . . . . . . . . . . . . . . .
         CREATE TABLESPACE . . . . . . . . . . . . . . .
         CREATE VIEW . . . . . . . . . . . . . . . . . .
         DECLARE CURSOR (Встроенный SQL) . . . . . . . .

                                    -- 8 --



         DECLARE DATABASE (Встроенный SQL) . . . . . . .
         DECLARE STATEMENT (Встроенный SQL). . . . . . .
         DELETE. . . . . . . . . . . . . . . . . . . . .
         DELETE (Встроенный SQL) . . . . . . . . . . . .
         DESCRIBE (Динамический встроенный SQL: Метод 4)
         DROP CLUSTER. . . . . . . . . . . . . . . . . .
         DROP DATABASE LINK. . . . . . . . . . . . . . .
         DROP INDEX. . . . . . . . . . . . . . . . . . .
         DROP ROLLBACK SEGMENT . . . . . . . . . . . . .
         DROP SEQUENCE . . . . . . . . . . . . . . . . .
         DROP SYNONYM. . . . . . . . . . . . . . . . . .
         DROP TABLE. . . . . . . . . . . . . . . . . . .
         DROP TABLESPACE . . . . . . . . . . . . . . . .
         DROP VIEW . . . . . . . . . . . . . . . . . . .
         EXECUTE (Динамический встроенный SQL: Метод 2).
         EXECUTE IMMEDIATE (Динамический
         встроенный SQL: Метод 1). . . . . . . . . . . .
         EXPLAIN PLAN. . . . . . . . . . . . . . . . . .
         FETCH (Встроенный SQL). . . . . . . . . . . . .
         Фраза FOR (Встроенный SQL) . . . . . . . . . . 
         GRANT (Форма I) . . . . . . . . . . . . . . . .
         GRANT (Форма II). . . . . . . . . . . . . . . .
         GRANT (Форма III) . . . . . . . . . . . . . . .
         INSERT. . . . . . . . . . . . . . . . . . . . .
         INSERT (Встроенный SQL) . . . . . . . . . . . .
         LOCK TABLE. . . . . . . . . . . . . . . . . . .
         NOAUDIT (Форма I) . . . . . . . . . . . . . . .
         NOAUDIT (Форма II). . . . . . . . . . . . . . .
         OPEN cursor (Встроенный SQL). . . . . . . . . .
         PREPARE (Динамический встроенный SQL) . . . . .
         RENAME. . . . . . . . . . . . . . . . . . . . .
         REVOKE (Форма I). . . . . . . . . . . . . . . .
         REVOKE (Форма II) . . . . . . . . . . . . . . .
         REVOKE (Форма III). . . . . . . . . . . . . . .
         ROLLBACK. . . . . . . . . . . . . . . . . . . .
         ROLLBACK (Встроенный SQL) . . . . . . . . . . .
         SAVEPOINT . . . . . . . . . . . . . . . . . . .
         SELECT. . . . . . . . . . . . . . . . . . . . .
         SELECT (Встроенный SQL) . . . . . . . . . . . .
         SET TRANSACTION . . . . . . . . . . . . . . . .
         Фраза STORAGE . . . . . . . . . . . . . . . . .
         Ограничение для таблицы . . . . . . . . . . . .
         UPDATE. . . . . . . . . . . . . . . . . . . . .
         UPDATE (Встроенный SQL) . . . . . . . . . . . .
         VALIDATE INDEX. . . . . . . . . . . . . . . . .
         WHENEVER (Встроенный SQL) . . . . . . . . . . .

 Глава 6 ФРАЗЫ ОПЕРАТОРА SELECT. . . . . . . . . . . . .

         Фраза FROM  . . . . . . . . . . . . . . . . . .
         Фразы GROUP BY и HAVING . . . . . . . . . . . .
         Фраза WHERE . . . . . . . . . . . . . . . . . .
         Фраза WHERE (Встроенный SQL). . . . . . . . . .
         Фразы CONNECT BY и START WITH . . . . . . . . .
         Фраза ORDER BY. . . . . . . . . . . . . . . . .
         Простое объединение . . . . . . . . . . . . . .
         Внешнее объединение . . . . . . . . . . . . . .
         Запрос (query). . . . . . . . . . . . . . . . .

                                    -- 9 --



         Коррелированный запрос. . . . . . . . . . . . .
         Распределенные запросы. . . . . . . . . . . . .
           Идентифицирование удаленных таблиц. . . . . .
           Ограничения для распределенных запросов . . .
                  Справочное руководство по языку SQL   

 Приложение А СЛОВАРЬ ДАННЫХ . . . . . . . . . . . . . .

 Приложение В СИНТАКСИС SQL  . . . . . . . . . . . . . .
               ГЛОССАРИЙ 
              ИНДЕКС 
















































                                    -- 10 --




          ГЛАВА 1                   РЕЛЯЦИОННАЯ МОДЕЛЬ             


В этой главе кратко описываются основные концепции реляционной теории, а 
также:
    * базовые понятия по проектированию таблиц
    * представлена дополнительная информация для понимания отдельных фраз 
      команда CREATE TABLE

Глава представлена следующими разделами:
    * модель отношения сущностей
    * логическая структура таблиц, включая значения терминов TABLE, COLUMN, 
      ROW
    * физическая и логическая независимость данных
    * основные, внешние и уникальные ключи
    * относительная целостность

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

        Модель отношения сущностей                              

Модель отношения сущностей обычно используется для отображения реально 
существующей системы на Систему управления реляционной базой данных (RDBMS). 
На этой модели базируются части данной главы.

Модель отношения сущностей трактует все элементы системы либо как "сущности" 
(личность, место или вещь), либо как отношение между сущностями.  Оба  этих  
элемента  представляются единственной  структурой - таблицей.  Например - в 
системе с элементами заказов партии являются сущностями,  так как  они 
являются  заказами.  Информация  и о партициях,  и о заказах представляется в 
виде таблиц.  Отношение - какая партия требуется для какого заказа - также 
представляется таблицей.

Приложение модели  отношения  сущностей  требует  выполнения следующих шагов.  
Во-первых -  определяются  сущности  Вашей системы и строится таблица для их 
представления.  Во- вторых - определяются отношения между сущностями и либо 
расширяются существующие таблицы,  либо создаются новые (для представления 
этих отношений).  И в-третьих  -  определяются  атрибуты каждой сущности и для 
их представления расширяются таблицы.

При моделировании системы с помощью модели отношения сущностей Вам часто при-
дется выполнять шаг, называемый "нормализацией". Нормализация - это процесс, 
гарантирующий что таблица содержит полный основной ключ и все столбцы,  не  
являющиеся основным ключом, зависят от полного основного ключа (См. ниже 
раздел "Основные ключи"). Исчерпывающее обсуждение нормализации выходит за 
рамки этого руководства.  Его можно найти в большинстве публикаций по 
реляционным базам данных.

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



                                    -- 11 --



         * повышенная  способность  эффективно  поддерживать ограничения 
           целостности

         * повышенная возможность адаптации к росту о  изменению системы

         * увеличение эффективности за счет гибкости, присущей хорошо 
           спроектированным реляционным системам

Следующие продукты фирмы Oracle:  CASE*Dictionary, CASE*Method и CASE*Designer 
помогут Вам улучшить,  автоматизировать и задокументировать проект. 
Дополнительную информацию можно найти в руководствах по CASE.


        Логическая структура таблиц                           
        Таблицы                                               

Таблицы - это структура,  хранящая данные в реляционной базе данных. Таблицы 
состоят из строк и столбцов.

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

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

Хотя некоторые  хорошо  спроектированные могут как представлять сущность,  так 
и описывать отношение между  сущностями, большинство таблиц все же должны 
представлять либо сущность, либо отношение. Например - представленная в конце 
этой главы таблица EMP описывает служащих фирмы, но кроме того - содержит 
столбец внешнего ключа DEPTNO,  представляющий отношени служащих и их отделов.

Формальное имя  для  таблицы  - отношение (отсюда и название "Система 
управления реляционной базой  данных"  (relation  - отношение), хотя  более 
часто используется термин:  таблица.  К преимуществам использования для 
моделирования таблиц можно отнести:
      * формат строк/столбцов таблицы прост для визуализации данных
      * для представления отношений не  создаются физические указатели. Для 
        этого используются сами данные.  Следовательно, данные проще для 
        понимания.
      * таблицы и табличные операции хорошо  определены, так как базируются на 
        развитой теории, такой как реляционная алгебра и  реляционное 
        исчисление.

       Правила создания таблиц                        

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

      * Для именования таблиц,  столбцов, индексов и кластеров используйте 
        осмысленные имена
      * Согласованно  используйте сокращения в именах таблиц и столбцов.  
      Дополнительная информация  об  именовании объектов базы  данных 
      содержится в Главе 3 данного руководства "Элементы языка SQL".


                                    -- 12 --



      * Создавайте только такие столбцы в  таблицах, которые необходимы для  
      описания сущностей или отношений Вашей модели. Таблицы с меньшим числом 
      столбцов проще в  использовании.

      * Создайте для каждой таблицы основной ключ.
      * Избегайте  дублирования  данных  между  таблицами  и внутри отдельных 
        таблиц (нормализация).
      * Документируйте  назначение каждой таблицы и столбцов внутри нее с 
        помощью оператора COMMENT.
      * Создавайте для основного ключа уникальный индекс.


        Столбцы                                               

Каждый столбец в таблице представляет один (и  только один) атрибут сущности. 
Например, таблица служащих содержит столбцы EMPNO, ENAME, SAL и DEPTNO, 
представляющих соответственно идентификационный номер, имя, оклад и номер 
отдела сотрудника.

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

Преимущество большего количества коротких столбцов  перед одиночными, комби-
нированными  столбцами проявляются,  когда пользователи попытаются использо-
вать данные столбца  в  направлении, не предвиденном первоначально.  Например, 
использование столбца SERIAL_NO будет скрывать тот факт, что в одном столбце 
представленно  несколько атрибутов таких как модель, год выпуска и т.д.

Столбцы идентифицируются по имени,  а не по их позиции. Если Вы хотите 
запросить идентификаторы и имена всех сотрудников, то выбираете столбцы EMONO 
и ENAME,  а не  первый  и  второй столбцы.

В нереляционных базах данных столбцы обычно называются полями.

        Порядок столбцов                              

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

Порядок выдачи столбцов специфицируется порядком,  в котором они указываются в 
операторе SELECT (этот оператор  определяется в  Главе  5  данного руководства 
- "Справочник по SQL - операторам"). Естественно,  порядок  следования  
столбцов  в запросе не  нарушает порядка,  в котором они располагаются в 
физической памяти.

Пользуясь таблицами системы ORACLE,  Вы могли заметить,  что столбцы не меняют 
своей позиции.  Хотя в общем случае не гарантируется  нахождение столбца в 
одном и том же месте.  Это является причиной не  считать  весьма  значительным  
порядок столбцов в таблице.





                                    -- 13 --



Порядок, в котором Вы специфицируете столбцы в момент создания таблицы  влияет  
на  порядок  их  выборки  по  оператору "SELECT *". Кроме того, ORACLE ожидает 
тот же порядок столбзов при добавлении строк к таблице (если Вы явно  не 
указали другого).

        Статическая природа столбцов                  

Обычно количество столбцов в  таблице  остается  постоянным.  Столбцы в  
таблице остаются неизменными так как сущности или отношения, которые Вы 
моделируете,  определены хорошо  и  Вы решили, какие атрибуты желательно 
отслеживать.

Однако независимо от того, как хорошо Вы определили сущность или отношение, 
данные не статичны и будут меняться с течением времени.  Оператор ALTER TABLE 
позволяет просто добавлять или модифицировать столбцы таблиц.  Например, если 
Ваши служащие - врачи, и может возникнуть надобность связаться с ними ночью, 
Вы можете решить, что в таблицу надо добавить столбец HOME_PHONE_NUMBER.  
Оператор  ALTER  TABLE позволяет Вам динамически добавлять в таблицы столбцы 
без выгрузки и перезагрузки данных.


        Строки                                        

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

Внутри таблицы строки дублироваться не должны.  Для предотвращения подобного 
дублирования используются  основные ключи.  Таблица служащих  проектируется 
таким образом,  чтобы каждый сотрудник занимал только  одну  строку  таблицы.  
В таблице EMPLOYEE_RAISE ("рост_служащего"  -  продвижение по службе), приво-
димой в конце данной главы в разделе  "Пример  таблиц", каждая строка является  
очередным  назначением сотрудника в определенное время (дата).  Конкретный 
служащий  может  присутствовать в нескольких строках этой таблицы, но комбина-
ция EMPNO, RAISE_DATE  и  SALARY_RAISE_AMOUNT  дублироваться  не должна.

        Порядок строк                                 

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

Для выдачи строк таблицы в определенном порядке используется фраза ORDER BY.  
Без фразы ORDER BY строки извлекаются в порядке, удобном системе ORACLE и Вы 
не должны  полагаться  на то, что от запроса к запросу строки будут выбираться 
в одном и том же порядке.  И конечно порядок  выборки  строк  данным запросом 
не влияет на порядок,  в котором они хранятся в таблице.

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

Работая с таблицами системы ORACLE,  Вы можете заметить, что строки редко 
меняют свою позицию.  Хотя строки произвольно и не меняют своей позиции, если 
их порядок имеет значение, необходимо использовать фразу ORDER BY.


                                    -- 14 --




        Динамическая природа строк                    

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

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

Формальный реляционный термин для строки - кортеж. Грубо говоря строка 
эквивалентна записи в других системах управления базами данных.

        Значение                                      

Значения данных располагаются на пересечении данной строки и столбца. Тип 
данных значения предполагается - как тип данных соответствующего столбца или,  
может быть - null. (Типы данных и NULL обсуждаются в Главе 4 данного 
руководства - "Элементы языка SQL".

        Обзоры                                        

Обзор - это логическое представление другой таблицы или комбинации таблиц.  
Данные обзора являются производными  данных таблиц, на которых он базируется. 
Эти таблицы называются базовыми таблицами.  Базовые таблицы могут быть 
реальными таблицами или, в свою очередь, обзорами.

Обзоры Вы  можете использовать почти также как и таблицы. По обзору может быть 
выполнен запрос,  он может  быть  изменен, данные могут  быть  добавлены  и 
удалены - все как и в стандартных таблицах.

Реально обзоры данных не содержат; вместо этого они выбирают данные из своих 
базовых таблиц.  Операции, выполняющиеся над обзором, реально влияют на их 
базовые таблицы.

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

Обзоры используются со следующими целями:

* обеспечить дополнительный уровень безопасности,  ограничивая доступ предва-
  рительно определенным набором  строк  и/или столбцов таблицы.  Например, 
единственный обзор позволит выдать данные по продажам на востоке - восточному 
региональному управляющему, на западе - западному и данные по всем продажам - 
национальному управляющему;  все - по данным  одной таблицы.

* чтобы  скрыть  сложность  данных.  Например - обзоры дают пользователю 
возможность выбирать данные из нескольких  таблиц, причем пользователю надо 
помнить только имя обзора.




                                    -- 15 --



* чтобы уменьшить синтаксическую сложность. Например - обзоры дают пользова-
телю возможность выбирать информацию из нескольких таблиц,  не  зная  при 
этом,  как выполнить операцию объединения.

* чтобы представить данные в другом разрезе.  Например - обзоры позволяют 
переименовывать столбцы без реального их затрагивания в базовой таблице.

* для обеспечения относительной  целостности.  Обратитесь  к разделу 
"Относительная целостность" данной главы,  а также к опции WITH CHECK 
оператора CREATE VIEW, приводящейся в Главе 5 данного руководства.

Индексы                                       

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

        Обеспечение быстрого доступа                  

Индексы обеспечивают  более быстрый доступ к данным для операций, возвращающих 
небольшие части строк таблицы. Например, индекс на столбце EMPNO таблицы EMP 
дает возможность системе ORACLE непосредственно обратиться к служащему с 
номером 7544 вместо сканирования  всей таблицы для поиска данного сотрудника.

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

Практическое правило:  SQL - операторы,  запрашивающие менее 10-15%  строк  
таблицы  выполняются быстрее с использованием индекса. Обсуждение преимуществ 
использования индексов можно найти  в  разделе  "Настройка SQL - операторов и 
приложений" Главы 2 документа "ORACLE RDBMS  Performance  Tuning  Guide" 
(Руководство  по настройке производительности ORACLE RDBMS).  Общая дискуссия 
об индексах ведется в Главе 5 "Пользовательские  объекты  базы данных" 
документа "ORACLE RDBMS Database Administrator's Guide" (ORACLE RDBMS 
Руководство администратора базы данных).


        Обеспечение уникальности                      

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


        Кластеры                                      

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



                                    -- 16 --



Несмотря на то,  что кластеризация может повысить производительность некоторых 
операций, для других операций производительность может и снизиться. Обсуждение 
преимуществ использования  кластеров  можно  найти  в разделе "Настройка SQL - 
операторов и приложений" Главы  2  документа  "ORACLE  RDBMS Performance 
Tuning Guide" (Руководство по настройке производительности ORACLE RDBMS).  
Общая дискуссия об кластерах ведется в Главе 5 "Пользовательские объекты базы 
данных" документа "ORACLE RDBMS Database Administrator's  Guide" (ORACLE RDBMS 
Руководство администратора базы данных).

        Физическая независимость данных               

Использование индексов и кластеров скрыто  от пользователей.  ORACLE  RDBMS  
использует их,  если находит это полезным для текущей операции. Для получения 
преимуществ от использования индексов и  кластеров  нет необходимости модифи-
цировать запрос, оптимизатор запросов системы ORACLE знает обо всех индексах и 
кластерах данной таблицы и использует их, если сочтет необходимым.  Скрытость 
индексов и кластеров  называется "физической независимостью данных"; 
внутренний формат данных может меняться (таблица может быть кластеризованной и  
некластеризованной), а  пользовательское приложение модификации не требует.








































                                    -- 17 --




        Независимость данных                          

        Физическая независимость данных               

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

Первым преимуществом физической независимости данных является то, что приклад-
ная программа не нуждается в модификации, даже  если  физическое  расположение 
данных в памяти изменилось. Например, Ваш администратор базы данных может 
захотеть кластеризовать таблицы EMP и DEPT. При этом все запросы, выбирающие 
данные из этих таблиц, будут продолжать выдавать те же результаты, что и до 
кластеризации.

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


        Логическая независимость данных               

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

Логическая независимость данных также вытекает из  использования обзоров.  
Обзоры могут прикрывать логическую структуру данных от пользователей, к ним 
обращающихся. Например, такой обзор может скрывать от пользователей факт 
выборки данных из нескольких таблиц.


        Ключи                                         

        Основные ключи                                

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

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

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



                                    -- 18 --



Как упоминалось выше, таблица - это неупорядоченный  набор.  Вследствие этого, 
Вы не можете запросить пятую строку таблицы; вместо этого Вы используете 
основной  ключ  для  выборки определенной строки.  Если  DEPTNO является 
основным ключом таблицы DEPT (как показано в конце этой главы), тогда запрос 
по отделу  30  вернет  единственную строку,  соответствующую этому отделу.

Хотя ORACLE и не настаивает на назначении каждой таблице основного ключа, все 
они должны иметь один (и только один) основной ключ.  Если у таблицы нет 
основного ключа,  она может содержать дублирующие  строки.  Основной  ключ 
создается во фразах column constraint и table constraint оператора CREATE 
TABLE.

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

  2. Обычно в  строке Вы не должны менять значения основного ключа.  
     Единственная функция, которую несет основной ключ, уникальное различие 
     одной строки от другой; ничего другого ему не присуще.  Несогласованность 
     данных - это основная опасность  при разрешении смены значения основного 
     ключа.  Отношения между сущностями наиболее  часто представляются  через 
     основные ключи. Изменение значений основного ключа разрушает это отноше-
     ния, пока соответствующие изменения не будут проведены во всех местах,  
     связанных со значением этого основного ключа.  Обычно достаточно трудно 
     гарантировать, что выполнены все надлежащие изменения.

  3. Лучше если основной ключ будет коротким и числовым. Короткие основные  
     ключи  проще набирать,  а для числовых ключей проще назначать  следующее  
     значение.  Например, если последнее  значение  основного ключа равно 115,  
     а основные ключи располагаются в возрастающем порядке, то имеет смысл 
     предположить,  что следующее значение будет 116.


        Внешние ключи                                 

Внешние ключи  представляют собой отношение между таблицами.  "Внешний ключ" - 
это столбец (или группа столбцов), чьи значения являются  производными 
значений основного ключа другой (или той же самой)  таблицы.  Существование  
внешнего  ключа предполагает наличие  основного ключа в другой таблице, чьим 
производным является внешний ключ.  Составной внешний  ключ - это внешний 
ключ,  составленный из нескольких столбцов.

Например, если столбец DEPTNO является основным ключом  талицы DEPT  (как  
показано в конце этой главы),  то столбец DEPTNO в таблице EMP (см.  в конце 
главы) будет внешним ключом относительно  таблицы DEPT.  Внешний ключ DEPTNO 
таблицы EMP представляет из себя отношение между служащими и отделами. Этот  
внешний ключ таблицы EMP позволяет определить, что все служащие отдела 10 
работают в отделе  ACCOUNTS,  находящемся в NEW YORK.

В оставшейся  части  данной  главы  будем называть таблицу с внешним ключом - 
"таблицей внешнего ключа",  а  таблицу,  на которую ссылается внешний ключ - 
"таблицей основного ключа".  Следовательно, EMP - таблица внешнего ключа, а 
DEPT - таблица основного ключа.





                                    -- 19 --



Таблица может  содержать несколько внешних ключей. Поскольку каждый внешний 
ключ представляет отношение с  другой  таблицей, несколько внешних ключей 
представляют несколько отношений. Таблица EMP содержит два внешних ключа: 
DEPTNO и MGR.

Внешний ключ может ссылаться на основной ключ той же  таблицы. MGR ссылается 
на основной ключ таблицы EMP. Внешний ключ MGR представляет собой отношение 
между служащими и  менеджерами. Служащий  JONES имеет в столбце MGR значение 
7839; так как служащий KING имеет номер 7839, Вы знаете что он является 
менеджером служащего JONES.

Чтобы иметь смысл, внешний ключ должен хранить значение, соответствующее 
значению основного ключа в  таблице  основного ключа. Например, если служащий 
таблицы EMP имеет номер отдела 40, отдел с таким же номером должен содержаться 
в таблице DEPT.

Внешний ключ должен заключать в себе весь основной  ключ, из которого он 
выводится (является производным). Если, к примеру, Вы хотите соотнести 
служащих и офисы, то чтобы соотнести составной основной ключ по столбцам 
FLOOR_NUMBER и OFFICE _NUMBER таблицы OFFICE, необходимо в качестве внешнего 
ключа брать оба столбца FLOOR_NUMBER и OFFICE_NUMBER в таблице EMP (отдельно 
их использовать неправильно).

Внешний ключ может иметь значение null. Например, новый служащий может еще не 
быть назначен ни в какой отдел и,  следовательно, иметь в столбце DEPTNO 
значение null.

Внешний ключ может иметь дублирующиеся  значения.  Например, имеет смысл 
предположение,  что не один сотрудник из таблицы EMP может иметь один и тот же 
номер отдела.

Внешний ключ  создается  при  создании  таблицы   оператором CREATE  TABLE 
(как описывается в Главе 5 этого руководства - "Справочник SQL - операторов").

        Уникальные ключи                              

Уникальный ключ имеет те же свойства, что и основной, за исключением того, что 
выполняет другие функции. Столбец, определенный в качестве основного ключа,  
должен иметь различные значения каждой строки таблицы. Уникальный ключ не 
может содержать значение null,  следовательно ограничение  NOT  NULL должно 
сопутствовать ограничению UNIQUE.

В отличие от функции основного ключа,  заключающейся в идентификации каждой 
строки в таблице, функция уникального ключа состоит в  обеспечении уникаль-
ности.  Например,  Ваша работа может требовать,  чтобы у каждого сотрудника  
был различный номер телефона. Следовательно, столбец TELEPHONE_NUMBER должен 
быть объявлен уникальным ключом.

Заметьте, что хотя TELEPHONE_NUMBER и  может  быть  основным ключом, более 
подходящим может быть сгенерированный системой ключ, например EMPLOYEE_NUMBER.  
Сгенерированный   системой ключ более  приемлем в качестве основного ключа по 
следующим соображениям:

 1. Основной ключ не  должен  содержать  другой  информации, кроме 
    обеспечивающей   уникальную  идентификацию  каждой строки. Номер телефона 
    представляет собой цифры для  набора телефона служащего.



                                    -- 20 --



 2. Основной ключ  должен оставаться неизменным.  Сотрудники перемещаются 
    внутри организации и их  телефонные  номера могут меняться.

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

Примером уникального  ключа,  не  являющимся основным ключом может служить:

    * номер страхового полиса  сотрудника  (основным  ключом будет учетный 
    номер сотрудника)


        Относительная целостность                     

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

Ограничение целостности - это правило,  усиливающее взаимосвязь внутри Вашей 
системы. Например, одно ограничение целостности в примере системы, приведенном 
в конце главы говорит о том,  что  служащий  из  таблицы  EMP  не может  быть 
назначен в отдел, который не существует в таблице DEPT. Другое подобное 
правило относительной целостности требует, чтобы личный номер менеджера для 
сотрудника, занесенного в таблицу EMP,  должен присутствовать  в той  же  
таблице  (т.е.  нельзя указывать на несуществующего менеджера).

Основной выигрыш от относительной целостности - это согласованность данных.  В 
системе ORACLE относительная целостность определяется в  том  же  операторе,  
что и таблица или обзор (операторы CREATE TABLE и CREATE VIEW).  Это  
означает,  что относительная целостность  может  быть  определена  в момент 
создания таблицы и ограничения целостности работают  независимо от приложения 
или инструментального средства,  работающего с таблицей.

Замечание: Определение ограничений целостности поддерживается ORACLE  Version  
6.0;  работа  этих  ограничений  пока не поддерживается.

Ограничения целостности запоминаются в словаре данных ORACLE.  Пользователи и  
приложения  могут запрашивать словарь данных для выяснения ограничений 
целостности для конкретной таблицы.

Внешние ключи служат  механизмом  поддержания  относительной целостности.


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

ORACLE Version 6.0 содержит синтаксическую поддержку ограничений целостности   
как   определено  в  ANSI  SQL  Standard Addendum I.

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

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

Ограничения могут принимать следующие формы:


                                    -- 21 --



    * ограничение NOT NULL.  Столбец не может содержать значения null.  
      Информация о значениях null дается в Главе 3 данного руководства - 
      "Элементы языка SQL".

    * ограничение UNIQUE.  Столбец или столбцы не могут содержать 
      дублирующихся значений.

    * ограничение PRIMARY KEY. Столбец или столбцы, входящие в основной ключ,  
    не могут дублироваться.  Ограничение PRIMARY KEY  включает в себя ограни-
    чение UNIQUE,  но обратное не верно.  Таблица может  содержать только  
    один столбец, определенный  как PRIMARY KEY и несколько - определенных как 
    UNIQUE.  Кроме того, PRIMARY KEY включает в себя ограничение NOT NULL.

    * ограничение FOREIGN KEY.  Столбец или столбцы, составляющие внешний 
      ключ,  должны ссылаться на основной  ключ указанной таблицы.

    * ограничение CHECK. Перед тем, как строка добавится или изменится, она 
      должна удовлетворить  выражению,  определенному ограничением CHECK.

    Замечание: ORACLE Version 6.0 полностью поддерживает ограничение NOT NULL.  
    Текущая фраза WITH CHECK OPTION  из оператора CREATE  VIEW поддерживает 
    дополнительные формы относительной целостности.  Для  отработки   
    ограничения UNIQUE в настоящее время используются индексы.

    Более полное обсуждение ограничений приводится в Главе 5 данного 
    руководства - "Справочник по SQL - операторам".

        Пример таблиц                                 

Таблица EMP                                   

EMPNO ENAME    JOB        MGR   HIREDATE   SAL   COMM DEPTNO
----- -------- --------- ----  --------- ----- ------ ------
7369 SMITH    CLERK     7902  17-DEC-80   800            20
7499 ALLEN    SALESMAN  7698  20-FEB-81  1600    300     30
7521 WARD     SALESMAN  7698  22-FEB-81  1250    500     30
7566 JONES    MANAGER   7839  02-APR-81  2975            20
7654 MARTIN   SALESMAN  7698  28-SEP-81  1250   1400     30
7698 BLAKE    MANAGER   7839  01-MAY-81  2850            30
7782 CLARK    MANAGER   7839  09-JUN-81  2450            10
7788 SCOTT    ANALYST   7566  10-FEB-88  3000            20
7839 KING     PRESIDENT       17-NOV-81  5000            10
7844 TURNER   SALESMAN  7698  08-SEP-81  1500            30
7876 ADAMS    CLERK     7788  15-MAR-88  1100            20
7900 JAMES    CLERK     7698  03-DEC-81   950            30
7902 FORD     ANALYST   7566  03-DEC-81  3000            20
7934 MILLER   CLERK     7782  23-JAN-82  1300            10

Таблица DEPT                                  

DEPTNO      DNAME        LOC
------      ------------ ------------
10          ACCOUNTING   NEW YORK
20          RESEARCH     DALLAS
30          SALES        CHICAGO
40          OPERATIONS   BOSTON



                                    -- 22 --



Таблица EMPLOYEE_RAISE                        

EMPNO   RAISE_DATE    SALARY_RAISE_AMOUNT
------  -----------   -------------------
7844    03-JAN-82     100
7876    03-JAN-82     100
7839    15-OCT-84     1000
7844    01-JAN-83     200
7902    27-JAN-83     107


Таблица DUAL                                  

DUMMY
-----
X


Таблица DUAL может быть использована в SQL - операторах  которым надо сослать-
ся на любую таблицу.  Обычно в этом случае выбирается таблица DUAL, так как 
она имеет только одну строку и один столбец. Например:

SELECT SYSDATE FROM DUAL




































                                    -- 23 --




    ГЛАВА 2                         ВВЕДЕНИЕ В SQL              


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


История SQL                                   

Прототип языка управления реляционными базами данных SQL появился  в  системе  
System R фирмы IBM в середине семидесятых годов. Эта система была описана в 
ноябре 1976 года в журнале R&D. В  1979 году Oracle Corporatuon представила 
первую коммерческую версию SQL. Язык SQL также был применен в системах DB2 и 
SQL/DS корпорации IBM.


        Стандартизация SQL                            

Американский Национальный Институт Стандартов  (ANSI) принял SQL в качестве 
стандарта языка для систем управления реляционными базами данных в октябре 
1986 года (ANSI X3.135-1986).  Стандарт SQL  также  был  принят  Международной 
Организацией Стандартов (ISO STANDARD 9075) и кроме того Федеральным прави-
тельством Соединенных Штатов в Федеральном Стандарте Обработки Информации 
(FIPS) номер 127.  И наконец,  "Расширенное свойство целостности",  описанное  
в "Дополнении I" ANSI SQL выпущено в стандартах X3.135-1989 и 9075-1989.  Все 
основные системы управления  реляционными  базами данных поддерживают 
некоторую форму SQL, основанную на стандарте ANSI SQL89.

SQL - это постоянно развивающийся язык и некоторые  его  аспекты пока не 
определены.  Например - полное определение относительной целостности пока не 
стандартизовано ни  одной из вышеперечисленных организаций.


Преимущества использования SQL                

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


Непроцедурный язык                            

SQL - это непроцедурный язык благодаря следующим свойствам:



                                    -- 24 --



     * обрабатывает одновременно не одну, а множество записей
     * обеспечивает автоматическое управление данными

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

SQL не требует от Вас спецификации метода доступа  к данным.  Это свойство 
дает Вам возможность сосредоточиться на получении необходимого результата. Все 
SQL - операторы используют оптимизатор запросов  -  часть RDBMS,  определяющую 
наиболее быстрые пути доступа к указанным данным.  Оптимизатор запросов знает 
обо всех существующих индексах и при необходимости их использует;  во время 
обращения к таблице Вам нет необходимости знать, имеет ли таблица индексы и 
какие они.


Язык для всех пользователей                   

Язык SQL используется во всех типах действий с  базой данных всеми 
пользователями, включая:
       * администраторов системы
       * администраторов базы данных
       * прикладных программистов
       * управляющий персонал
       * персонал поддержки проектирования системы
       * множество типов конечных пользователей.

SQL обеспечивает группы простых в изучении команд, являющихся непротиворечи-
выми и применимыми для всех пользователей.  Основные SQL - операторы могу быть 
освоены за несколько  часов и  даже наиболее часто используемые - в течение 
нескольких дней.

        Унифицированный язык                          

SQL обеспечивает операции для самых различных задач, включая:
     * запросы данных
     * добавление, изменение и удаление строк из таблицы
     * создание, модификацию и удаление объектов базы данных
     * управление доступом к базе данных и объектам базы
     * гарантирование согласованности данных

Ранние системы  управления базами данных используют для каждой из перечислен-
ных категорий отдельные языки. SQL унифицирует все эти задачи в одном 
согласованном языке.


        Общий язык для всех реляционных баз данных    

Так как все основные системы управления базами  данных  поддерживают SQL,  Вы 
можете использовать весь накопленный опыт при переходе из одной RDBMS в 
другую.  Более того,  все Вами написанные программы становятся переносимыми и 
могут переноситься из одной RDBMS в другую с минимальными исправлениями.


        Поддержка национальных языков                 

                                    -- 25 --



Система ORACLE Version 6 обеспечивает дополнительные возможности по работе на 
различных языках,  а  также  -  обработке многоязычных данных, хранящихся в 
одной базе данных.

К средству поддержки национальных языков добавлены три функции CONVERT(), 
NLSSORT() и REPLACE(). Функция REPLACE() хотя и важна для поддержки 
национальных языков,  применима дополнительно широким кругом  пользователей.  
Для  дополнительной информации об этих функциях обратитесь к Главе 4 этого 
руководства - "Операторы и функции".

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

В настоящее время в каждое место  поставляется  только  один национальный  
язык, например - если ORACLE поставляется во Францию, язык будет французским.

Полное описание возможностей и применения  данного  средства приводится  в 
Приложении F - "Поддержка национальных языков" документа "ORACLE RDBMS 
Руководство администратора базы данных".

        Встроенный SQL                                

Встроенный SQL - это возможность вставки операторов  стандартного SQL  внутрь 
программ на процедурных языках програмирования. Встроенный SQL включает в 
себя:
      * все SQL - операторы (SELECT, INSERT, ...)
      * команды управления выполнением ( PREPARE, OPEN,...),
      которые позволяют использовать стандартные команды SQL внутри 
      процедурного языка программирования

Встроенный SQL  включает в себя также и расширения стандартных SQL - операто-
ров. В главе 5 - "Справочник SQL - операторов" представлена стандартная  форма  
каждого оператора,  а также его встроенная форма (если она есть).

Встроенный SQL поддерживается прекомпиляторами ORACLE.  Прекомпиляторы 
интерпретипуют  операторы встроенного SQL и приводят их к форме,  понятной 
стандартным компиляторам данного языка.

Каждый из  перечисленных  ниже  прекомпиляторов  транслирует программы на 
встроенном SQL на конкретный язык  программирования:
      * Pro*Ada - прекомпилятор
      * Pro*C - прекомпилятор
      * Pro*COBOL - прекомпилятор
      * Pro*FORTRAN - прекомпилятор
      * Pro*Pascal - прекомпилятор
      * Pro*PL/I - прекомпилятор

Полная информация по каждому прекомпилятору ORACLE приводится в соответствую-
щем руководстве программиста по прекомпилятору с указанного языка и  в  
дополнении  к  руководству  по прекомпилятору.

        Термины встроенного SQL                       

На протяжении всего данного руководства используются следующие термины 
строенного SQL:


                                    -- 26 --



host_variable переменная языка,  определенная с соответствии с правилами данно
              го процедурного языка, на которую  ссылается SQL - оператор.  
              Host - переменная может иметь  заранее  определенный тип или 
              быть массивом,  определенным пользователем и иметь соответствую-
              щую индикаторную  переменную. Определение индикаторной 
              переменной описывается в "Руководстве программиста по  
              прекомпилятору ORACLE".

              Host -  переменные могут использоваться только в местах,  где 
              может появиться  численное  или символьное  выражение и всегда  
              предваряются двоеточием (:) для отличия от имен таблиц или стол-
              бцов.  Host - переменная не может быть использована для представ-
              ления  ключевых  слов SQL, а также имен таблиц и столбцов.

cursor_name    обозначает идентификатор для явно определенного пользователем 
               курсора.

AT dbname      необязательная фраза, обозначающая неумалчиваемую базу  
               данных.  Это имя базы данных должно быть предварительно  
               определено  в   операторе DECLARE DATABASE.

connect_string строка идентификации базы данных для связи через SQL*Net. 
               Детали можно найти в "Руководстве пользователя по  SQL*Net" для 
               каждого конкретного протокола.

statement_name обозначает идентификатор для SQL  - оператора, подготовленного 
               с помощью фразы PREPARE.

:host_string   символьная строка host - переменной, содержащая текст SQL - 
               оператора.


         Лексические соглашения ORACLE                 

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

 Когда Вы выдаете SQL - оператор, то можете включить один или более знаков 
 табуляции, возвратов каретки, пробелов и коммен- тариев в любом месте 
 оператора,  где допустим пробел. Следо- вательно приведенные  ниже  два 
 оператора,  ORACLE будет ин- терпретировать как идентичные:

 SELECT ENAME,SAL*12,MONTHS_BETWEEN(HIREDATE,SYSDATE) FROM EMP

  SELECT ENAME,
      SAL*12,
      MONTHS_BETWEEN(HIREDATE,SYSDATE)
      FROM EMP

 Регистр не  имеет  значения  в   зарезервированных   словах, ключевых словах, 
 идентификаторах и параметрах. Однако в сим- вольных литералах регистр имеет 
 значение.  За дополнительной информацией обратитесь к описанию "text" в Главе 
 3 (Элементы языка SQL) данного руководства.


KOAP Open Portal 2000