Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Запуск Microsoft Visual FoxPro




СОЗДАНИЕ БАЗЫ ДАННЫХ

Для запуска Microsoft Visual FoxPro на вашем компьютере нажмите

кнопку «Пуск» и выберите в открывшемся главном меню пункт «Все программы». В списке программ найдите «Microsoft Visual FoxPro 9» – FoxPro установлен там по умолчанию. Щелчок левой кнопкой мыши даст следующую картинку (рис. 1.1).

Рис. 1.1. Главное окно Microsoft Visual Fox Pro 9.0

На экране появится главное окно Visual FoxPro, окно менеджера панели задач (Task Pane Manager), в нижней части которого содержится список ранее открывавшихся баз данных, и командное окно (Command) с последними, набранными в нем командами.

Команду Visual FoxPro можно выполнить, набрав ее в окне Command и нажав на клавишу Enter. Для повторного выполнения команды поместите курсор на строку с командой и нажмите Enter еще раз.

Так как в окне Command допускается редактирование, можно изменить команду инструментами редактирования, доступными в Visual FoxPro. Эти инструменты позволяют редактировать, вставлять, удалять, вырезать и помещать текст в окне Command. Преимущество использования окна Command состоит в немедленном выполнении инструкций. Нет необходимости сохранять файл и запускать его как программу.

Кроме того, в окне Command сохраняются в виде команд все действия, производимые с меню и диалоговыми окнами. Вы можете скопировать и разместить эти команды в программе Visual FoxPro. После этого программу можно запускать сколько угодно раз, избегая многократного повтора одних и тех же действий.

Для комфортной работы создайте на рабочем столе ярлык Microsoft Visual FoxPro 9, в его свойствах в качестве рабочей папки укажите ту, в которой будет располагаться разрабатываемое приложение и данные. В нашем примере – это папка Real Estate. Не устраивайте в ней «свалку», разместив одновременно все объекты приложения: таблицы, индексы, контейнер базы данных, формы, отчеты, классы и т. д.

Советую все объекты в этой папке расположить структурировано. Примерный вид папки c приложением может быть таким (рис. 1.2).

Рис. 1.2. Состав папки Real Estate

BOOK – папка, содержащая формы справочников.

CLASS – папка, содержащая пользовательские классы.

DBF – папка с данными (контейнер, таблицы, индексные файлы, поля примечаний и т. д.).

DECKTOP – в этой папке расположены картинки, используемые для оформления главного окна программного комплекса.

FORM – папка, содержащая главные формы приложения.

HELP – папка с файлами контекстуально-зависимой помощи, вызываемой при нажатии клавиши F1.

ICO – иконки для оформления интерфейса вашего приложения.

INSTALL – папка, содержащая файлы дистрибутива для инсталляции готового программного комплекса на клиентский компьютер.

PICTURE – фотографии зданий (в данном примере).

REPORT – папка, содержащая отчеты Visual FoxPro.

USER – папка, содержащая информацию о пользователях и паролях для работы с программным комплексом. В ней расположена фактически одна таблица. Это связано с тем, что в Visual FoxPro отсутствует система защиты от несанкционированного доступа средствами СУБД. Такое выделение отдельной папки позволит обеспечить защиту комплекса средствами операционной системы.

 

Создание базы данных Visual FoxPro

Перейдем к конкретным действиям по созданию базы данных. Запустите Microsoft Visual FoxPro на вашем компьютере и воспользуйтесь одним из трех способов.

В окне менеджера панели задач (Task Pane Manager) на его первой вкладке Start выберите ссылку New Database. На экране дисплея появится окно Create. Перейдите в папку DBF, в которой мы будем хранить данные, задайте имя базы данных - Real Estate. Нажмите кнопку Сохранить. База данных получила свое название и законное место на жестком диске.

В главном меню Visual FoxPro щелкните пункт File и выберите команду New. В открывшемся окне щелкните радиокнопку Database и нажмите кнопку New file. На экране дисплея появится окно Create. Перейдите в папку DBF, в которой мы будем хранить данные, задайте имя базы данных - Real Estate. Нажмите кнопку Сохранить.

Введите в командном окне (Command) команду Create Database. На экране дисплея появится окно Create. Перейдите в папку DBF, в которой мы будем хранить данные, задайте имя базы данных - Real Estate. Нажмите кнопку Сохранить.

