Создание баз данных с помощью 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++Buil­der.

 

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, для поля CharactMemo, для поля PhotoGra­phic. В таблице Dep (см. таблицу 9.2) для поля Dep надо задать тип Alpha, а для поля ProisvLogical.

Для некоторых типов необходимо задавать размер (Size). Например, для стро­кового типа Alpha размер — это число символов.

Ключевые поля должны быть отмечены символом «*» в последней колонке. Для того чтобы поставить или удалить этот символ, надо или сделать двойной щелчок в соответствующей графе информации о поле, или выделить эту графу и нажать клавишу пробела. Если имеется несколько ключевых полей, то в таблицах Paradox они должны быть первыми. В нашем примере для таблицы Pers ключевым является поле Num, а для таблицы Dep — поле Dep.

Рис. 9.6

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> и др. Подробнее о составле­нии шаблонов вы можете узнать во встроенной справке Databa­se Desktop

Assist - эта кнопка вызывает диалоговое окно, помогающее создать шаблон Picture и занести его в список, из которого в дальней­шем его можно брать при создании новых таблиц

Рис 9.7

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.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 и пароль занесется в окно списка паролей Pass­words. Далее кнопкой 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 позволяет изменить структуру таблицы или какие-то ее характеристики. При выполнении этой команды вы попадаете в окно, аналогичное используемому ранее при разработке структуры.

Назад | Содержание | Вперёд

Hosted by uCoz