Создание таблиц с помощью Database Desktop
Создание таблиц с
помощью Database Desktop
Содержание
Обзор
Утилита Database Desktop
Заключение
Обзор
На данном
уроке мы изучим, как создавать таблицы базы данных с помощью утилиты Database
Desktop, входящей в поставку Delphi. Хотя для создания таблиц можно
использовать различные средства (SQL - компонент TQuery и WISQL, компонент
TTable), применение этой утилиты позволяет создавать таблицы в интерактивном
режиме и сразу же просмотреть их содержимое - и все это для большого числа
форматов. Это особенно удобно для локальных баз данных, в частности Paradox и
dBase.
Утилита Database
Desktop
Database
Desktop - это утилита, во многом похожая на Paradox, которая поставляется
вместе с Delphi для интерактивной работы с таблицами различных форматов
локальных баз данных - Paradox и dBase, а также SQL-серверных баз данных
InterBase, Oracle, Informix, Sybase (с использованием SQL Links). Исполняемый
файл утилиты называется DBD.EXE, расположен он, как правило, в директории,
называемом DBD (при установке по умолчанию). Для запуска Database Desktop
просто дважды щелкните по ее иконке.
После старта
Database Desktop выберите команду меню File|New|Table для создания новой
таблицы. Перед Вами появится диалоговое окно выбора типа таблицы, как показано
на рис.1. Вы можете выбрать любой формат из предложенного, включая различные
версии одного и того же формата.
Рис. 1:
Выпадающий список в диалоговом окне Table Type позволяет выбрать тип
создаваемой таблицы
После выбора
типа таблицы Database Desktop представит Вам диалоговое окно, специфичное для
каждого формата, в котором Вы сможете определить поля таблицы и их тип, как
показано на рис.2.
Рис. 2:
Database Desktop позволяет задать имена и типы полей в таблице
Имя поля в
таблице формата Paradox представляет собой строку,
написание которой подчиняется следующим правилам:
- Имя должно быть не
длиннее 25 символов.
- Имя не должно
начинаться с пробела, однако может содержать пробелы. Однако, если Вы
предполагаете в будущем переносить базу данных в другие форматы, разумнее
будет избегать включения пробелов в название поля. Фактически, в целях
переносимости лучше ограничиться девятью символами в названии поля, не
включая в него пробелы.
- Имя не должно
содержать квадратные, круглые или фигурные скобки [], () или {}, тире, а
также комбинацию символов "тире" и "больше" (->).
- Имя не должно быть
только символом #, хотя этот символ может присутствовать в имени среди
других символов. Хотя Paradox поддерживает точку (.) в названии поля,
лучше ее избегать, поскольку точка зарезервирована в Delphi для других
целей.
Имя поля в
таблице формата dBase представляет собой строку, написание
которой подчиняется правилам, отличным от Paradox:
- Имя должно быть не
длиннее 10 символов.
- Пробелы в имени
недопустимы.
Таким
образом, Вы видите, что имена полей в формате dBase подчиняются гораздо более
строгим правилам, нежели таковые в формате Paradox. Однако, мы еще раз хотим
подчеркнуть, что если перед Вами когда-либо встанут вопросы совместимости, то
лучше сразу закладывать эту совместимость - давать полям имена, подчиняющиеся
более строгим правилам.
Укажем еще
правила, которым подчиняется написание имен полей в формате InterBase.
- Имя должно быть не
длиннее 31 символа.
- Имя должно
начинаться с букв A-Z, a-z.
- Имя поля может
содержать буквы (A-Z, a-z), цифры, знак $ и символ подчеркивания (_).
- Пробелы в имени
недопустимы.
- Для имен таблиц запрещается
использовать зарезервированные слова InterBase.
Следующий
(после выбора имени поля) шаг состоит в задании типа поля. Типы полей очень
сильно различаются друг от друга, в зависимости от формата таблицы. Для
получения списка типов полей перейдите к столбцу "Type", а затем
нажмите пробел или щелкните правой кнопкой мышки. Приведем списки типов полей,
характерные для форматов Paradox, dBase и InterBase.
Итак, поля
таблиц формата Paradox могут иметь следующий тип (для ввода типа поля можно
набрать только подчеркнутые буквы или цифры):
Табл.
A: Типы полей формата Paradox
Alpha
|
строка длиной 1-255 байт, содержащая любые печатаемые символы
|
Number
|
числовое поле длиной 8 байт, значение которого может быть
положительным и отрицательным. Диапазон чисел - от 10-308 до 10308 с 15
значащими цифрами
|
$ (Money)
|
числовое поле, значение которого может быть положительным и
отрицательным. По умолчанию, является форматированным для отображения
десятичной точки и денежного знака
|
Short
|
числовое поле длиной 2 байта, которое может содержать только
целые числа в диапазоне от -32768 до 32767
|
Long Integer
|
числовое поле длиной 4 байта, которое может содержать целые
числа в диапазоне от -2147483648 до 2147483648
|
# (BCD)
|
числовое поле, содержащее данные в формате BCD (Binary Coded
Decimal). Скорость вычислений немного меньше, чем в других числовых форматах,
однако точность - гораздо выше. Может иметь 0-32 цифр после десятичной точки
|
Date
|
поле даты длиной 4 байта, которое может содержать дату от 1
января 9999 г. до нашей эры - до 31 декабря 9999 г. нашей эры. Корректно
обрабатывает високосные года и имеет встроенный механизм проверки
правильности даты
|
Time
|
поле времени длиной 4 байта, содержит время в миллисекундах от
полуночи и ограничено 24 часами
|
@ (Timestamp)
|
обобщенное поле даты длиной 8 байт - содержит и дату и время
|
Memo
|
поле для хранения символов, суммарная длина которых более 255
байт. Может иметь любую длину. При этом размер, указываемый при создании
таблицы, означает количество символов, сохраняемых в таблице (1-240) -
остальные символы сохраняются в отдельном файле с расширением .MB
|
Formatted Memo
|
поле, аналогичное Memo, с добавлением возможности задавать шрифт
текста. Также может иметь любую длину. При этом размер, указываемый при
создании таблицы, означает количество символов, сохраняемых в таблице (0-240)
- остальные символы сохраняются в отдельном файле с расширением .MB. Однако,
Delphi в стандартной поставке не обладает возможностью работать с полями типа
Formatted Memo
|
Graphic
|
поле, содержащее графическую информацию. Может иметь любую
длину. Смысл размера - такой же, как и в Formatted Memo. Database Desktop
"умеет" создавать поля типа Graphic, однако наполнять их можно
только в приложении
|
OLE
|
поле, содержащее OLE-данные (Object Linking and Embedding) -
образы, звук, видео, документы - которые для своей обработки вызывают создавшее
их приложение. Может иметь любую длину. Смысл размера - такой же, как и в
Formatted Memo. Database Desktop "умеет" создавать поля типа OLE,
однако наполнять их можно только в приложении. Delphi "напрямую" не
умеет работать с OLE-полями, но это легко обходится путем использования
потоков
|
Logical
|
поле длиной 1 байт, которое может содержать только два значения
- T(true, истина) или F (false, ложь). Допускаются строчные и
прописные буквы
|
+ (Autoincrement)
|
поле длиной 4 байта, содержащее нередактируемое (read-only)
значение типа long integer. Значение этого поля автоматически увеличивается
(начиная с 1) с шагом 1 - это очень удобно для создания уникального
идентификатора записи (физический номер записи не может служить ее
идентификатором, поскольку в Парадоксе таковой отсутствует. В InterBase также
отсутствуют физические номера записей, но отсутствует и поле Autoincrement.
Его с успехом заменяет встроенная функция Gen_id, которую удобней всего
применять в триггерах)
|
Binary
|
поле, содержащее любую двоичную информацию. Может иметь любую
длину. При этом размер, указываемый при создании таблицы, означает количество
символов, сохраняемых в таблице (0-240) - остальные символы сохраняются в
отдельном файле с расширением .MB. Это полнейший аналог поля BLOb в InterBase
|
Bytes
|
строка цифр длиной 1-255 байт, содержащая любые данные
|
Поля таблиц
формата dBase могут иметь следующий тип (для ввода типа поля можно набрать
только подчеркнутые буквы или цифры):
Табл.
B: Типы полей формата dBase
Character (alpha)
|
строка длиной 1-254 байт, содержащая любые печатаемые символы
|
Float (numeric)
|
числовое поле размером 1-20 байт в формате с плавающей точкой,
значение которого может быть положительным и отрицательным. Может содержать
очень большие величины, однако следует иметь в виду постоянные ошибки
округления при работе с полем такого типа. Число цифр после десятичной точки
(параметр Dec в DBD) должно быть по крайней мере на 2 меньше, чем размер
всего поля, поскольку в общий размер включаются сама десятичная точка и знак
|
Number (BCD)
|
числовое поле размером 1-20 байт, содержащее данные в формате
BCD (Binary Coded Decimal). Скорость вычислений немного меньше, чем в других
числовых форматах, однако точность - гораздо выше. Число цифр после
десятичной точки (параметр Dec в DBD) также должно быть по крайней мере на 2
меньше, чем размер всего поля, поскольку в общий размер включаются сама
десятичная точка и знак
|
Date
|
поле даты длиной 8 байт. По умолчанию, используется формат
короткой даты (ShortDateFormat)
|
Logical
|
поле длиной 1 байт, которое может содержать только значения
"истина" или "ложь" - T,t,Y,y (true, истина) или F,f,N,n
(false, ложь). Допускаются строчные и прописные буквы. Таким образом, в
отличие от Парадокса, допускаются буквы "Y" и "N"
(сокращение от Yes и No)
|
Memo
|
поле для хранения символов, суммарная длина которых более 255
байт. Может иметь любую длину. Это поле хранится в отдельном файле. Database
Desktop не имеет возможности вставлять данные в поле типа Memo
|
OLE
|
Binary
|
поле, содержащее любую двоичную информацию. Может иметь любую
длину. Данное поле сохраняется в отдельном файле с расширением .DBT. Это полнейший
аналог поля BLOb в InterBase
|
Поля таблиц
формата InterBase могут иметь следующий тип:
Табл.
C: Типы полей формата InterBase
SHORT
|
числовое поле длиной 2 байта, которое может содержать только
целые числа в диапазоне от -32768 до 32767
|
LONG
|
числовое поле длиной 4 байта, которое может содержать целые
числа в диапазоне от -2147483648 до 2147483648
|
FLOAT
|
числовое поле длиной 4 байта, значение которого может быть
положительным и отрицательным. Диапазон чисел - от 3.4*10-38 до 3.4*1038 с 7
значащими цифрами
|
DOUBLE
|
числовое поле длиной 8 байт (длина зависит от платформы),
значение которого может быть положительным и отрицательным. Диапазон чисел -
от 1.7*10-308 до 1.7*10308 с 15 значащими цифрами
|
CHAR
|
строка символов фиксированной длины (0-32767 байт), содержащая
любые печатаемые символы. Число символов зависит от Character Set,
установленного в InterBase для данного поля или для всей базы данных
(например, для символов в кодировке Unicode число символов будет в два раза
меньше длины строки)
|
VARCHAR
|
строка символов переменной длины (0-32767 байт), содержащая
любые печатаемые символы. Число символов также зависит от Character Set,
установленного в InterBase для данного поля или для всей базы данных
|
DATE
|
поле даты длиной 8 байт, значение которого может быть от 1
января 100 года до 11 декабря 5941 года (время также содержится)
|
BLOB
|
поле, содержащее любую двоичную информацию. Может иметь любую
длину. Database Desktop не имеет возможности редактировать поля типа BLOB
|
ARRAY
|
поле, содержащее массивы данных. InterBase позволяет определять
массивы, имеющие размерность 16. Поле может иметь любую длину. Однако,
Database Desktop не имеет возможности не только редактировать поля типа
ARRAY, но и создавать их
|
TEXT BLOB
|
подтип BLOB-поля, содержащее только текстовую информацию. Может
иметь любую длину. Database Desktop не имеет возможности редактировать поля
типа TEXT BLOB
|
Итак, мы
изучили все типы полей, являющиеся "родными" для Delphi.
После этого для
таблиц Paradox мы можем определить поля, составляющие первичный ключ,
причем все они должны быть в начале записи, а первое поле, входящее в ключ,
должно быть первым полем в записи. Для этого достаточно по ней дважды щелкнуть
мышкой или нажать любую клавишу.
После
создания таблицы, с ней можно связать некоторые свойства, перечень которых
зависит от формата таблицы. Так, для таблиц формата Paradox можно задать:
- Validity Checks (проверка
правильности) - относится к полю записи и определяет минимальное и
максимальное значение, а также значение по умолчанию. Кроме того,
позволяет задать маску ввода
- Table Lookup (таблица
для "подсматривания") - позволяет вводить значение в таблицу,
используя уже существующее значение в другой таблице
- Secondary Indexes (вторичные
индексы) - позволяют доступаться к данным в порядке, отличном от порядка,
задаваемого первичным ключом
- Referential
Integrity (ссылочная целостность) - позволяет задать связи между
таблицами и поддерживать эти связи на уровне ядра. Обычно задается после
создания всех таблиц в базе данных
- Password Security (парольная
защита) - позволяет закрыть таблицу паролем
- Table Language (язык
таблицы) - позволяет задать для таблицы языковый драйвер.
В
таблицах dBase не существует первичных ключей. Однако, это
обстоятельство можно преодолеть путем определения уникальных (Unique) и
поддерживаемых (Maintained) индексов (Indexes). Кроме того, для таблиц
dBase можно определить и язык таблицы (Table Language) - языковый
драйвер, управляющий сортировкой и отображением символьных данных.
Определения
дополнительных свойств таблиц всех форматов доступны через кнопку
"Define" (для таблиц InterBase данная кнопка называется "Define
Index..." и позволяет определять лишь только индекс, но не первичный ключ)
в правой верхней части окна (группа Table Properties). Причем, все эти действия
можно проделывать не только при создании таблицы, но и тогда, когда она уже
существует. Для этого используется команда Table|Restructure Table (для
открытой в данный момент таблицы) или Utilities|Restructure (с возможностью
выбора таблицы). Однако, если Вы желаете изменить структуру или добавить новые
свойства для таблицы, которая в данный момент уже используется другим
приложением, Database Desktop откажет Вам в этом, поскольку данная операция
требует монопольного доступа к таблице. Но зато все произведенные в структуре
изменения сразу же начинают "работать" - например, если Вы определите
ссылочную целостность для пары таблиц, то при попытке вставить в дочернюю
таблицу данные, отсутствующие в родительской таблице, в Delphi возникнет исключительное
состояние.
В заключение
отметим еще часто используемую очень полезную возможность Database Desktop.
Создавать таблицу любого формата можно не только "с чистого
листа", но и путем копирования структуры уже существующей таблицы. Для
этого достаточно воспользоваться кнопкой "Borrow", имеющейся в левом
нижнем углу окна. Появляющееся диалоговое окно позволит Вам выбрать
существующую таблицу и включить/выключить дополнительные опции, совпадающие с
уже перечисленными свойствами таблиц. Это наиболее легкий способ создания
таблиц.
Заключение
Итак, на
данном уроке мы познакомились со штатной утилитой, используемой для
интерактивного создания и модификации таблиц различной структуры. И хотя
управление таблицами можно осуществлять с помощью различных средств (SQL-скрипт
в WISQL, компонент TTable, компонент TQuery), данная утилита позволяет делать
это в интерактивном режиме наиболее простым способом.