Теперь в папке DBF появилось три файла - так называемый контейнер базы данных. Это файлы:

Real Estate.dbc Real Estate.dct Real Estate.dcx

Отличительной особенностью Microsoft Visual FoxPro является то, что один объект этой СУБД размещается в нескольких файлах (от одного до трех). Расширения других файлов, используемых Visual FoxPro, будут рас­смотрены нами позднее в соответствующих главах.

 

Создание таблиц

Visual FoxPro 9.0 позволяет создавать как таблицы, входящие в базу данных, так и свободные таблицы. Это дань истории развития продукта -черта, свойственная только ему. Так уж сложилось со времен появления Visual FoxPro 3.0. Воспользуемся ей.

Будут применяться таблицы обоих типов. Свободная (вне базы данных) таблица User даст возможность отрегулировать вопрос о правах доступа к приложению (рис. 1.2), а все остальные, размещенные в контейнере Real Estate, представляют реляционную базу данных.

Существует несколько способов создания таблиц в Microsoft Visual FoxPro:

- с помощью мастера таблиц;

- с использованием конструктора таблиц;

- путем импорта данных из внешнего файла в текущую базу данных;

4) создание их в текущей базе данных, связанных с таблицами внешнего файла.

Первый способ - для новичков в работе с базами данных, испытывающих сильное желание немедленно создать свою первую таблицу.

 

Рис. 1.5. Работа в главном меню Visual FoxPro 9.0 с базой данных

Во всех трех случаях увидим окно конструктора таблицы. Это форма с тремя вкладками: Fiels, Indexes и Table.

• Fields (Поля) - поля создаваемой таблицы и условия достоверности вводимых данных на уровне поля;

• Indexes (Индексы) - индексы создаваемой таблицы;

• Table (Таблица) - условия достоверности вводимых данных на уровне записи, а также триггеров добавления, удаления и модификации.

Первая вкладка (рис. 1.6) используется при определении полей таблицы. Она предназначена для ввода названия полей, типа данных и ширины поля. При занесении числовых полей задается количество десятичных знаков. Кроме основных параметров для каждого поля на этой вкладке задаются дополнительные параметры, которые помогут вам при сопровождении программного комплекса. Обратите особое внимание на ячейку Field comment. Не оставляйте ее пустой! Опишите подробно назначение поля таблицы. Позже обязательно поймете важность этого совета.

Имена полей должны содержать не более 255 символов и могут включать любые комбинации символов за исключением точки, восклицательного знака и квадратных скобок. Используйте в именах полей только латинские буквы при общей длине имени до 10 символов включительно. В этом случае у Вас не будет проблем с конвертацией таблиц Microsoft Visual FoxPro в таблицы других СУБД (например, Microsoft SQL Server).

Каждое поле таблицы должно иметь уникальное имя, но в различных таблицах можно использовать одинаковые имена полей. В табл. 1.1 приведены основные типы данных полей Microsoft Visual FoxPro 9.0.

 

Таблица 1.1

Типы данных полей таблиц Microsoft Visual FoxPro 9.0

 

Вид данных Тип данных Описание
Текстовый Character Текст или числа, не требующие проведения расчетов. Максимальная длина - 255 символов. По умолчанию длина текстового поля устанавливается равной 10 символов
  Character 1 Аналогичен Character. Используется в том случае, (binary) | если не требуется учитывать кодовую страницу
  Varchar 1Аналогичен Character. Для этого типа не происходит заполнение свободных мест незначащей информацией
  Varbinary Шестнадцатеричные значения
Дата и время Datetime Любая дата от 01.01.0001 до 31.12.9999 и время от 00.00.00 a.m. до 11.59.59 p.m.
Дата Date Любая дата от 01.01.0001 до 31.12.9999
Денежный Currency Позволяет выполнять расчеты с точностью до 15 знаков в целой и до 4 знаков в дробной части
Логический Logical Содержит значение True (.T.) или False (.F.) Истина или ложь
Числовой Integer Целые числа от -2147483647 до 2147483648
    Integer (AutoInc) Счетчик. Уникальные, последовательно возрастающие числа, автоматически вводящиеся в таблицу при добавлении каждой новой записи
    Numeric Десятичные данные с фиксированной точкой
  Float Десятичные данные с плавающей точкой простой точности
    Double Десятичные данные с плавающей точкой высокой точности
