Файл: В терминах бд столбцы таблицы называются полями, а её строки записями.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 39

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Базы Данных

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

СУБД – это программные средства для создания, наполнения, обновления и удаления БД.

Единицей хранящейся в БД информации является таблица. Каждая таблица представляет собой совокупность строк и столбцов, где строки соответствуют экземпляру объекта, конкретному событию или явлению, а столбцы – атрибутам (признакам, характеристикам, параметрам) объекта, события или явления. Каждая строка содержит сведения о конкретном событии.

В терминах БД столбцы таблицы называются полями, а её строки – записями.

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

Связанные отношениями таблицы взаимодействуют по принципу главная-подчиненная. Одна и та же таблица может быть главной к одной таблице БД и дочерней к другой.

Понятия:

Объект – это нечто существующее и различимое, обладающее набором свойств. Отличие одного объекта от другого объекта определяется конкретными значениями свойств.

Сущность – отражение объекта в памяти человека или компьютера.

Атрибут – конкретное значение любого из свойств сущности.

Поле – это один элемент записи, в котором хранится конкретное значение атрибута.

Поле связиэто поле, по которому две таблицы связаны.

Первичные и вторичные ключи

В каждой таблице БД может существовать первичный ключ – это поле или табор полей, однозначно идентифицирующий запись.

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

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

Если в таблице нет полей, значения в которых уникально, для создания первичного ключа в неё обычно вводят дополнительное числовое поле, значениями которого СУБД может распоряжаться по своему усмотрению.

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

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

Один-к-одному. Отношение один-к-одному имеет место, когда одной записи в родительской таблице соответствует одна запись в дочерней таблице.
Данное отношение встречается на много реже, чем отношение один-ко-многим, его используют, если не хотят, что бы таблица БД распухла от второстепенной таблице. Связь один-к-одному приводит к тому, что для чтения связанной информации в нескольких таблицах, приходится производить несколько операций чтения, что замедляет получение нужной информации. Кроме того БД, в состав которых входят таблицы со связью один-к-одному не могут считаться полностью нормализованными.

Подобно связи один-ко-многим, связь один-к-одному может быть жесткой и нежесткой.

Реляционные отношения между таблицами

Отношение один-ко-многим. Одной записи в родительской таблице соответствует несколько записей в дочерней таблице.




Различают две разновидности связи один-ко-многим:

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

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

Связь один-ко-многим является самой распространенной для реляционных БД. Как можно заметить, она позволяет моделировать иерархические структуры данных.
Реляционные отношения между таблицами

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

Некоторые СУБД не поддерживают связь многие-ко-многим на уровне индексов и ссылочных целостностей.

Считается, что БД может быть перестроена так, чтобы любая связь многие-ко-многим была заменена на одну или более связей один-ко-многим.
Реляционные отношения между таблицами

Связи между записями одной таблицы. Между записями одной таблицы может существовать связи, то есть одни записи могут ссылаться на другие.

Пусть в реляционной БД необходимо хранить древовидную структуру произвольного уровня, например структуру организации.

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

Рассмотрим наиболее часто встречающуюся в БД связь 1-ко-многим. Пусть родительская и дочерняя таблицы связаны между собой по общему полю. Это поле является полем связи.

Возможны 2 вида изменений, которые приведут к утере связи между записями в родительской и дочерней таблицах:

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

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

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

СУБД обычно блокирует действия, которые нарушают целостность связей между отдельными таблицами, т.е. нарушают ссылочную целостность.

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

Нарушение хотя бы одной такой связи делает информацию в БД недостоверной.

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

Он состоит в обеспечении следующих действий:

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

  2. При удалении записи в родительской таблице следует удалить соответствующие записи в дочерней таблице.

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

Существует другая разновидность каскадного удаления:

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

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

По определениям ключей СУБД автоматически строит индексы, которые представляют собой механизмы быстрого доступа к хранящимся в таблицах данным.

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

Значения полей в индексе сортируются по возрастанию, что существенно ускоряет поиск нужных значений.

Если, например, нужно выбрать все записи с наименованием товара «свекла», нет нужды просматривать всю таблицу. Достаточно найти в индексе, построенном по столбцу наименование товара, первый указатель на запись, содержащую товар – свекла, и считать из таблицы эту запись, а затем повторить то же самое для всех иных указателей в индексе на записи с товаром «свекла».

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

Такой метод доступа к записям таблицы называют индексно-последовательным, потому что:

  • Поиск ведётся по индексу, а не по таблице.

  • Доступ начинается с первой строки, удовлетворяющей условию запроса или его части.

  • Строки в индексе, начиная с первой найденной записи, просматриваются последовательно.

В том случае, если в условия запроса входят поля, по которым не построено индексов, ищется иной пригодный индекс, а если такого индекса нет, производится последовательный перебор записей таблицы БД.
Нормализация таблиц БД

При проектировании структуры новой БД, определяют сущности (объекты, события, явления) предметной области, которые должны найти своё отражение в БД. Анализ предметной области обычно осуществляется на основании известных сведений о ней с учетом цели проектирования программной системы. В результате анализа создается проект БД. Существует специальные программные комплексы (называемые CASE-средствами), которые в значительной мере автоматизируют процесс создания проекта БД.

