Определение таблиц данных
Таблицы данных являются, как правило, самыми первыми объектами создаваемых в базах данных. Рассмотрим как решается эта задача в СУБД SYBASE SQL Anywhere, на примере создания в базе данных Dubl_Biblia копий двух таблиц . Речь идет о таблицах Copies (характеристики экземпляров книг) и Books (данные о книгах, имеющиеся в библиотеке). При этом в учебных целях установим для поля Copies.Code_book тип данных Char(10). Следует напомнить, что создание любых объектов базы данных могут осуществлять только пользователи, имеющие класс полномочий RESOURCE или DBA.
Как и ранее, начнем с применения SQL Central. После запуска этой утилиты осуществим соединение с базой данных Dubl_Biblia под именем администратора базы данных Stepanov. Затем воспользуемся редактором структуры таблиц. Его можно запустить через элемент Add Table, который находится в папке Tables. Редактор структуры таблиц выводит на экран окно Table <Unnamed> - SQL Central. Такое окно с заполненной информацией о свойствах таблицы Copies представлено на рис.42.
Рис.42. Окно редактора структуры таблиц
ПРИМЕЧАНИЕ
Редактор структуры таблиц, но с названием таблицы вместо фразы <Unnamed> в наименовании окна, инициализируется и элементом Add Column. В этом случае редактор используется для добавления полей в ранее созданные таблицы данных. Элемент Add Column находится папках Tables - <Название таблицы> - Columns.
Как видно из окно редактора содержит таблицу, в ячейки которых вводятся свойства полей. Каждому полю создаваемой таблицы данных соответствует одна строка. Назначение колонок таблицы рассматриваемого редактора приводится ниже.
В колонке Key указывается признак ключевого поля, означающий что это поле входит в состав первичного ключа таблицы. На показано, что первичный ключ таблицы состоит только из одного поля N_books. Установка/снятие признака ключевого поля осуществляется щелчком левой кнопки мыши.
Колонка Column Name содержит название полей таблицы данных.
ПРИМЕЧАНИЕ
В названиях полей таблицы допустимо использовать любые символы, в том числе и пробелы, и буквы неанглийского алфавита. В дальнейшем в SQL-операторах при обращении к таким полям их следует заключать в двойные кавычки.
Колонка Data Type служит для определения типов данных полей создаваемой таблицы. Задание типа данных осуществляется выбором из списка, в виде которого эта колонка представлена в каждой строке.
Колонка Size/Prec. предназначена для задания размера для типов данных Char и его синонимов, Decimal, Numeric и Binary. Если в колонке Data Type задан один из этих типов, то колонка Size/Prec. представляется в виде счетчика. Щелкая мышью по стрелкам счетчика, можно установить требуемый размер поля таблицы данных. Как видно на , таким образом задан размер в 10 байтов для поля Code_book.
Для типов данных Decimal и Numeric, помимо переменного общего размера, требуется указать еще и точность дробной части представляемых значений. Для этого используется колонка Scale. В необходимых случаях она, как и колонка Size/Prec, представляется в виде счетчика.
Важное значение имеет колонка Allow Nulls. Оно указывает может ли текущее поле создаваемой таблицы содержать специальное значение NULL. Это значение указывает на то, что в поле не содержатся данные. Оно помогает определить были ли ранее в это поле введены данные. Как видно на , для всех полей таблицы Copies не разрешено хранение значения NULL.
В колонку Comment записывается комментарий к полям таблицы данных.
Таблица со свойствами полей создаваемой таблицы данных является основным элементом окна редактора свойств таблицы, но не единственным. Поле Name предназначено для ввода имени таблицы. Поле Creator предназначено для выбора владельца создаваемой таблицы. Такая возможность предоставлена только для пользователей с правами администратора. В базе данных Dubl_Biblia - это пользователи dba и Stepanov. Такие пользователи могут создавать объекты базы данных от имени других пользователей. Эта возможность для таблиц реализуется при помощи поля Creator в окне редактора свойств таблицы. .Новые объекты могут создавать также пользователи с классом полномочий Resource. Однако пользователи данной категории могут создавать эти объекты только от своего имени.
Управление работой редактора структуры таблиц осуществляется при помощи меню. Оно появляется после щелка правой кнопки мыши в любом месте окна редактора ниже таблицы свойств полей таблицы данных. Такое меню приведено на . Оно содержит следующие пункты:
Действия, реализуемые пунктами меню редактора, можно выполнить при помощи панели инструментов. Она расположена в верхнем правом углу окна редактора ().
Введем всю информацию для определения свойств полей таблицы Copies как показано на . После этого завершим работу в редакторе структуры таблиц. В результате этого в базе данных Dubl_Biblia появится новая и пока единственная таблица Copies. Этот факт будет представлен вложенной папкой Copies в папке Tables. Самостоятельно раскройте данную папку и проверьте это утверждение. Обратите внимание, что владельцем созданной таблицы является пользователь Stepanov.
Для того, чтобы создать таблицу Copies в утилите ISQL необходимо выполнить следующую последовательность SQL-операторов:
//Создание таблицы CREATE TABLE Stepanov.Copies /* Имя владельца может указывать только администратор базы данных */ ( N_books SMALLINT NOT NULL, /* Тип поля SMALLINT, значения NULL не допустимы */ Code_book SMALLINT NOT NULL, Present BIT NOT NULL, /* Тип поля BIT */ PRIMARY KEY(N_books), /* Ключ таблицы состоит из одного поля */ ); /* Комментарии к полям таблицы */ COMMENT ON COLUMN Stepanov.Copies.N_books IS 'Инвентарный N экземпляра книги'; COMMENT ON COLUMN Stepanov.Copies.Code_book IS 'Шифр (код) наименования книги'; COMMENT ON COLUMN Stepanov.Copies.Present IS ' Признак наличия данного экземпляра книги '
Убедиться в том, что в базе данных появилась новая таблица можно, просмотрев список имеющихся в базе таблиц и представлений (см. рис. - ).
Теперь создадим в базе данных Dubl_Biblia копию таблицы Books . Она содержит много полей (). В утилите SQL Sentral имеется возможность не устанавливать большинство их свойства вручную. Это реализуется копированием структуру таблицы Books из .
В текущий момент в утилите SQL Sentral установлено соединение к базе данных Dubl_Biblia. Подключимся еще и к . Раскроем в правой панели папку Tables этой базы данных. Затем выделим в правой панели папку Books, соответствующий таблице Books. После этого перетащим ее в папку Tables базы данных Dubl_Biblia. При перетаскивании курсор Books принимает сложную форму. Вид курсора, установленный при этом на папку Tables базы данных Dubl_Biblia в левой панели утилиты, и содержимое главного окна утилиты SQL Central на этот момент времени приведен на рис. 43.
Рис.43. Копирование структуры таблицы данных Books
При копировании таким образом утилита запрашивает у пользователя подтверждение копирования структуры таблицы (рис. 44).
Рис.44. Подтверждение копирование структуры таблицы данных Books
В результате проведенных действий в базе данных Dubl_Biblia появилась таблица Books. Чтобы убедиться в этом раскройте ее папку Tables.
При дублировании таким образом в новую базу переписывается структура исходной таблицы. Но при этом следует отметить, что созданная таблица содержит только основные свойства ее полей. Речь идет о названиях, типах и размерах полей, а также о разрешении хранения значений NULL и признаке уникальности значений полей. Дополнительные свойства в этом случае должны устанавливаться заново. Свойства полей и таблиц рассмотрены в и .
В утилите ISQL создание копии таблицы Books производится только оператором Create Table. Для того, чтобы получить такой же результат, что и в утилите SQL Central необходимо выполнить этот оператор следующими параметрами:
CREATE TABLE Books ( Code_book SMALLINT /* Уникальное поле типа SMALLINT.*/ NOT NULL /* Значения NULL запрещены */ DEFAULT //Значения по умолчанию автома- AUTOINCREMENT UNIQUE, /*тически- увеличиваются на единицу */ .
Author LONG VARCHAR NULL, /* Поле типа LONG VARCHAR. Значения NULL разрешены. */ Coauthors LONG VARCHAR NULL, Title_book LONG VARCHAR NULL, City_publish CHAR(15) NOT NULL, "Publisher" /* Название поля в кавычках потому что имеется одноименное служебное слово в языке Watcom-SQL */ CHAR(20) NOT NULL, Year_publish SMALLINT NOT NULL, Number SMALLINT NOT NULL, Start_date DATE NOT NULL, Times_read SMALLINT NOT NULL )