Двоичное поле произвольной длины General Включает рисунок, фотографию, звукозапись, диа­граммы, векторную графику, форматированный текст и т. п.
Текстовое поле произвольной длины Мемо Поля типа МЕМО предназначены для хранения больших текстовых данных. Длина поля может достигать 64 Кб. Поле не может быть ключевым или индексированным
Двоичный Blob Двоичные символы

В правой части первой вкладки Fields конструктора таблицы (рис. 1.6) также расположены ячейки, позволяющие задать для каждого поля созда­ваемой таблицы свойства, которые будут задействованы при вводе данных.

Format (Формат) - задает формат отображения данных в окне Browse, отчетах и формах.

Input mask (Маска ввода) - задает шаблон для ввода данных.

Caption (Заголовок) - определяет заголовок поля.

Rule (Условие) - проверка правильности ввода данных на уровне поля создаваемой таблицы.

Message (Сообщение) - текст сообщения, которое появится на экране дисплея при неправильном вводе данных в поле.

Default value (Значение по умолчанию) - значение, вводимое в поле по умолчанию.

Display library (Показать библиотеку) - определяет имя файла библиотеки классов.

Display class (Показать класс) - определяет имя класса из выбранной библиотеки классов.

Next Value (Начальное значение) - задает начальное значение счетчика. Доступно только для поля IntegerInc.

Step (Шаг) - приращение счетчика. Доступно только для поля Integerlnc.

 
 

Создадим нашу первую таблицу Building. Ее окончательная структура взята из табл. 2.7. Имейте в виду, что имя поля и его описание вводится с клавиатуры, а тип данных выбирается из списка.

Рассмотрим действия по созданию таблицы подробнее (рис. 3.6).

1. Введите в первую колонку имя первого поля: Street и нажмите клавишу <Tab>. Курсор переместится во вторую колонку Type. По умолчанию будет назначен тип Character длиной 10 символов.

2. Раскройте список типов данных при помощи мыши. Выберите тип Numeric и нажмите клавишу <Tab>.

3. Заполните колонки Width (Число знаков) и Decimal (Число знаков после десятичной точки). Для ссылки на номер улицы используем четыре десятичных знака. Это дает возможность работать с 9999 улицами, что вполне достаточно для города с миллионным населением. Кстати, в Хабаровске 1248 улиц, переулков, проездов, шоссе, кварталов, площадей, бульваров и т. д.

4. Обязательно заполните ячейку Field comment. Не ленитесь, пишите подробнее!

5. Повторите шаги 1-4 для всех оставшихся полей таблицы. Остальные поля первой вкладки конструктора таблиц на этом этапе можно не заполнять. После занесения данных обо всех полях таблицы просто закройте окно конструктора таблиц. Появится диалоговое окно «Сохранение», запрашивающее подтверждение на сохранение структуры таблицы (рис. 1.7).

Щелкните по кнопке «Yes». Наша первая таблица появится в окне базы данных, а в папке DBF - два файла: Building.dbf (сама таблица) и Building.fpt (поле Memo). Заполнять сейчас созданную таблицу начинающему пользователю категорически не рекомендуется, да так и не делается! Посмотрите на содержимое табл. 1.2. Это не отдельная таблица, она будет связана с другими таблицами базы данных Real Estate. Что в ней хранится - пока загадка. Уверен, что большинство цифр Вам просто непонятны.

Таблица 1.2

Информация, содержащаяся в связанной таблице

 

Street House Flat Storey Rooms Square Dwell Branch Account
          60,8      
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 

 

Аналогичным образом создадим все наши таблицы, разработанные в разд. 2: Flat, Owners, Account, Street, District и Wall.

 

3.4. Создание первичных ключей и индексов

Одним из основных требований, предъявляемых к СУБД, является возможность быстрого поиска требуемых записей. В реляционных СУБД для реализации этого требования служат индексы. Индекс очень похож на алфавитный указатель в книге. Например, у вас в руках книга по Microsoft Visual FoxPro и вы хотите узнать о том, что написано в ней об индексах. Загляните в конец книги и найдите в предметном указателе слово «индекс». Так как указатель отсортирован по алфавиту, вы без труда найдете нужное слово и ссылки на страницы, где оно встречается в книге. Индекс работает с таблицей по такому же принципу. Он содержит отсортированные значения указанного поля таблицы и ссылки на номера записей таблицы, где эти значения находятся. При поиске записи система управления базами данных сначала просматривает индекс, что занимает совсем немного времени, так как для этого используется специальный алгоритм, находит ссылку на номер записи и по ней - нужную строчку в таблице. Таким образом, отпадает необходимость последовательного просмотра всех записей в таблице.