Процесс проектирования БД в немалой степени зависит от опыта и интуиции разработчика, то есть является творческим. Однако некоторые его моменты можно формализовать. Одной из таких формализаций является требование, согласно которому реляционная БД должна быть нормализована.

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

Первая нормальная форма

Для таблицы будут выполнены условия первой нормальной фор­мы, если:

• каждое поле (концептуальное требование) неделимо;

• отсутствуют повторяющиеся поля или группы полей.

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

Вторая нормальная форма

Условия второй нормальной формы:

• выполняются условия первой нормальной формы;

• первичный ключ однозначно определяет всю запись;

• все поля зависят от первичного ключа;

• первичный ключ не должен быть избыточным.

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

Третья нормальная форма

Условия третьей нормальной формы:

• выполняются условия второй нормальной формы;

• каждое не ключевое поле не должно зависеть от другого не ключевого поля.

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

Под транзакцией понимается воздействие на базу данных, переводящее её из одного целостного состояния в другие. Воздействие выражается в изменении данных в таблицах БД.

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

Если в рамках транзакции произошел сбой при выполнении одной из этих операций необходимо отменить результаты выполнения всех других операций, иначе информация в БД будет не достоверной. В этом случае говорят об откате транзакции.
СУБД

СУБД – это программные средства для создания, наполнения, обновления и удаления БД. Разновидности СУБД:

  1. Access. Доступна для пользователей с низкой квалификацией, средства по созданию отчетов различной степени сложности.

  2. Visual C++. Самая скоростная среда программирования, обеспечивающая выполнение расчетов и обработки данных любой сложности. Совместима практически со всеми известными приложениями.

  3. Visual FoxPro. Для создания приложений БД объема предприятия, обладает хорошим быстродействием и устанавливается на различные платформы.

  4. SQL – Server. Обеспечивает высокую степень защиты данных от случайных потерь, несанкционированного доступа. Развиты средства обработки данных, хорошее быстродействие. Для хранения большого объема данных.

  5. Visual Basic. Продукт фирмы Microsoft, легко интегрируется со всеми приложениями Microsoft Office и интегрированными в Windows. Для создания набольших приложений, в которых не требуется большие вычисления и серьезная обработка данных.


Visual Fox Pro. Типыполей. Ограничения. Типы полей

Дистрибутивный пакет FoxPro содержит 2 версии – стандартную и расширенную.

Для функционирования стандартной версии FoxPro 2.6 достаточно обычных 640 Кбайт памяти ПЭВМ и около 20 Мбайт дисковой памяти при полной инсталляции или 2 Мбайт – при минимальной.

Совершенно обязательными являются только файлы FoxPro.exe/.ovl или FoxProX.exe, хотя обычно всегда присутствуют FoxPro.int, Config.fp, FoxUser.* и FoxHelp.*, а также генераторы меню и экранов (GenMenu.prg и GenScrn.prg). Большую часть остальных файлов/директорий после изучения можно удалить.


  • Поля – максимальный размер символьного поля составляет 254.

  • Максимальное число символов в имени поля свободной таблицы (не содержащей в определенной БД) составляет 10.

  • Максимальное число символов в имени поля таблицы, содержащейся в определенной БД, составляет 128.

  • Записи – максимальное число записей, содержащихся в одном табличном файле, составляет 1Млрд.

  • Максимальное число символов в записи 65000 символов.

  • Максимальное число полей в записи 255.

  • Таблицы – максимальный размер табличного файла – 2Гбайта.

  • Максимальное число одновременно открытых таблиц – 2551

  • Максимальное число символов в поле таблицы – 254.

  • Максимальное число таблиц, между которыми могут быть установлены связи не ограничено.


Character (символьный). Он позволяет заносить в поля данного типа для хранения всё, что состоит из букв, знаков, цифр, то есть любые символы. Самый используемый тип поля.

Currency (денежный). Поля денежного типа используются для хранения денежных величин. VFP автоматически включает денежный знак в вычислениях и отчетах. Поля этого типа позволяет вводить значения от -922 337 203 685 477.5808 до +922 337 203 685 477.5807.

Numeric (числовой). Поля числового типа содержат целые числа или дроби. Эти значения используются в вычислениях. Числовые поля можно также использовать для хранения денежных значений, хотя VFP не будет включать денежный знак, когда это значение отобразится в отчетах. Поля этого типа могут содержать числа от -0.999 999 9999е+19 до +0.999 999 9999е+20.

Float (числовой с плавающий точкой). Числовые поля с плавающей точкой содержит теже самые значения, что и поля числового типа. Располагая таким типом, VFP может легко преобразовывать данные из других БД.

Date (дата). Поля дат используются для хранения значений дат. Они могут быть в вычислениях со значениями дат. Диапазон: 01/01/100 – 12/31/9999.

Datetime (дата/время). Это поле содержит значение даты и времени из поля такого вычисления. По этому есть возможность длину временного интервала. Эти поля содержат значения дат от 01/01/100 – 12/31/9999 и времени от 00:00:00 a.m. до 11:59:59 p.m.

