Создание
баз данных с помощью Database Desktop
Создание новой таблицы
Прежде, чем начать строить приложения, работающие с базами данных, надо иметь сами базы данных. C++Builder поставляется с примерами, имеющими немало баз данных, которыми можно воспользоваться для обучения. Базы данных Pers и Dep, фрагменты которых были приведены выше в таблицах 9.1 и 9.2 и которые будут использоваться в примерах данной и последующей глав книги, вы можете найти на диске, приложенном к этой книге. Но можно и самим создать необходимые базы данных. Причем не обязательно для этого использовать стандартные СУБД. Вместе с BDE и C++Builder поставляется программа Database Desktop (файл DBD.EXE для 16-разрядных приложений, файл DBD32.EXE для 32-разрядных приложений, файл DBDLOCAL.EXE — файл конфигурирования), которая позволяет создавать таблицы баз данных некоторых СУБД, задавать и изменять их структуру. Обычно вызов Database Desktop включен в главное меню C++Builder в раздел Tools. Если это не сделано, то полезно включить его туда с помощью команды Tools Configure Tools (см. раздел 14.2.4 главы 14). Вызовите Database Desktop. Вы увидите окно, показанное на рис. 9.4 (если в предыдущем сеансе работы с Database Desktop не была открыта какая-то таблица, то таблицы в середине окна не будет видно и разделов меню будет поменьше).
Давайте создадим с помощью Database Desktop таблицу базы данных СУБД Paradox 7. В Paradox 7 база данных — это каталог, в котором лежат таблицы — файлы с расширением .db. Поэтому прежде надо создать соответствующий каталог с помощью любой программы Windows, например, с помощью «Проводника».
Далее выполните команду File содержащую три варианта:
New в окне Database Desktop. Вам откроется подменю,
QBE Query Визуальный построитель запросов и запись этих запросов в файл
SQL File Создание запроса на SQL и запись его в файл
Table Создание новой таблицы
Выберите Table. Вам откроется небольшое диалоговое окно (рис. 9.5). В нем из выпадающего списка вы можете выбрать СУБД, для которой хотите создать таблицу. Выберите Paradox 7. Вы увидите окно, представленное на рис. 9.6. В этом окне вы можете задать структуру таблицы (поля и их типы), создать вторичные индексы, ввести диапазоны допустимых значений полей, значения по умолчанию и ввести много иной полезной информации о создаваемой таблице.
Рис. 9.5.
Окно выбора СУБД
9.2.2 Задание полей
Для каждого поля создаваемой таблицы прежде всего указывается имя (Field Name) — идентификатор поля. Он может включать до 25 символов и не может начинаться с пробела (но внутри пробелы допускаются). Затем надо выбрать тип (Type) данных этого поля. Для этого перейдите в раздел Type поля и щелкните правой кнопкой мыши. Появится список доступных типов, из которого вы можете выбрать необходимый вам. Приведем пояснения типов данных, используемых в Paradox.
Строковое поле, содержащее любые печатаемые ASCII символы. Размер — число символов.
Действительные числа от -10307 до 10308 с 15 значащими разрядами. Для выбора формата представления надо использовать Paradox.
Положительные или отрицательные числа, отличающиеся от Number формой представления и символом денежной единицы. Для выбора формата представления надо использовать Paradox.
Короткие целые числа
от -32 767 до 32 767.
[Short Long] Integer
Длинные целые числа от -2 147 483 648 до 2 147 483 647.
Числа в формате BCD (Binary Coded Decimal). Вычисления с этими числами проводятся с повышенной точностью по сравнению с другими типами чисел, но медленнее. Этот тип введен для совместимости с другими приложениями, использующими BCD. В поле типа BCD можно вводить до 15 значащих разрядов.
Значения, представляющие собой даты. Для
выбора формата представления надо использовать Paradox.
Значения, представляющие собой время. Для выбора формата представления надо использовать Paradox.
Значения, хранящие время и дату. Для выбора формата представления надо использовать Paradox. При вводе значения в поле типа Ti-mestamp пользователь может последовательно нажимать клавишу пробела, чтобы ввести текущее время и дату.
Обозначение |
Размер (Size) |
Обозначение в списке |
Пояснение |
М |
1 - 240 |
Memo |
Поля для хранения текстов
неограниченной длины. Тексты
хранятся в отдельных файлах .mb.
Указываемый размер — это число первых
символов текста, хранящихся
непосредственно в таблице. Просмотр
полей Memo возможен в Paradox или в
приложениях C++Buil-der. |
F |
0 - 240 |
Formatted Memo |
Поля для хранения
форматированных текстов
неограниченной длины. Тексты
хранятся в отдельных файлах .mb.
Указываемый размер — это число
первых символов текста, хранящихся
непосредственно в таблице. Просмотр
полей Formatted Memo
возможен в Paradox или в приложениях C++Builder. |
G |
|
Graphic |
Изображения из файлов в
форматах .bmp, •рсх,
.tif, ,,gif или .eps. Database Desktop преобразует их в формат .BMP. Просмотр
полей Graphic
возможен в Paradox или в приложениях C++Builder. |
0 |
|
OLE |
Данные типа OLE -
изображения, звуки, документы. Database Desktop не
поддерживает поля этого типа.
Просмотр полей OLE возможен
в Paradox
или в приложениях C++Builder. |
L |
|
Logical |
Логические поля. По
умолчанию возможные значения — true и false.
При вводе данных пользователь может
ввести только первый символ из
возможных значений. |
+ |
|
Auto
increment |
Автоматически
увеличивающееся на 1 длинное целое.
Только для чтения. При удалении
записей значения полей в оставшихся
записях не изменяются. |
В |
|
Binary |
Данные, хранящиеся в
отдельных двоичных файлах .mb, которые
Database Desktop не интерпретирует.
В файлах могут храниться звуки и
любые другие данные. |
Y |
1 - 255 |
Bytes |
Данные, которые Database Desktop
не интерпретирует. В отличие от
полей Binary хранятся
в таблице, а не во внешних файлах. |
В нашем примере таблицы Pers (см. таблицу 9.1) для поля Num целесообразно выбрать тип Autoincrement, обеспечивающий уникальность каждой записи. Для полей Dep, Fam, Nam и Par необходимо задать тип Alpha, для поля Year_b — тип Short, для поля Sex — Logical, для поля Charact — Memo, для поля Photo — Graphic. В таблице Dep (см. таблицу 9.2) для поля Dep надо задать тип Alpha, а для поля Proisv — Logical.
Для некоторых типов необходимо задавать размер (Size). Например, для строкового типа Alpha размер — это число символов.
Ключевые поля должны быть отмечены
символом «*» в последней колонке.
Для того чтобы поставить или удалить
этот символ, надо или сделать двойной
щелчок в соответствующей графе
информации о поле, или выделить эту
графу и нажать клавишу пробела. Если
имеется несколько ключевых полей, то в
таблицах Paradox
они должны быть первыми. В нашем
примере для таблицы Pers ключевым является поле
Num,
а для таблицы Dep — поле
Dep.
9.2.3 Задание свойств таблицы
Теперь обратите внимание на правую часть окна (рис. 9.6). В нем задаются
свойства таблицы (Table properties). Вверху имеется выпадающий список с рядом разделов.
9.2.3.1
Validity
Checks
— проверка правильности значений
Начнем с первого из них: Validity Checks — проверка правильности значений. Вид правой части окна при выборе этого раздела показан на рис. 9.6 и может несколько изменяться в зависимости от того, какой тип у поля, выделенного курсором. Вы можете задать следующие характеристики поля:
Required Field
Этим индикатором отмечаются те поля, значения которых обязательно должны содержаться в каждой записи. Для нашего
примера такими полями, вероятно, должны быть поля Fam, Nam и Par
Minimum - минимальное значение. Это свойство полезно задавать для числовых полей. В нашем примере надо задать минимальное значение для поля Year_b
Maximum - максимально значение. Это свойство полезно задавать для числовых полей. В нашем примере надо задать максимальное значение для поля Year_b
Default value- значение по умолчанию. Это свойство полезно задавать для числовых и логических полей. В нашем примере полезно задать значение по умолчанию для поля Year_b и обязательно надо задать значение по умолчанию для поля Sex (иначе у пользователя могут возникнуть проблемы при вводе информации)
Picture - шаблон для ввода данных. Например, можно задать шаблон номера телефона «###-##-##i> и др. Подробнее о составлении шаблонов вы можете узнать во встроенной справке Database Desktop
Assist - эта кнопка вызывает диалоговое окно, помогающее создать шаблон Picture и занести его в список, из которого в дальнейшем его можно брать при создании новых таблиц
9.2.3.2
Table
Lookup
— таблица просмотра
Следующий раздел в выпадающем списке свойств таблицы в правом верхнем углу экрана на рис. 9.6: Table Lookup — таблица просмотра. Этот раздел позволяет связать с полем данной таблицы какое-то поле другой, просматриваемой таблицы, из которого будут браться допустимые значения. При выборе Table Lookup на экране появляется кнопка Define — определить. При ее нажатии открывается диалоговое окно, показанное на рис. 9.7. В нем вы можете для данного поля задать таблицу просмотра (Lookup table). При этом вы можете воспользоваться выпадающим списком драйверов или псевдонимов
(Drive or Alias) и кнопкой просмотра (Browse). A затем кнопкой со стрелкой занести поле просматриваемой таблицы, из которого будут браться допустимые значения. В нашем примере пока все это сделать невозможно, поскольку еще не создана вторая таблица Dep. Однако после того как она будет создана, полезно вернуться к таблице Pers и для поля Dep задать таблицу Dep как просматриваемую и ее поле Dep как множество возможных значений. Это предотвратит ошибочное появление в таблице Pers каких-то значений подразделений, не содержащихся в таблице Dep.
9.2.3.3 Secondary Indexes — вторичные индексы
Следующий раздел в выпадающем списке свойств таблицы: Secondary Indexes — вторичные индексы. Этот раздел позволяет создать необходимые для дальнейшей работы вторичные индексы, (вторичный индекс создается по ключевым полям). Например, для дальнейшего использования нашей таблицы Pers полезны, будут следующие индексы:
Имя индекса Поля Пояснение
fio Fam, Упорядочивание таблицы сотрудников по алфавиту.
Nam,
Par
depfio Dep, Fam, Упорядочивание таблицы по подразделениям, а
Nam, Par внутри каждого подразделения упорядочивание сотрудников по алфавиту.
year Year_b Упорядочивание таблицы по году рождения сотрудников.
Чтобы создать новый вторичный индекс, нажмите кнопку Define — определить. Откроется диалоговое окно, представленное на рис. 9.8. В его левом окне Fields содержится список доступных полей, в правом окне Indexed fields вы можете подобрать и упорядочить список полей, включаемых в индекс. Для переноса поля из левого окна в правое надо выделить интересующее вас поле или группу полей и нажать кнопку со стрелкой вправо. Стрелками Change order (изменить последовательность) можно изменить порядок следования полей в индексе.
Панель радиокнопок Index Options (опции индекса) позволяют установить следующие характеристики:
Unique Установка этой опции не позволяет индексировать таблицу, если в ней находятся дубликаты совокупности включенных в индекс полей. Например, установка этой опции для индекса fio не допустила бы наличия в таблице сотрудников с совпадающими фамилией, именем и отчеством
Descending При установке этой опции таблица будет упорядочиваться по степени убывания значений (по умолчанию упорядочивание производится по степени нарастания значений)
Case Sensitive При установке этой опции будет приниматься во внимание регистр, в котором введены символы
Maintained Если эта опция установлена, то индекс обновляется при каждом изменении в таблице. В противном случае индекс обновляется только в момент связывания с таблицей или передачи в нее запроса. Это несколько замедляет обработку запросов. Поэтому полезно включать эту опцию для обновляемых таблиц. Если таблица используется только для чтения, эту опцию лучше не включать.
После того, как индекс
сформирован, щелкаете на кнопке ОК.
Открывается окно (рис. 9.9), в котором
вы задаете имя индекса.
9.2.3.4
Referential
Integrity
— целостность на уровне ссылок
Следующий
раздел в выпадающем списке свойств
таблицы в правом верхнем углу экрана на
рис.
9.6: Referential Integrity — целостность на уровне ссылок. Речь идет о способах, позволяющих обеспечить постоянные связи между данными отдельных таблиц. Если устанавливается целостность на уровне ссылок между двумя таблицами, одна из которых — головная (родительская), а другая — вспомогательная (дочерняя), то во вспомогательной таблице указывается поле или группа полей, которые могут брать свои значения только из ключевого поля (или полей) головной таблицы. Подобные связи допустимы не для всех типов таблиц, но в Paradox они предусмотрены. Прежде, чем создавать Referential Integrity, надо иметь обе связываемые таблицы — родительскую и дочернюю. Если бы мы уже имели в нашем примере обе таблицы — Pers и Dep, мы могли бы задать целостность, связав поле Dep таблицы Pers с ключевым полем Dep головной таблицы Dep. Чтобы ввести подобную связь, надо сначала установить в качестве рабочего каталог, содержащий обе таблицы (это делается командой File | Working Directory). Затем надо открыть дочернюю таблицу Pers (команда File | Open), войти в режим ее реструктуризации (команда Table | Restructure) и в окне Table properties выбрать раздел Referential Integrity. Затем щелкнуть на кнопке Define, и перед вами откроется диалоговое окно, представленное на рис. 9.10. В его левой панели Fields вы можете выбрать поле или группу полей, связываемых с ключевыми полями головной таблицы, и кнопкой со стрелкой перенести их в список дочерних полей Child fields. Затем в правой панели Table вы можете указать головную панель (если ее там нет, значит, вы неверно установили рабочий каталог) и кнопкой со стрелкой перенести в список ключей родительской таблицы Parent's key. Группа радиокнопок Update rule определяет, что будет, если в головной таблице вы удалите или измените, значение ключевого поля, с которым связаны какие-то записи во вспомогательной таблице. Если вы установили опцию Prohibit, то Database Desktop просто не разрешит подобную операцию. Если же вы установили опцию Cascade, то при смене значения ключевого поля в головной таблице аналогичные изменения автоматически произойдут в записях дочерней таблицы. А если вы удалите запись в головной таблице, содержащую некоторое значение ключевого поля, то во вспомогательной таблице автоматически удалятся все записи, связанные с этим значением ключевого поля.
Рис. 9.10.
Окно установления
целостности на уровне ссылок
Установка индикатора Strict Referential Integrity в нижней части диалогового окна не позволит ранним версиям Paradox (в частности, версиям Paradox для DOS) открыть и испортить таблицы, в которых введена целостность на уровне ссылок.
Когда вы провели все необходимые операции, щелкните на кнопке ОК и в открывшемся окне (рис. 9.11) введите имя созданной ссылки.
Рис.9.11.
Ввод имени созданной ссылки
Рис. 9.12 Ввод
головного пароля
Рис. 9.13 Ввод
вспомогательного пароля
9.2.3.5
Password Security — пароли
доступа
Следующий раздел в выпадающем списке свойств таблицы в правом верхнем углу экрана на рис. 9.6: Password Security — пароли доступа. Paradox позволяет задать для таблицы пароли и для каждого из них определить разрешенные операции как для таблицы в целом, так и для отдельных ее полей. Щелчок на копке Define откроет вам окно, показанное на рис. 9.12. В нем вы можете ввести главный пароль (окно Master password), подтвердить его (окно Verify master password), после чего щелчком на копке Auxiliary Passwords (вспомогательные пароли) открыть новое диалоговое окно (рис. 9,13), позволяющее ввести вспомогательные пароли и определить правила доступа по ним.
В окне Current Password (текущий пароль) вы указываете пароль (он совершенно не обязательно должен совпадать с тем, под которым вы вошли в это окно), для которого намереваетесь сформировать правила доступа. В группе радиокнопок Table Rights (права доступа к таблице) вы можете определить общий уровень доступа к таблице:
All Допускаются любые операции, вплоть до изменения ее структуры, удаления таблицы, изменения и удаления паролей
Insert & Delete Допускаются любые операции с записями (редактирование, вставка, удаление), но не разрешается изменение структуры таблицы и ее удаление
Data Entry Допускается редактирование данных и вставка записей, но запрещено удаление записей и не разрешается изменение структуры таблицы и ее удаление
Update Допускается только просмотр таблицы и изменение не ключевых полей
Read Only Допускается
только просмотр таблицы
верхнем юляет за-операции пке Define 1вный па-юсле чего
В окне Field Rights (права доступа к полю) вы можете определить дополнительные права доступа к каждому полю, но не превышающие заданный уровень доступа к таблице:
All Дает все права доступа к полю, предусмотренные заданными правами доступа к таблице
Read Only Позволяет только читать данные этого поля
None He позволяет ни наблюдать, ни редактировать данное поле
После того, как вы установили все права доступа для данного вспомогательного пароля, щелкните на кнопке Add и пароль занесется в окно списка паролей Passwords. Далее кнопкой New вы можете начать задание нового вспомогательного пароля. Кнопкой Change вы можете изменить выделенный в списке ранее введенный вспомогательный пароль или удалить его, щелкнув после кнопки Change на кнопке Delete.
9.2.3.6 Table Language — язык таблицы
Этот раздел в выпадающем списке Table Properties позволяет задать (если он не задан) или переопределить (кнопкой Modify) язык таблицы, установленный по умолчанию в драйвере данной СУБД с помощью программы BDE Administrator (см. раздел 9.3.3). Правильный выбор языка определяет, будут ли нормально читаться в таблице русские тексты.
9.2.3.7 Dependent Tables — зависимые таблицы
Этот последний раздел в выпадающем списке Table Properties позволяет просмотреть список зависимых таблиц, связанных с данной целостностью на уровне ссылок Referential Integrity.
9.2.4 Завершение создания таблицы
После того, как все необходимые данные о структуре таблицы внесены, щелкните на кнопке Save as (сохранить как) и перед вами откроется окно (рис. 9.14), напоминающее обычный диалог сохранения в файле, от обычного это окно отличается выпадающим списком Alias. Этот список содержит псевдонимы различных баз данных (о них пойдет речь позднее), из которого вы можете выбрать базу данных, в которую будете сохранять свою таблицу. Если вам не надо сохранять таблицу в одной из существующих баз данных, то вы можете воспользоваться обычным списком Сохранить в верхней части окна. При этом вы с помощью обычной быстрой кнопки можете создать новую папку (каталог). Вспомните, что для Paradox база данных — это каталог, в котором сохраняется таблица.
Рис. 9.14 Сохранение таблицы
Внизу окна на рис. 9.14 имеются еще две опции. Первая из них — Display Table обеспечивает немедленное автоматическое открытие таблицы после ее сохранения. Вторая опция — Add Data to New Table доступна в случае, если производилось не создание таблицы, а изменение ее структуры. Эта опция обеспечивает, что в измененную структуру из прежней таблицы перенесутся все данные, которые вписываются в новую структуру.
Мы рассмотрели создание таблицы Paradox. Для других СУБД диалоги отличаются от рассмотренного и учитывают возможности различных СУБД. Однако эти отличия касаются только отдельных деталей и рассматривать их мы не будем.
9.2.5 Изменение структуры и заполнение таблицы с помощью Database Desktop
После того, как вы создали таблицу, вы можете ее открыть командой File | Open. Впрочем, если при сохранении структуры таблицы вы использовали описанную выше опцию Display Table, то таблица откроется автоматически. В обоих случаях вы увидите окно вида, представленного ранее на рис. 9.4. С помощью разделов меню Table вы можете смотреть содержимое таблицы (команда Table | View Data) или редактировать его (команда Table Edit Data). Впрочем, вряд ли это целесообразно делать. Программа Database Desktop не настраивается на русский язык, так что все, вводимое русскими буквами, выглядит абракадаброй. Впрочем, в дальнейшем при использовании такой таблицы в приложении все надписи будут выглядеть нормально.
Команда Table | Info Structure позволяет просмотреть информацию о структуре таблицы, а команда Table | Restructure позволяет изменить структуру таблицы или какие-то ее характеристики. При выполнении этой команды вы попадаете в окно, аналогичное используемому ранее при разработке структуры.
Назад | Содержание | Вперёд