Индекс можно построить по полю почти любого типа. К счастью, пользователь не обязан знать, за счет чего достигается такое огромное увеличение скорости поиска. Достаточно создать индекс, а система Visual FoxPro позаботится обо всем остальном.


Посмотрим на конечный результат (рис. 1.8). На нем представлены индексы таблицы Flat. Их три: Flat Id (Primary), Account (Candidate) и Address (Regular).

Хочу предостеречь вас от типичной ошибки начинающего разработчика - создания индексов по всем полям таблицы для достижения максимальной скорости поиска в сложных запросах. Во-первых, в этом просто нет необходимости, а во-вторых - возникнет серьезная задержка при добавлении записей в таблицу, так как системе придется перестраивать большое число индексов одновременно.

Простой первичный ключ - это индекс, созданный по ключевому полю таблицы (Тип Visual FoxPro - Primary).

Составной первичный ключ - это индекс, созданный по ключевой связке полей таблицы (Тип Visual FoxPro также - Primary).

Первичный ключ у любой таблицы может быть только один. Этого требует теория нормализации. Кроме первичного ключа таблица может иметь любое количество обычных индексов (Тип Visual FoxPro - Regular). Среди них могут быть и уникальные, не допускающие повторяющихся значений. Их принято называть индексы-кандидаты на роль первичного ключа (Тип Visual FoxPro - Candidate). В нашем примере такой индекс есть. Загляните в таблицу Flat (рис. 2.4) и обратите внимание на поле Account (номер лицевого счета квартиросъемщика). Это поле однозначно определяет положение любой квартиры в таблице.

А теперь о создании ключей и обычных индексов с самого начала и по порядку.

Создание простого первичного ключа. Создадим простой первичный ключ для таблицы Street (улицы). Ключевое поле, однозначно определяющее положение любой улицы в таблице улиц, также носит название Street (рис. 2.1).

1.
Откройте таблицу Street в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице Street правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

2. Появится окно конструктора таблиц. Перейдите на вторую вкладку с названием Indexes (рис. 1.9). Увидите таблицу. В ней шесть колонок: Order, Name, Type, Expression, Filter и Collate.

3. Во вторую колонку введите название индекса - street.

4. Нажмите клавишу Tab для перехода в третью колонку Type.

5. Откройте при помощи мыши поле со списком. В нем четыре значения: Primary, Candidate, Binary и Regular. Выберите первое - Primary.

6. В четвертую колонку введите название поля, по которому создается индекс (первичный ключ в данном случае) - street. Остальные колонки заполнять не требуется.

7. Щелкните мышью по кнопке OK. Visual FoxPro попросит подтвердить сделанные изменения. В появившемся окне выберите кнопку Yes.

Создание составного первичного ключа. Создадим составной первичный ключ для таблицы Owners (Проживающие). Связка ключевых полей, однозначно определяющая положение любой записи в этой таблице, выглядит так: Street+House+Flat+ Number.

1. Откройте таблицу Owners в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице Owners правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

2. Появится окно конструктора таблиц. Перейдите на вторую вкладку с названием Indexes (рис. 1.10). Увидите таблицу. В ней шесть колонок: Order, Name, Type, Expression, Filter и Collate.

 

Рис. 1.10. Таблица Owners в конструкторе таблиц (вторая вкладка Indexes)

3. Во вторую колонку введите название индекса - Ownersid.

4. Нажмите клавишу Tab для перехода в третью колонку Type.

5. Откройте при помощи мыши поле со списком. В нем четыре значения: Primary, Candidate, Binary и Regular. Выберите первое, как и в предыдущем случае - Primary.

6. В четвертую колонку с названием Expression необходимо ввести выражение для составного индекса. Воспользуемся построителем выражений. Для его запуска сделайте щелчок мышью по кнопке Q. Она расположена справа


7. Щелкните мышью по кнопке OK. Visual FoxPro попросит подтвердить сделанные изменения. В окне выберите кнопку Yes.

Создание обычного индекса по полю таблицы. Порядок создания как простого индекса (Regular), так и уникального (индекса-кандидата Candidate) - один и тот же и практически ничем не отличается от создания первичного ключа. Просто в пункте номер пять предыдущей инструкции выберите соответствующее значение (Regular или Candidate). Все индексы одной таблицы Visual FoxPro хранит в одном CDX-файле.

Контроль правильности ввода данных

Информация, накапливаемая в базе данных, должна обладать абсолютной достоверностью. Несоблюдение этого правила может порой привести к печальным последствиям. Например, отдел комплектации не сделает вовремя заказ на поставку необходимых материалов, владелец квартиры получит квитанцию для оплаты налога на автотранспорт, которого у него никогда не было, а пенсионеру будет отказано в выдаче страхового полиса и т. д. Даже самые опытные пользователи, заполняющие таблицы, могут допустить ошибку и занести неверные данные, что, скорее всего, и произошло в перечисленных выше случаях.

Разработчик программного комплекса просто обязан помочь пользователю избежать большинства ошибок при вводе информации. Ниже приведены две возможности, которые любезно предоставили в наше распоряжение авторы Microsoft Visual FoxPro 9.0.

Добавление условия на значение поля позволяет проверить корректность данных только в одном поле, независимо от значений других полей. Рассмотрим пример, в котором на номер района наложено ограничение. Этот номер не может находиться вне диапазона от 1 до 9, даже если пользователь этого очень захочет (рис. 1.12).

 

 

Рис. 1.12. Добавление условия на значение поля district (номер района)

Чтобы добавить условие на значение поля таблицы District (районы): 1. Откройте таблицу District в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице District правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

2. Появится окно (рис. 1.13) конструктора таблиц (вкладка Fields).

Запустите построитель выражений для ячейки Rule, выбрав пиктограмму U. Наберите на клавиатуре: District>0.And. District<10 и щелкните по кнопке OK.

Запустите построитель выражений для ячейки Message, выбрав пиктограмму Q. Наберите на клавиатуре: «Номер района должен быть от 1 до 9» и щелкните по кнопке OK. Закройте окно конструктора таблицы и подтвердите сохранение сделанных изменений.

При попытке ввода номера района, который не находится в пределах диапазона 1-9, получим сообщение об ошибке и отказ программного комплекса от записи в таблицу сделанных изменений (рис. 1.15).

Рис. 1.13. Сообщение при ошибочных действиях оператора

Добавление условия на значение записи. Позволяет сравнить значения нескольких полей сразу. Рассмотрим пример, в котором производится проверка соответствия общей площади квартиры сумме составляющих: жилой, вспомогательной и приведенной площади балкона.

Для того чтобы добавить условие на значение записи:

Откройте таблицу Flat в режиме конструктора. Для этого в окне базы данных Real Estate (рис. 2.1) щелкните по таблице Flat правой кнопкой мыши. Появится меню. В нем пять пунктов. Выберите из них четвертый с названием Modify.

Появится окно конструктора таблиц (первая вкладка Fields).

Перейдите на третью вкладку Table (рис. 1.14).

Запустите построитель выражений для ячейки Rule, выбрав пиктограмму □. Наберите на клавиатуре: squareflat = dwell+ branch+ balcony и щелкните по кнопке OK.

Запустите построитель выражений для ячейки Message, выбрав пиктограмму О. Наберите на клавиатуре: "Общая площадь квартиры не равна сумме составляющих" и щелкните по кнопке OK. Закройте окно конструктора таблицы и подтвердите сохранение сделанных изменений.


В случае появления этой ошибки при работе программного комплекса появится сообщение (рис. 1.15).

Рис. 1.15. Сообщение об ошибке

 

Создание связей между таблицами

Подведем итоги. База данных имеется. Таблицы доведены до третьей нормальной формы и помещены в базу. Первичный ключ есть у каждой таблицы. Индексы созданы. Типы связей между таблицами определены. Настало время создания связей между таблицами непосредственно в базе данных. Связи между таблицами назначают и просматривают в окне базы данных (рис. 2.1). Открыть его можно следующим образом. В главном меню Visual FoxPro щелкните пункт File и выберите команду Open. В открывшемся окне в ячейке Тип файлов выберите пункт Database (*.dbc). Перейдите в папку DBF. Выберите нашу базу данных Real Estate.dbc Обязательно поставьте флажок 0 в ячейке Open exclusive. Если этого не сделать, то вам будут доступны не все опции по работе с базой данных.

Из двух связанных таблиц одна является главной (родительской), а другая подчиненной (дочерней). Для главной таблицы нужен индекс Primary (в окне базы данных он отмечен значком? и его имя выделено жирным шрифтом), а для подчиненной - Regular.

Установим связь между таблицами District (главная) и Building (подчиненная). Поместите указатель мыши на первичный ключ главной таблицы District. Нажмите левую кнопку мыши и, не отпуская ее, «перетащите» появившийся символ перечеркнутой окружности на обычный индекс District таблицы Building. Значок перечеркнутой окружности превратится в маленький прямоугольник с надписью внутри. Отпустите левую кнопку мыши. Связь установлена. Имейте ввиду, что попытка проделать эти действия, начиная с подчиненной таблицы Building, закончится неудачей. Значок перечеркнутой окружности никогда не превратится в прямоугольник с надписью.

 

Обеспечение ссылочной целостности данных

Вернемся к рис. 2.1. Важной особенностью Microsoft Visual FoxPro является автоматическое обеспечение ссылочной целостности данных. Если на связь между таблицами наложены условия ссылочной целостности, то добавление в связанную таблицу записи, для которой нет соответствующих записей в главной таблице, становится невозможным.

Проверка целостности данных может осуществляться и программными средствами. Например, при добавлении в таблицу Building описания нового здания, вы можете проверить, имеется ли в таблице District район, в котором расположено это здание. Однако более правильным является определение условия целостности данных на уровне базы данных, так как в этом случае ни одно приложение не может нарушить целостность данных. С базой данных может работать несколько приложений, в том числе и не только ваших.

Несколько дополнительных возможностей. Откройте окно базы данных. В главном меню Visual FoxPro щелкните пункт File и выберите команду Open. В открывшемся окне в ячейке Тип файлов выберите пункт Database (*.dbc). Перейдите в папку DBF. Выберите нашу базу данных Real Es-tate.dbc. Обязательно поставьте флажок 0 в ячейке Open exclusive. Если этого не сделать, то вам будут недоступны опции по работе с базой данных, которые мы сейчас рассмотрим. Щелкните по кнопке OK. Появится окно базы данных. В главном меню Visual FoxPro выберите пункт Database, а в открывшемся подменю пункт Edit Referential Integrity. Появится окно конструктора ссылочной целостности (рис. 1.16).

Рис. 1.16. Конструктор ссылочной целостности базы данных

В нижней части конструктора перечислены все связи между таблицами (каждая на отдельной строке). В первых двух столбцах приводятся назва­ния родительской и дочерней таблиц. В следующих трех - Update (Обновить), Delete (Удалить) и Insert (Вставить) - указаны правила соблюдения целостности. В начале работы все эти три столбца содержат элемент Ignore (Игнорировать). Однако вы можете сами определить правила пове­дения для каждой связи и выполняемого действия. Наконец, в последних двух столбцах определены родительский и дочерний индексы, участвующие в отношении.

Имейте в виду, что модифицировать можно только содержимое трех центральных столбцов, «отвечающих» за правила ссылочной целостности. Они выделены белым. При выборе любого из этих столбцов (с помощью щелчка) появляется кнопка, на которой изображена направленная вниз стрелка. После щелчка на этой кнопке раскрывается меню, содержащее возможные варианты поведения, смысл которых расшифрован в верхней части окна конструктора.

Для каждого действия (обновления, удаления и вставки) отведена отдельная вкладка, на которой перечислены доступные варианты поведения. При обновлении ключевого значения в родительской таблице можно применить следующие правила поведения.

Cascade (Последовательно выполнить). При выборе этой опции обновляются все «дочерние» записи в соответствии с новым значением ключа в родительской таблице, если у них совпадало старое значение «родительского» ключа.

Restrict (Ограничить). Если в дочерней таблице есть связанные записи (т. е. существуют записи с текущим значением родительского ключа), то FoxPro запрещает обновление родительского ключа.

Ignore (Игнорировать). При выборе этой опции система прекращает следить за соблюдением правил ссылочной целостности и разрешает обновление родительского ключа независимо от наличия связанных записей в дочерних таблицах.

Как видите, все эти опции объединены в группу переключателей. При щелчке на одном из переключателей изменяется правило целостности для выделенной связи между таблицами в соответствии с выбранной опцией переключателя. Итак, у вас есть два способа выбора правил ссылочной целостности: с помощью группы переключателей в верхней части окна построителя и с помощью меню в нижней его части.

Правила для удаления родительских записей аналогичны правилам, применяемым к операции обновления. Однако правила для вставки запи­сей применяются только с дочерней стороны отношения. В этом случае возможны только два правила.

Restrict. Запрещается вставка дочерней записи, если нет родительской записи с таким же значением ключа.

Ignore. He выполняется никаких проверок в целях сохранения ссылочной целостности, т.е. вставка заведомо разрешается.

Определив правила ссылочной целостности для каждой связи между таблицами и действия, щелкните на кнопке ОК, чтобы выйти из конструктора. Что касается нашего примера, то, скорее всего, нам стоит разрешить последовательное выполнение обновлений ключа в таблице Flat после того, как он обновится в таблице Building. С другой стороны, сле­дует запретить удаление записей таблицы Building, если существуют связанные записи в таблице Flat. И наконец, имеет смысл запретить вставку записи в таблицу Flat, если в таблице Building нет записи с таким же значением ключа.

При щелчке на кнопке ОК отображается диалоговое окно с вопросом о сохранении внесенных изменений и генерируется код ссылочной целостности, после чего построитель завершает свою работу. При этом в базе данных создается набор триггеров и хранимых процедур. Если в базе данных ранее были определены триггеры или хранимые процедуры, то перед их перезаписью создается резервная копия. Она помещается в файл Risp.old в текущую папку. Хранимые процедуры, созданные ранее для других целей (например, для соблюдения правил контроля данных), придется вручную скопировать из резервной копии.

После того как построитель ссылочной целостности завершит свою работу, можно открыть окно Table Designer (рис. 1.14) и выбрать в нем третью вкладку Table, чтобы просмотреть добавленные триггеры. В качестве альтернативного варианта можно просмотреть хранимые процедуры, щелкнув на кнопке Edit Stored Procedure (Редактировать хранимую процедуру), расположенной на панели инструментов Database Designer в окне конструктора баз данных. Приведем текст хранимой в базе данных процедуры _ri_update_flat(). Она будет запущена на выполнение автоматиче­ски при изменении значения первичного ключа.

Устранение связи «многие ко многим»

В качестве примера рассмотрим функционирование фирмы «Столица» (часть варианта 8). Особенностью работы этой фирмы является посредническая деятельность – стыковка поставщиков товаров и покупателей.

Один поставщик связан с несколькими покупателями. Один покупатель, в свою очередь, связан с несколькими поставщиками. По понятным причинам поставщик «не знает» покупателя и наоборот. Вот Вам предпосылка создания связи «многие ко многим» между двумя таблицами: поставщики и покупатели (рис. 3.17).

Как мы уже знаем, реляционная модель не позволяет непосредственно реализовать связь типа «многие ко многим». Кроме этого, штрих-код товара (рис. 1.18), являясь его однозначной идентификацией, не может быть назначен в качестве первичного ключа. В случае если через какое-то время будет закуплена еще одна партия такого же товара, то в таблице «поставщики» появится строчка, имеющая идентичный штрих-код. Аналогичная ситуация возможна и с покупателем, который приобретет такой же товар из другой партии. И еще одна проблема: один клиент практически никогда не покупает всю партию целиком и перед фирмой встает проблема учета остатка товара. Все эти проблемы (реляционной модели и алгоритма) легко решаются добавлением двух промежуточных таблиц: «Поставленные товары» и «Проданные товары». На рис. 1.19 показан фрагмент схемы данных превращения «связи многие ко многим» в несколько связей «один ко многим» с добавлением этих промежуточных таблиц.

Преобразование связи «многие ко многим» в несколько связей «один ко многим» и «много к одному» можно сделать следующим образом. Вместо того чтобы рассматривать множество поставщиков, поставляющих товары

Рис. 1.18 Штрих-код

 

 

Рис. 1.19. Работающий фрагмент схемы данных

 

 




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 2119; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.107 сек.