Double. Поля этого типа содержат очень большие или очень маленькие значения, точность которых превышает 16 десятичных знаков. Этот тип данных не используется до тех пор, пока не появиться надобность проводить вычисления с числами от +/-4.940 656.458.412.47е-324 до +/-8.988 446 567 431 15е+307.

Integer (целый). Поля этого типа содержат целые числа. В такое поле нельзя поместить десятичное число, но в такое поле можно ввести большое или маленькое число диапазоном: -2 147 483 647 до +2 147 483 646.

Logical (логический). Этот тип используется когда только два значения (истина или ложь) должны храниться в поле.

Memo (примечания). Используется это поле для ввода большого фрагмента текста. Фактически текст хранится на винчестере. Значения поля – это ссылка на то место, где хранится текст. Поля этого типа дают возможность добавить в БД записную книжку.

General (общий). Поля этого типа зарезервированы для хранения ссылок на объект OLE (связывание и внедрения объектов), а объектом может быть электронная таблица, документ Word и практически всё, что было создано другими программами для Windows. Эти объекты непосредственно включаются в БД VFP.

Character (Binary) и Memo (Binary). Они содержат теже типы данных, что и символьные и Memo-поля, однако данные хранятся в двоичном виде, что позволяет предотвращать изменения данных этого типа на языке написанном в VFP.
Временные переменные

Удаление временных переменных

Активное использование временных переменных позволяет строить эффективные и быстрые системы обработки данных. Однако возможности сохранения в памяти компьютера значительного числа таких переменных ограничены ее емкостью. Ввиду этого память следует при необходимости периодически очищать от ненужных в данный момент или сохраненных в MEM-файлах переменных командой RELEASE:

  • RELEASE <переменные> / RELEASE ALL [LIKE / EXCEPT <маска>]

Команда удаляет только указанные <переменные>, или все (ALL), или соответствующие (LIKE), или не соответствующие (EXCEPT) <маске>. Уничтожение всех переменных может быть выполнено также командой

  • CLEAR MEMORY

Просмотр переменных

В любой момент при отладке программ может понадобиться просмотр переменных памяти. Использование команды "?" слишком трудоемко при просмотре большого количества переменных. Следующая команда предъявляет сразу все нужные переменные памяти:

  • DISPLAY MEMORY [LIKE <маска>]

[ТО PRINTER/FILE <файл>]

Команда показывает с паузами после выдачи каждых 20 строк все активные переменные и массивы, их статус (PUBLIC или PRIVATE), тип и значения. Кроме того, она показывает размер I памяти, занятой под переменные, окна и меню. Если нужно просмотреть только все пользовательские переменные, введите команду DISPLAY MEMORY LIKE *. Аналогичные функции, но безостановок, выполняет команда LIST MEMORY.

Все вышеперечисленные команды, кроме команд просмотра, не распространяются на системные переменные FoxPro.
Структура команд FoxPro. Правила записи

  1. Команда может иметь длину до 2048 символов.

  2. Для переноса в тексте программы части команды на следующую строку в конце текущей ставят точку с запятой.

  3. Ключевые слова и имена записываются как прописными, так и строчными буквами.


Команды FoxPro, ориентированы на обработку файлов базы данных, а самом общем виде имеют следующий синтаксис:

НАЗВАНИЕ [<границы>] [<список выр.>] [For <условие>] [While <условие>], где

НАЗВАНИЕ – имя команды;

<границы> - границы действия команды, которые могут иметь одно из следующих значений:

  • All – все записи базы данных;

  • Rest – все записи начиная с текущей;

  • Next -следующие N записей;

  • Record - запись номер N;

For <условие> - выполнение команды только для записей, отвечающих условие;

While <условие> - выполнение команды только до тех пор пока не перестанет выполнятся <условие>.

Слова While и For могут присутствовать в команде одновременно. В этом случае While-условие имеет приоритет перед For-условием.

Пример: List Rest Field fam, tab, dtr For fam=”П

название границы выражение For-условие

Порядок следования элементов команды (за исключением «НАЗВАНИЯ», которое всегда на первом месте) практически произвольный. По умолчанию, если отсутствуют <границы> или <условия>, сферой действия команды является одна только текущая запись (NEXT 1) или, наоборот, вся БД (All). Эти сведения содержатся в описании команды.

Поясним применение команд с условием. For-условие обеспечивает выполнение команды для всех записей файла БД или внутри границ, если они указаны. While-условие означает выполнение команды только ля тех пор пока условие истинно. При встрече первой же записи, у которой окно (While-условие) не удовлетворяется, дополнение команды прекращается, несмотря на то, что нижняя граница ещё не достигнута и далее имеются записи с нужными свойствами. Поэтому область применения While-условия – это файлы, упорядоченные (физически или индексированием) по полю, в котором анализируется условие. Если ранее каким-либо образом была найдена первая запись, удовлетворяющая условию, то все остальные такие записи находятся ниже рядом. В этом случае использование команд с While-условием предпочтительнее, так как по достижении нужной последней записи выполнение команды прекращается, а в случае For-условия поиск записи был бы бессмысленно продолжен до достижения нижней границы действия команды.
Команды установки

УПРАВЛЕНИЕ СТАТУС-СТРОКОЙ

Статус-строка располагается в нижней части экрана и содержит справочную информацию: имя диска, где хранится таблицы, имя текущей таблицы, права доступа к таблице, номер текущей запи­си таблицы, общее количество записей таблицы и сведения о включенных режимах клавиатуры.

Для вывода статус-строки на экран надо в окне Command по­дать команду

SET STATUS ON.

Для удаления статус-строки с экрана надо подать ту же коман­ду с параметром OFF. Статус-строка полезна при обучении и отладке, но в гото­вых программах она, конечно, не нужна.
УСТАНОВКА ТИПА ДАТЫ

В FoxPro предусмотрены несколько типов дат, которые устанав­ливаются с помощью команды: SET DATE <тип даты>

Аргумент <тип даты> может содержать одну из констант:

AMERICAN — американский тип даты мм/дд/гг

ANSY — тип даты ANSY гг.мм.дд

BRITISH — английский тип даты дд/мм/гг

GERMAN — немецкий тип даты дд.мм.гг

ITALIAN — итальянский тип даты дд-мм-гг

Если необходимо установить написание года четырьмя циф­рами, то надо подать команду SET CENTURY ON.

Для написания номера года двумя цифрами надо подать ту же команду с параметром OFF. В приложениях формат даты определяют либо в начале про­граммного файла, либо в файле Config.fp.
УПРАВЛЕНИЕ РЕДАКТИРОВАНИЕМ ТАБЛИЦЫ

Для создания комфортных условий при создании и редактирова­нии файлов желательно использование следующих команд:

а. Команда установки текущего каталога

SET DEFAULT TO <полное имя каталога>

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

SET PATH TO [<список путей поиска>].

Если требуемый файл не найден в текущем каталоге, то поиск файла продолжается в каталогах, указанных в <списке путей поиска>

в. Команда управления курсором

SET CONFIRM ON

Команда включает автоматический перевод курсора в следу­ющее поле после нажатия клавиши ENTER. Если после нажатия клавиши ENTER курсор должен оставаться в том же поле, то в этой команде следует указать параметр OFF.

г. Ком-анда подачи звукового сигнала

SET BELL ON

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

д. Управление выдачей системных сообщений

SET TALK ON | OFF

Если установлена опция ON, то на экран выводятся систем­ные сообщения о выполнении некоторых команд и многих фун­кций FoxPro. Если установлена опция OFF, то системные сооб­щения на экран не выводятся.

Константы различных типов

Символьные константы выделяются апострофами, кавычками или квадратными скобками. В случае если сами символы-ограничители являются элементами данных, вся строка должна быть заключена в другие разрешенные ограничители, например: [Кинотеатр “Ударник”].

Константы типа даты берутся в фигурные скобки (например: {29.03.87}). Пустая дата ({..}) вообще может быть задана одними фигурными скобками {}.

Логические константы Т и F в тексте программ обрамляются точками (.Т., .F., .t., .f.)

ФУНКЦИИ СУБД

Функции в FoxPro используются для анализа или преобразования данных. Синтаксическая особенность функций - обязательное наличие скобок (кроме функции &).

Все функции могут быть использованы в программах, а большинство из них - и в интерактивном режиме. Функции разбиты (иногда довольно условно) на следующие группы:

• математические функции;

• строковые функции;

• функции работы с датами;

• функции преобразования типов данных;

• функции проверки файлов и дисков;

• функции позиционирования выдачи данных;

• функции работы с мышью;

• клавишные функции;

• технические функции;

• функции времени;

• функция анализа условий;

• функции анализа типа и наличия данных;

• финансовые функции;

• функции подстановки.
Арифметические функции

АВS(<вырN>) - вычисляет абсолютное значение <вырN>.

Пример: ? ABS(-24.8) && 24 . 8

BETWEEN(<выр>,<выр1>,<выр2>) - возвращает значение "Истина" (.Т.), если <выр> больше или равно <выр1> и меньше или равно <выр2>, иначе - "Ложь" (.F.). Тип всех трех выра­жений должен быть одинаковым (строка, число, дата). Пример:

? BETWEEN (4,1,6) && .F.

? BETWEEN({04.06.65},<23.10.70),U5.12.91)) && .Т.

USE kadr LIST FOR BETWEEN (YEAR(dtr) ,1943,1960) fam,dtr

Последняя команда выводит все записи из базы KADR.DBF, где дата рождения находится между 1943 и 1960 годами. .

CEILING(<вырN>) - возвращает ближайшее целое число боль­шее или равное <вырN>. Аргумент может иметь любой знак. Пример:

? CEILING(6.3), CEILING(-8.4) && 7 и -8

FLOOR(<вырN>) - ближайшее целое меньшее или равное <вырN>. Пример:

? FLOOR (6.3), FLOOR (-8.4) && 6 и -9

INT(<вырN>) - целая часть <вырN>. Пример:

? INT(-18.7) && -18

