Схема - это набор объектов базы данных (в ходе текущего урока - таблиц), ассоциированных с одним конкретным именем пользователя базы данных. Пользователь называется владельцем схемы или, иначе, владельцем связанной группы объектов. Вы можете иметь одну или несколько схем в базе данных. Как правило, любой создающий объекты пользователь создает при этом и свою схему. Схема может состоять как из одной таблицы, так и из множества объектов - ограничений практически нет, если только такие ограничения не предполагает конкретная реализация SQL.
Предположим, администратор выдал вам имя пользователя базы данных и пароль. Пусть это имя USER1. Предположим также, что вы подключились к базе данных и создали таблицу с именем EMPLOYEE_TBL. Тогда настоящим именем вашей таблицы будет USER1. EMPLOYEEJTBL. Именем схемы для этой таблицы будет имя пользователя USER1, который является владельцем схемы. Таким образом вы создадите свою первую схему.
Польза схем проявляется в том, что при доступе к таблице из вашей схемы (т. е. схемы, владельцем которой вы являетесь) вам не нужно ссылаться на имя схемы. Так, вы можете сослаться на свою таблицу одним из следующих способов:
EMPLOYEEJTBL USER1.EMPLOYEEJTBL
Первый вариант предпочтительнее из-за меньшего объема. При необходимости доступа к вашей таблице другим пользователям придется указать имя вашей схемы:
USER:.EMPLOYEEJTBL
Из урока 20. "Создание и использование представлений и синонимов", вы узнаете о распределении привилегий доступа среди других пользователей так, чтобы они имели возможность обратиться к вашим таблицам. Вы узнаете также о синонимах, которые дают возможность назначить таблицам другие имена, чтобы избавиться от необходимости каждый раз указывать имя схемы. На рис. 3.1 показаны две схемы в реляционной базе данных.
Рис. 3.1. Схемы в базе данных
На рис. 3.1 показаны два пользователя, USER1 и USER2, имеющие в базе данных свои таблицы. Каждому из пользователей назначена своя схема. Вот примеры того, как эти пользователи могут обращаться к своим и к чужим таблицам: Доступ LJSER1 к своей таблице tablel: TABLE 1 Доступ USER1 к своей таблице test: TEST Доступ USER1 к таблице tablelO пользователя USER2: USER2.TABLE10 Доступ USER1 к таблице test пользователя USER2: USER2.TEST
Оба пользователя имеют по таблице с именем TEST. Таблицы, принадлежащие разным схемам в базе данных, могут иметь одинаковые имена. Если посмотреть на имена с точки зрения схем, имена таблиц в базе данных всегда будут уникальными, поскольку на самом деле частью имени таблицы всегда является имя владельца схемы. В данном случае, например, имя USER1.TEST отличается от имени USER2.TEST. Если при обращении к таблице по имени вы не укажете имя схемы, сервер базы данных будет искать таблицу только в рамках той схемы, владельцем которой вы являетесь по умолчанию. Например, если USER1 попытается обратиться к TEST, сервер базы данных сначала попытается найти таблицу с именем TEST среди таблиц пользователя USER1 и только потом обратится к другим объектам пользователя USER1, включая и синонимы для таблиц из других схем. Использование синонимов объясняется в ходе урока 21, "Работа с системным каталогом".
Любой сервер баз данных имеет свои правила назначения имен объектов и элементов этих объектов, таких как поля. Правила и соглашения для назначения имен можно уточнить ъ справочной системе каждой конкретной реализации
Таблица как основная форма хранения данных
Таблица является основной формой хранения данных в реляционной базе данных. Таблица состоит из строк и столбцов, содержащих данные. Таблица физически занимает место в базе данных и может быть как постоянной, так и временной.
Поля и столбцы
Поле, называемое также столбцом в реляционной базе данных, является частью таблицы, которой приписан определенный тип данных. Имя поля должно соответствовать типу данных, которые будут вводиться в столбец. Столбцы могут быть помечены как NULL или NOT NULL. В столбец, которому назначено NOT NULL, обязательно должны быть введены какие-нибудь данные. Если же столбец определен как NULL, данные в него вводить не обязательно.
Каждая таблица базы данных должна содержать хотя бы один столбец. Столбцы являются теми элементами таблицы, в которых хранятся данные конкретных типов, например, имя персоны или телефонный номер. Так, один из столбцов в таблице с информацией о клиентах может быть предназначен для хранения имени клиента.
Вообще говоря, имя должно быть одной непрерывной строкой. Как правило, имя объекта должно представлять собой одну непрерывную строку с ограниченным числом символов в ней, зависящим от конкретной реализации SQL. Для разделения слов, из которых складывается имя, обычно используют символ подчеркивания. Например, столбец для хранения имени клиента лучше назвать CUSTOMER_NAME, a Не CUSTOMERNAME.
Не забудьте ознакомиться с правилами присвоения имен объектам и другим элементам базы данных, которые требует ваша конкретная реализация SQL.
Строки
Строка представляет запись в таблице базы данных. Например, строка данных в таблице с информацией о клиентах может состоять из кода клиента, его имени, адреса, номера телефона, факса и т. п. Строка состоит* из данных всех полей, относящихся к одной записи в таблице. Таблица может состоять всего из одной строки, а может содержать и миллионы строк данных (записей).
Оператор CREATE TABLE
Оператор CREATE TABLE, очевидно, используется для того, чтобы создавать таблицы. Хотя непосредственно создание таблицы оказывается совсем простым делом, прежде, чем использовать оператор CREATE TABLE, нужно со всей тщательностью подойти к вопросу планирования структуры таблицы.
Вот несколько простых вопросов, на которые при создании таблицы нужно получить ответы.
• Какого типа данные будут вводиться в таблицу?
• Каким должно быть имя таблицы?
• Каким столбцом (или столбцами) будет задаваться ключевое поле (составной ключ)?
• Какие имена следует присвоить столбцам (полям)?
• Какие типы данных следует назначить столбцам?
• Какой выбрать длину каждого из столбцов?
• Какие столбцы таблицы будут требовать обязательного ввода данных?
Получив ответы на все эти вопросы, не составляет труда построить подходящий оператор CREATE TABLE и применить его.
Синтаксис оператора для создания таблиц будет следующим:
CREATE TABLE ИМЯ_ТАБЛИЦЫ ( ПОЛЕ1 ТИП ДАННЫХ [ NOT NULL ] , ПОЛЕ2 ТИП ДАННЫХ [ NOT NULL ] , ПОЛЕЗ ТИП ДАННЫХ [ NOT NULL ] , ПОЛЕ4 ТИП ДАННЫХ [ NOT NULL ] , ПОЛЕ5 ТИП ДАННЫХ [ NOT NULL ] ) ;
В примерах этого урока используются такие популярные типы данных, как CHAR (символьный постоянной длины), VARCHAR (символьный переменной длины), NUMBER (числовой, для десятичных и не десятичных значений) и DATE (для значений даты и времени).
Создайте таблицу с именем EMPLOYEE_TBL, например, с помощью следующего оператора:
CREATE TABLE EMPLOYEE_TBL
(EMP_ID CHAR(9) NOT NULL,
EMP_NAME VARCHAR2(40) NOT NULL,
EMP_ST_ADDR VARCHAR2(20) NOT NULL,
EMP_CITY VARCHAR2U5) NOT NULL,
EMP_ST CHAR(2) NOT NULL,
EMP_ZIP NUMBER(5) NOT NULL,
EMP_PHONE NUMBER(10) NULL,
EMP_PAGER NUMBER(10) NULL);
В результате в таблице будет восемь столбцов. Обратите внимание на использование символа подчеркивания в именах столбцов так, что эти имена кажутся состоящими из нескольких слов (например, EMPLOYEE ID превратилось в EMP_ID). Каждому столбцу назначен свой тип данных определенной длины, а использование ограничений NULL /NOT NULL позволяет указать, какие из столбцов должны обязательно иметь значения во всех строках таблицы. Поле EMP_PHONE определено как NULL, и это значит, что для соответствующего столбца допустимы пустые значения (ввиду того, что не все могут иметь телефонные номера). Информация о столбцах разделяется запятыми, а описания всех столбцов заключены в круглые скобки (открывающая скобка помещена перед определением первого столбца, а закрывающая - после определения последнего).
Завершается оператор точкой с запятой. Большинство реализаций SQL предполагает использование некоторого символа, означающего завершение оператора или передачу оператора серверу базы данных. В Oracle используется точка с запятой. Trans-act-SQL использует оператор GO. В этой книге используется точка с запятой.
В созданной нами таблице каждая запись или строка с данными будет состоять из следующих полей: EMP_ID, EMP_NAME, EMP__ST_ADDR, EMP_CITY, EMP_ST, EMP_ZIP, EMP_PHONE, EMP_PAGER
В этой таблице каждое поле является столбцом. Столбец EMP_ID может состоять как из одного-единственного табельного номера одного служащего, так и из множества табельных номеров многих служащих в зависимости от требований запроса к базе данных или транзакций.
Значение NULL является значением столбца по умолчанию, следовательно, это значение в операторе CREATE TABLE вводить не обязательно.
Ключевое слово STORAGE
В определенных формах ключевое слово STORAGE поддерживается большинством реализаций SQL. С помощью ключевого слова STORAGE в операторе CREATE TABLE можно задать исходные размеры таблицы и, как правило, при создании таблицы оно используется. Вот пример использования ключевого слова STORAGE в одной из реализаций SQL: