Цель работы:учиться создавать индексы в окне конструктора таблиц, устанавливать отношения между таблицами и определять условия целостности данных.
Задача работы:создать структуру и заполнить третью таблицу базы данных, определить первичные ключи и дополнительные индексы для второй и третьей таблиц.
Создать первичный ключ по полю Номер личного дела учителя для второй таблицы базы данных
Создать третью таблицу, которая будет содержать сведения о факультативных занятиях каждого ученика Код учащегося. Номер личного дела учащегося. Номер личного дела учителя
Создать первичный ключ по полю Код учащегося» и дополнительные индексы: по Номеру личного дела учащегося, по Номеру личного дела учителя
Модифицировать структуру третьей таблицы, вставив поле Число часов в неделю
Заполнить третью таблицу, учитывая, что первая цифра кода учащегося указывает на учебный предмет факультативного занятия, и каждый ученик может посещать факультативные занятия более чем по одному предмету.
1. Создать первичный ключ по полю Код товара для второй таблицы базы данных.
2. Создать третью таблицу, которая будет содержать сведения о заказах: Код заказа, Код заказчика, Код товара, Количество
Создать первичный ключ по полю Код заказа и дополнительные индексы: по Коду заказчика, по Коду товара.
4. Модифицировать структуру третьей таблицы, вставив поле Дата заказа.
5. Заполнить таблицу, учитывая, что каждый покупатель может сделать более одного заказа на разные товары
1. Создать первичный ключ по полю Код книги для второй таблицы базы данных.
2. Создать третью таблицу, которая будет содержать сведения о заказах. Номер заказа, Код читателя, Код книги.
3. Создать первичный ключ по полю Номер заказа и дополнительные индексы: по Коду читателя, по Коду книги
4. Модифицировать структуру третьей таблицы, вставив поле Дата заказа.
5. Заполнить таблицу, учитывая, что каждый читатель может заказать более одной книги.
1. Создать первичный ключ по полю Номер рейса для второй таблицы базы данных.
2. Создать третью таблицу, которая будет содержать сведения о продаже билетов Номер по порядку, Номер пассажира, Номер рейса
3. Создать первичный ключ по полю Номер по порядку и дополнительные индексы по Номеру пассажира, по Номеру рейса
Модифицировать структуру третьей таблицы, вставив поле Дата вылета
Заполнить таблицу, учитывая, что каждый пассажир может пользоваться услугами авиакомпании более одного раза
Visual FoxPro различает все типы отношений, но поддерживает только один тип – один-ко-многим или много-к-одному. Установленные постоянные отношения между таблицами будут поддерживаться при создании форм, отчетов, запросов, представлении данных.
При определении отношений одна из таблиц является родительской, для нее предварительно определяется первичный ключ (Primary), а другая – дочерней, для которой определяется индекс (Regular) для связи с родительской таблицей. Так как связь между таблицами осуществляется по совпадающим полям, то имена полей первичного ключа должны совпадать с именем индекса, по которому осуществляется связь между таблицами.
Например, при создании отношений между таблицами Pocupatel и Zakaz в базе данных Example, таблица Pocupatel содержит список и сведения о покупателях, а таблица Zakaz содержит список покупок, сделанных покупателями. Для таблицы Pocupatel определен первичный ключ по полю Код покупателя – это родительская таблица, а в таблице Zakaz по этому же полю определен индекс Regular – это дочерняя таблица. Таким образом, связь между таблицами Pocupatel и Zakaz осуществляется по полю Код покупателя.
Аналогично, таблица Tovar является родительской и для нее определен первичный ключ по полю Код товара, а в таблице Zakaz по этому же полю определен индекс Regular – это дочерняя таблица. Таким образом, связь между таблицами Tovarl и Zakaz осуществляется по полю Код покупателя.
Для определения отношений между таблицами Pocupatel и Zakaz необходимо выполнить следующие действия:
1. В окне конструктора проекта во вкладке Data установить курсор на имени базы данных. В нашем случае – Example. Затем нажать кнопку Modify. В результате откроется окно конструктора базы данных Database Designer.
2. В родительской таблице Pocupatel установить курсор мыши на первичный ключ таблицы. Нажать кнопку мыши и, не отпуская ее, перетащить курсор мыши на индекс дочерней таблицы Zakaz, по которому устанавливается связь, то есть на Код покупателя. Отпустить кнопку мыши.
3. Чтобы сохранить установленное отношение, необходимо нажать кнопку ОК, чтобы отказаться – Cancel. В результате выполненных действий в окне конструктора базы данных наглядно отобразится созданное отношение между таблицами:
рис 5.1. Отношения между таблицами
4. По двойному щелчку на линии, соединяющей таблицы, появляется окно диалога Edit Relationship, в котором слева приведены наименование и раскрывающийся список индексов родительской таблицы, а справа аналогичная информация о дочерней таблице. В этом же окне приведен тип отношений между таблицами One To Many:
рис 5.2. Окно диалога Edit Relationship
5. Для удаления установленного отношения нужно установить курсор мыши на линию, соединяющую таблицы, и нажать правую кнопку мыши. В результате появится контекстное меню, из которого необходимо выбрать команду Remove Relationship.
В результате установленных отношений таблица Zakaz связана с двумя таблицами Pocupatel и Tovar, так что зная код операции из таблицы Zakaz всегда можно получить сведения о покупателе и его покупке из таблиц Pocupatel и Tovar.
Целостность данных является одним из самых важных условий, предъявляемых к базам данных. Это значит, например, что таблица, содержащая дополнительные сведения о покупателях, должна содержать сведения обо всех покупателях, коды которых содержатся в таблице проданных товаров. Иначе невозможно определить, кому был продан товар.
Для определения условий целостности данных необходимо в окне конструктора базы данных нажать правую кнопку мыши и выбрать команду Edit Referential Integrity. В результате откроется окно конструктора условий целостности данных Referential Integrity Builder.
Таблица описания условий содержит наименования родительских таблиц – столбец Parent Table, и соответствующих дочерних таблиц – столбец Child Table; наименования индексов, используемых для связей - столбцы Parent Tag и Child Tag; а также типы действий, выполняемых при модификации данных (Update), добавлении (Insert), удалении(Delete) записей в таблицах:
рис 5.3. Окно конструктора условий целостности данных
Окно Referential Integrity Builder содержит три вкладки (Rules for Updating, Rules for Deleting, Rules for Inserting), в каждой из которых находятся переключатели для установки типа выполняемого действия. Однако выбрать тип действия можно и непосредственно из раскрывающегося списка в полях Update, Insert, Delete.
При изменении значений первичного ключа в родительской таблице возможны следующие варианты действий (вкладка Rules for Updating или поле Update):
Наименование
Описание
Cascade
При изменении полей первичного ключа в родительской таблице автоматически осуществляется каскадное изменение всех соответствующих значений в дочерней таблице. Например, при изменении кода покупателя в таблице Pocupatel этот же код автоматически изменится в таблицеZakaz.
Restrict
Не позволяет изменять значения полей первичного ключа в родительской таблице, если в дочерней имеется хотя бы одна запись, содержащая ссылку на изменяемую запись. Т.е. Коды покупателей определяются на этапе ввода и в дальнейшем не изменяются.
Ignore
При изменении значений полей первичного ключа в родительской таблице соответствующие значения в дочерней таблице не изменяются. Целостность данных при этом не поддерживается.
При изменении значений первичного ключа в родительской таблице возможны следующие варианты действий (вкладка Rules for Deleting или поле Delete):
Наименование
Описание
Cascade
При удалении записи в родительской таблице автоматически осуществляется каскадное удаление всех записей из дочерней таблицы, связанных удаляемой записью.
Restrict
Не позволяет удалять запись в родительской таблице, если в дочерней имеется хотя бы одна запись, содержащая ссылку на удаляемую запись.
Ignore
При удалении значений в родительской таблице соответствующие значения в дочерней таблице не изменяются. Целостность данных при этом не поддерживается.
При добавлении новой записи в дочернюю таблицу или редактировании в ней существующей записи возможны следующие варианты действий (вкладка Rules for Inserting или поле Insert):
Наименование
Описание
Restrict
Не позволяет вводить запись если значение индексного выражения дочерней таблицы не соответствует одной из записей в родительской таблице.
Ignore
При вводе данных не анализируется значение индексного выражения. Целостность данных при этом не поддерживается.
После завершения определения условий целостности необходимо нажать кнопку ОК. После чего система задаст вопрос о подтверждении определенных условий целостности, их установлении и записи. В случае положительного ответа вся введенная информация будет сохранена и указанные действия будут выполняться при изменении, дополнении и удалении записей.