МАХ(<выр>,<выр1>[,<выр2> ...]) - возвращает максимальное значение из списка аргументов, которые должны быть все од­ного типа (символьные, числовые или дата). Пример:

? мах (3,1,-8) && 3

? МАХ({04.06.65},(23.10.70},{15.12.91}) && 15.12.91

МIN(<выр>,<выр1>[,<выр2> ...]) - возвращает минимальное значение из списка аргументов, которые должны быть все од­ного и того же типа. Пример:

? МIN (3,1,-8) && -8

? МIN({04.0б.65},{23.10.70}, {15.12.91}) && 04.06.65

MOD(<вырN1>,<вырN2>) -целочисленный остаток отделения <вырN1> на <вырN2>. Пример:

? MOD (3,2), MOD(5/7) && 1 и 5

ROUND(<вырNl>,<вырN2>) - округление <вырN1> до задан­ного в <вырN2> количества знаков после запятой. Пример:

? ROUND (-342.268,1) && -324.-3

RAND([<вырN>]) - возвращает псевдослучайное число в диапазоне 0 -1. <вырN> позволяет определить начальное значение аргумента функции. Использование одних и тех же значений <вырN> дает один и тот же ряд чисел. По умолчанию исходное значение аргумента 100001, что соответствует RAND(100001). Если <вырN> является отрицательным, значение функции вычисляется с помощью таймера компьютера, что обеспечивает наибольшую случайность выдаваемых значений. Таким образом, для получения максимальной случайности выдаваемых значений вначале следует использовать функцию с отрицательным аргументом, а затем - без аргументов. Хотя сама функция непосредственно вырабатывает числа, распределенные равномерно между 0 и 1, на ее основе можно построить генераторы с любыми диапазонами чисел, любыми законами распределения. Например, выражения

(b - a) *RAND( ) + a и INT ( { j -i + 1) *RAND( ) +i)

реализуют равномерный закон с вещественными числами, pacположенными в диапазоне А - В, и с целыми числами в диапазоне I – J. Генераторы других законов приведены в документации на FoxPro.

SIGN(<вырN>) - возвращает значения: 1, если число положительное, -1 , если отрицательное, 0, если нуль. Пример:

?SIGN(5), SIGN(-7), SISN (О) && 1, -1 и 0

Степенные функции

  • ЕХР(<вырN>) - экспонента <вырN> - основание натурального логарифма "е" в степени <вырN>.

  • LOG(<вырN>) - натуральный логарифм <вырN>. Аргумент должен быть больше нуля.

  • LOG10(<вырN>) - десятичный логарифм <вырN>. Аргумент должен быть больше нуля.

  • SQRT(<вырN>) - квадратный корень <вырN>. Аргумент должен быть положительным.

Тригонометрические функции

  • SIN (<вырN>) - синус(<вырN>). <вырN> задается в радианах результат, возвращаемый функцией, находится в диапазоне от -1 до 1.

  • COS (<вырN>) – косинус (<вырN>). Аргумент задается в радианах

  • TAN (<вырN>) – тангенс (<вырN>). Аргумент задается в радианах.

  • ASIN (<вырN>) – арксинус (<вырN>). Результат в радианах и в интервале от -Пи/2 до Пи/2 (от -1,57079 до 1,57079). Значение аргумента может изменяться от +1 до -1 (<вырN>). Результат в радианах в интервале от 0 до Пи (3,14159). Аргумент может изменяться от-1 до +1.

  • ATAN(<вырN>) - арктангенс(<вырN>). Результат в радианах в ин­тервале от -Пи/2 до Пи/2. Значение <вырN> может быть любым.

  • ATN2(<вырNl>,<вырN2>) - арктангенс отношения <вырNl> / <вырN2>. Здесь аргументы - это координаты точки Y и X на плоскости. Функция допускает 0 в качестве второго аргумен­та. Результат лежит в интервале между -Пи/2 и Пи/2. Пример:

? ATN (5,0) && 1.57

  • РI( ) - число Пи (приблизительно 3.141592).

  • DTOR(<вырN>) - преобразует угол, заданный в градусах, в радианы. Пример:

? DTOR (90), DTOR (40.2) && 1.57 и 0.7

  • RTOD (<вырN>) - возвращает угол в градусах по его радианному значению <вырN>. И аргумент, и результат функций DTOR( ) и RTOD( ) - в десятичном представлении. Пример:

? RTOD (1.57) && 89.95

Здесь мы как будто видим ошибку: 90 градусов соответствуют 1.57 радианам, а 1.57 радиан - только 89.95 градусам. На самом де­ле это является следствием не ошибки, а ограниченной точности вывода результата (по умолчанию - два дробных разряда) функции DTOR( ). Если бы мы вывели не два, а больше разрядов, совпадение было бы гораздо более полным.

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

  • SET FIXED ON

( по умолчанию OFF), то разрядность будет уже определяться другой командой

  • SET DECIMALS TO <вырN>

устанавливающей количество отображаемых десятичных разрядов равным <вырN>, и при этом производится округление. По умолчанию <вырN>=2.

Примеры. Пусть выводимое число равно 67.34567. Тогда применение указанных команд даст следующие результаты:

SET FIXED ON && результат: 67.35

