|
На данном уроке мы изучим, как
создавать таблицы базы данных с
помощью утилиты 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. Вы
можете выбрать любой формат из
предложенного, включая различные
версии одного и того же формата.
После выбора типа таблицы Database
Desktop представит Вам диалоговое
окно, специфичное для каждого
формата, в котором Вы сможете
определить поля таблицы и их тип,
как показано на рис.2.
Имя поля в таблице формата 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)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 |
поле,
содержащее OLE-данные (Object Linking and
Embedding) - образы, звук, видео,
документы - которые для своей
обработки вызывают создавшее
их приложение. Может иметь
любую длину. Это поле также
сохраняется в отдельном файле.
Database Desktop “умеет” создавать
поля типа OLE, однако наполнять
их можно только в приложении.
Delphi “напрямую” не умеет
работать с 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), данная утилита
позволяет делать это в
интерактивном режиме наиболее
простым способом.
[ Предыдущий урок |
Содержание | Следующий урок ]
|