SET DECIMALS TO 3 && результат: 67.346

Команды SET DECIMALS и SET FIXED управляют только предъявлением информации, но не влияют на ее фактическое значение.
Создание файла БД

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

Создать файл базы данных можно несколькими способами.

а. С помощью команд.

В окне Command надо подать команду: CREATE DATABASE [ <имя базы данных> | ? ]

Команда создает базу данных и делает ее текущей (открытой). Если указана опция «?» или опции не указаны вообще, то на экран выводится диалоговая панель Create, где в специальном окне представлены имена имеющихся баз данных, и в поле ввода Enter database можно задать имя создаваемой базе данных.

б. С помощью Главного меню,

Из Главного меню надо подать команду: File -> New, тогда на экран выводится диалоговая панель New, где в ра­диогруппе File Type надо включить кнопку Database и нажать кнопку New File, тогда на экран выведется диалоговая панель Create, работа с которой описана в пункте а.

в. С помощью графического меню.

В графическом меню нажать кнопку New File и на экран выведется диалоговая панель New, работа с которой рассмотрена в пункте б.

База данных, созданная любым способом, становится теку­щей (открытой). Файл базы данных имеет расширение .DBC.
Добавление таблиц в базу данных

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

• либо из Главного меню подать команду Database -> Add Table;

• либо установить курсор мыши на рабочее поле диалоговой панели Database Designer и правой кнопкой мыши вызвать на экран контекстное меню, из которого выбрать команду Add Table.

В том и другом случае на экран выводится диалоговая панель Open, в окне которой представлены имена табличных файлов из текущего каталога. Надо выбрать имя нужного табличного файла и нажать кнопку Ok. После выполнения операции добавления таблицы, изображение самой таблицы появляется в диалоговой панели Database Designer.

Добавить свободную таблицу в открытую базу данных можно также с помощью команды

ADD TABLE <имя таблицы> | ?

Освобождение таблицы

Для освобождение таблицы существуют две команды.

Команда REMOVE TABLE <имя таблицы> ? [DELETE] удаля­ет таблицу из базы данных и делает указанную таблицу свобод­ной, оставляя ее в текущем каталоге. Если указана опция DELETE, то таблица удаляется не только из базы данных, но и с диска.

Команда FREE TABLE <имя таблицы> используется при за­крытой базе данных для доступа к указанной таблице. Если оп­ция <имя таблицы> опущена, то на экран выводится диалоговая панель Free Table, которая аналогична диалоговой панели Open, где можно указать имя освобождаемой таблицы.

Освободить таблицу можно через Главное меню командой Database -> Remove.

После выбора команды Remove надо уточнить свое действие: освободить таблицу (Remove) или удалить таблицу (Delete) нажа­тием соответствующей кнопки.

После нажатия одной из кнопок (Remove или Delete) надо подтвердить (или отменить) выбранное действие нажатием кнопки Yes или No в появившемся на экране новом запросе.
ОТКРЫТИЕ БАЗЫ ДАННЫХ

Д ля открытия базы данных надо из Главного меню подать коман­ду File -> Open или в графическом меню нажать кнопку Open, на экран выведется диалоговая панель Open, где надо указать имя базы данных и место ее хранения. В результате работы команды Open на экран выведется диалоговая панель Database Designer.


BROWSE-ОКНО

Команда BROWSE - один из наиболее мощных и удобных инстру­ментов доступа пользователя к данным в FoxPro. По существу это не просто команда - это целая среда доступа и управления данными.

Записи из базы (по умолчанию) предъявляются горизонтально на экране или внутри предварительно описанного окна. Записи можно редактировать, дополнять и помечать к удалению. Формат отображе­ния полей в BROWSE-окне может настраиваться пользователем.

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

Если позволяет основная память компьютера, можно одновре­менно открыть до 25 BROWSE-окон для стандартной и до 255 -для расширенной версии FoxPro.

Команда BROWSE дает возможность предъявлять поля из разных баз данных. Кроме того, она поддерживает любой тип связи между ба­зами. При выполнении команды можно получить текущее значение колонки/строки относительно окна/экрана (функции COL( )/ROW( )), имя текущего поля (функции VARREAD( ) и SYS(18)), номер текущей записи (RECNO( )) и т.д. Допускается широкое приме­нение аппарата пользовательских функций.
Управление доступом к полям базы

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

[:<вырМ>]

[:V = <вырL1> [:F] [:E = <вырС1>]]

[:P = <вырС2>]

[:H = <вырС3>]

[:B = <выр1>,<выр2> [:F]]

[:W = <вырL2>]

Здесь символ ":" может быть заменен на тождественный ему сим­вол "/", если последний не будет интерпретироваться как знак деле­ния (это возможно для параметра :<вырN>). Мы далее всегда бу­дем использовать знак ":".

Перечисленные ключи имеют следующие значения:

-r - разрешен только просмотр поля (Read-Only), однако курсор в поле допускается и, следовательно, в нем, например, могут быть обработаны нажатия заданных клавиш, а также задей­ствованы ключи :V и :W.

<вырN> - видимый размер поля в BROWSE-окне. Если фактиче­ский размер поля больше, предусмотрен скроллинг.

:V=<вырL1> - контроль выхода из поля. Проверка вводимых данных выполняется по <вырN> после изменения содержимого поля. Ес­ли <вырL>=.T., ввод считается правильным и курсор переходит в следующее поле. Если <вырL>=.F., выдается стандартное сооб­щение "Invalid input" ("Неверный ввод"), которое может быть за­менено на собственное, заданное с параметром . Допустимы ПФ. Ключ V соответствует опции VALID команды ввода @...GET, которая будет рассмотрена позже.

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

:Е=<вырС1> - выдача собственного <вырС1> сообщения на не­правильный ввод данных. Если <вырLl> вычисляется как числовое и в результате получено значение 0, сообщение не выдается и выхода из поля не происходит. Это дает возмож­ность создавать собственные подпрограммы сообщений об ошибках из процедур обработки ошибок. По действию ключ аналогичен опции ERROR команды @...GET.

:Р=<вырС2> - задание формата отображения данных с помощью шаблона Picture или символов форматной функции ввода-вывода (кроме кода "М"). Шаблоны и коды форматных функ­ций описаны в команде @...SAY...GET при рассмотрении опций PICTURE и FUNCTION.

<выр1>,<выр2> - указание границ чисел или дат. Не допуска­ются ПФ. Возможно указать только одну из границ, но запя­тая должна присутствовать обязательно. Может быть усилена параметром :F. Ключ В соответствует опции RANGE команды @...GET.


:Н:=<вырС3> - указание собственного заголовка поля. Разрешены ПФ. По умолчанию в качестве заголовков выводятся имена полей. Если заголовок не нужен вообще, следует в качестве <вырС3> использовать пробел ('').

:W=<вырL2> - контроль входа в поле. Запрещены вход и редакти­рование, если <вырL2>=.F., и разрешены, если <вырL2>=.T.. Допустимы ПФ. Входом в поле считается перемещение в него курсора любым способом, в том числе и мышью. Ключ W со­ответствует опции WHEN команды @...GET.

Отбор данных

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

FOR <условие1> - устанавливает фильтр записей для базы. В BROWSE-окне предъявляются только записи, удовлетворяю­щие заданному <условию>.

Пример:

USE tadr

BROWSE FOR szar>=530000.AND.szar<=750000

Здесь команда BROWSE предъявляет только те записи базы KADR.DBF, в которых значения поля SZAR (средняя зарплата) от 530000 до 750000 руб. Если имеются соответствующие индекс­ные файлы, фильтрация данных будет выполняться с их участием и использованием оптимизирующей технологии Rushmore, т.е. гораздо быстрее. Такой индекс, естественно, должен быть открыт. Опция NOOPTIMIZE отключает оптимизацию. REST - удобно использовать совместно с FOR-условием. Это предотвращает повторный поиск в базе с самого ее начала записей, отвечающих <условию> при повторном вызове BROWSE-окна. Курсор остается на текущей записи, если, конечно, она удовлетворяет <условию>.

KEY <выр1> [,<выр>2>] - ограничение действия команды диапазо­ном ключевого выражения <выр1> и <выр2> активного ин­дексного файла.

Пример:

USE kadr

INDEX ON szar TO kadrzar BROWSE KEY 530000,750000

Пример по целям аналогичен предыдущему, но для функцио­нирования такого режима доступа к данным уже обязательно наличие предварительно созданного индексного файла KADRZAR.IDX по полю SZAR. По возможности следует использовать быструю фильтрацию с применением индексных файлов непосредственно (опция KEY) или по технологии Rushmore (опция FOR). Индексирование и техноло­гия Rushmore будут рассмотрены далее.

Вычисляемые поля

В <список полей> могут включаться вычисляемые поля. Эти поля являются функциями других полей, переменных и т.д. Такие поля не могут редактироваться и не запоминаются в базе данных. Вычисляемые поля сами могут содержать пользовательские, функции что делает их важным средством отображения и управления дан­ными. Например, в команде BROWSE для базы KADR.DBF введем вычисляемое поле РОМ для определения материальной помощи Считаем, что помощь устанавливается на одного ребенка в размеру 70% средней зарплаты, но не более 90000 руб. и только тем, у когс средняя зарплата не превышает 300000 руб. Таким образом POM=IIF(szar>300000, 0, MIN(0.7*szar*det, 90000)).



Здесь, забегая вперед, мы использовали две новые функции) MIN() и IIF() - Функция MIN() возвращает минимальное значение из 0.7*szar*det и 90000. Функция IIF() возвращает 0, если szar>300000, или MIN() в противном случае.

Видимый размер вычисляемого поля РОМ будет определяться принятыми умолчаниями на размер числовых выводов. Этим про­цессом можно (и лучше) управлять с помощью параметра ограничения длины поля :<вырN>. Еще удобнее применение шаблонов (ключ ), которыми может быть установлена не только длина, но и формат выдачи.

Разделение окна

В режиме разделения Browse-окно разбивается на два смежных окна, в которых отображаются данные из базы/баз, возможно, в разной форме. Это может быть удобно, например, если надо сделать неподвижной какую-то часть данных в одном окне при горизонтальном и вертикальном перемещении в другом.

LOCK <вырN> - BROWSE-окно делится на две части, где первые <вырN> полей всей базы или из списка FIELDS (если есть) дублируются в левой части окна. Перебрасывается курсор в другую половину окна нажатием клавиш Ctrl-H или мышью.


PARTITION <вырN> - то же, но граница будет проходить по ко­лонке номер <вырN>.

LEDIT/REDIT - опции действуют только в разделенном окне. Они указывают, будут ли слева/справа (LeftEDIT/RightEDIT) от ли­нии разделения данные показаны, как в CHANGE-окне (EDIT -другое имя команды CHANGE). В противоположной части ок­на поля останутся расположенными горизонтально.

LPARTITION - курсор устанавливается в левой половине разде­ленного окна (по умолчанию - в правой половине).

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

NOLGRID/NORGRID - удаляет вертикальные линии-разделители полей в левой/правой части разделенного окна. По умолча­нию разделители есть. Если окно не разделено, вертикальные линии удаляются опцией NORGRID.
Конфигурирование BROWSE-окна

LAST - конфигурация BROWSE-окна сохраняется в специальном системном так называемом ресурсном файле FOXUSER.DBF (если установлено SET RESOURCE ON) по завершении ко­манды BROWSE для использования в следующем сеансе. Ес­ли выход был сделан по Ctrl-Q, конфигурация не сохраняется.

PREFERENCE <вырС> - работает аналогично опции LAST, но дает возможность сохранить под определенным именем <вырС> параметры BROWSE-окна в файле FOXUSER.DBF для последующего использования. Конфигурация (и не одна), сохраненная с опцией PREFERENCE, может быть "заморожена" в целях дальнейшего использования. Для этого после выхода из команды BROWSE ресурсный файл должен быть отключен, а затем открыт командой USE и вызван на редактирование, например командой BROWSE. В базе FOXUSER.DBF ищется запись, где в поле NAME стоит <вырС>, а затем в поле READONLY значение .F. заменяется на .Т. (изменение запрещено). После этого ресурсный файл закрывается и снова подключается к системе. Теперь каждая загрузка команды BROWSE будет извлекать конфигураций BROWSE-окна из ресурсного файла, причем все пользова­тельские настройки, произведенные в текущем сеансе, в сле­дующих сеансах будут игнорироваться. Более того, в ресурс­ном файле под разными именами можно сохранить несколь­ко разных настроек для одной базы данных, которые можно выбирать, например, через программируемое меню, перед за­грузкой команды BROWSE. Команда BROWSE, использую­щая сохраненные настройки, в дальнейшем может приме­няться без всяких опций (кроме опции
PREFERENCE) во­обще.
CHANGE/EDIT-окно

По функциям и возможностям команда CHANGE аналогична ко­манде BROWSE, но предъявляет все поля всех записей в одну колонку.

  • CHANGE [WHILE <условие>][опции]

Опции - набор режимов по составу и действию полностью ана­логичных опциям команды BROWSE (отсутствуют только опции NOLGRID/NORGRID). При разделении окна здесь также можно вывести данные в формате BROWSE. Параметр WHILE, указан­ный в формате команды, при проверке оказался не работоспособен.

При наличии условий в команде CHANGE в окно редактирова­ния выводится не столько записей, сколько удается разместить, а только одна текущая.

Команда CHANGE полностью идентична команде EDIT.

Замечание к вводу дат. При вводе данных в поля/переменные (коман­дами BROWSE/CHANGE, READ) типа дата мы обнаружим, что в такие поля разрешается вводить лишь содержательные данные в допустимом диапазоне. Не разрешается вводить пустую дату ({ . . }), хотя дату такого вида мы можем видеть при первоначальном заполнении базы. В поля типа дата вводить пробелы вообще не удается. Между тем это важно, так как бывает, что дата не известна или же она еще не установлена. В этом случае неплохо оставить ее пустой, а не заполнять Временно бессмысленной, хотя формально и разрешенной датой. Возможность очистить такое поле су­ществует - это использование клавиш очистки поля Ctrl-Y.

Окна редактирования могут быть еще более адаптированы под любые запросы заказчика с помощью форматного файла или путем непосредственного использования команд @...SAY...GET. К этим вопросам мы вернемся ниже.
ПЕРЕМЕЩЕНИЯ В БАЗЕ ДАННЫХ

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

Имеется несколько разновидностей команд, изменяющих положение указателя записей:

  • GO TOP [IN <область>] файла;

  • GO BOTTOM [IN <область>] - переход к самой последней записи;

  • GO <вырN> [IN <область>] - переход к записи с указанным в <вырN> номером;

  • SKIP <вырN> [IN <область>] - переход к записи, отстоящей от текущей на указанное в <вырN> число записей.

В последней команде <вырN> может быть и отрицательным; что означает движение указателя назад. SKIP без параметра идентичен SKIP 1 (переход на следующую запись). Параметр IN <область> указывает над базой из какой рабочей области должна выполниться команда. Если он опущен, имеется в виду текущая рабочая область.