ГБОУ СОШ № 840 МНОГОТАБЛИЧНЫЕ БАЗЫ ДАННЫХ ГБОУ СОШ № 840 Достаточно часто встречается ситуация, когда хранить все данные в одной таблице реляционной БД неудобно и нерационально. Таблица может содержать слишком большое количество полей. При этом во многих полях могут дублироваться данные, что увеличивает необходимое для хранения место и замедляет процедуры обработки данных. Поясним это на примере. Пусть реляционная база данных «Комплектующие компьютера и поставщики» содержит информацию о различных комплектующих и имеет поля: Счетчик, Наименование, Описание, Название фирмы, Адрес, Цена (табл. 3.2). ГБОУ СОШ № 840 Данные записей 1 и 2, 3 и 4, 5 и 6, 7 и 8 дублируются в полях Наименование, Описание, Название фирмы и Адрес. Таким образом, почти половину объема таблицы составляет избыточная, дублированная информация. Проанализируем причину дублирования. Комплектующие компьютера имеют два неотъемлемых свойства: Наименование и Описание. Название фирмы, Адрес и Цена не являются свойствами комплектующих компьютера, они являются свойствами поставщика. ГБОУ СОШ № 840 Комплектующие компьютера и поставщики Таблица 3.2. Счетчик Наименование Описание Системный блок Системный блок Intel Соге 2 Quad Intel Соге 2 Quad 3 Монитор 4 Название фирмы Адрес Цена, руб. Фирма1 Адрес1 9000 Фирма2 Адрес2 10000 19" Фирма1 Адрес1 5000 Монитор 19" Фирма2 Адрес2 6000 5 Клавиатура 104 КЛ. Фирма1 Адрес1 250 6 Клавиатура 104 КЛ. Фирма2 Адрес2 300 7 Мышь Беспроводная Фирма1 Адрес1 300 8 Мышь Беспроводная Фирма2 Адрес2 350 1 2 ГБОУ СОШ № 840 Естественно выделить из исходной таблицы две отдельные таблицы: «Комплектующие» и «Поставщики». Чтобы однозначно идентифицировать записи в этих таблицах, введем в них первичные ключи. В таблицу «Комплектующие» введем поле Код комплектующих (табл. 3.3). Таблица 3.3. Комплектующие Код комплектующих Наименование Описание К1 Системный блок Intel Соге 2 Quad К2 Монитор 19" К3 Клавиатура 104 кл. К4 Мышь Беспроводная в таблицу «Поставщики» введем поле Код поставщика (табл. 3.4). Таблица 3.4. Поставщики Код поставщика П1 П2 Название фирмы Фирма1 Фирма2 Адрес Адрес1 Адрес2 ГБОУ СОШ № 840 Связывание таблиц После создания множества таблиц, содержащих данные, относящиеся к разным аспектам базы данных, необходимо обеспечить целостность базы данных. Для этого необходимо связать таблицы между собой. При связи в отношении «один-ко-многим» каждой записи в одной (главной) таблице могут соответствовать несколько записей в другой (подчиненной) таблице, а запись в подчиненной таблице не может иметь более одной соответствующей ей записи в главной таблице. Если одной записи в первой таблице могут соответствовать несколько записей во второй таблице, а одной записи во второй таблице - несколько записей в первой таблице, то реализуется связь в отношении «многие-ко-многим». ГБОУ СОШ № 840 В нашем случае реализуется именно такая связь. Одной записи в таблице «Комплектующие» соответствуют две за- писи в таблице « Поставщики » , так как устройства одного вида продаются двумя фирмами. Одной же записи таблицы «Поставщики» соответствуют четыре записи таблицы «Комплектующие», так как одна фирма продает устройства четырех разных видов. Две таблицы, находящиеся в отношении «многие-ко- многим», могут быть связаны только с помощью третьей (связующей) таблицы. Таблицы «Комплектующие» и «Поставщики» можно связать в отношении «многие-ко-многим» путем создания двух связей с отношением «один-ко-многим» для таблицы «Цена», Таблицы «Комплектующие: и «Поставщики: будут главными по отношению к таблице «Цена». Связь между таблицами устанавливает отношения между совпадающими значениями в полях. В нашем примере связываемые поля имеют одинаковые имена, в этом случае СУБД устанавливает связь автоматически, по команде. В противном случае связываемые поля надо указывать вручную. ГБОУ СОШ № 840 С первичным ключом главной таблицы связывается одноименное поле подчиненной таблицы (внешний ключ). В главной таблице «Комплектующие» поле Код комплектующих является первичным ключом, соответственно в подчиненной таблице «Цена» должно существовать одноименное поле, которое является внешним ключом. Таблица «Поставщики» также является главной по отношению к таблице «Цена». Ее поле Код поставщика является первичным ключом, соответственно в подчиненной таблице «Цена» должно существовать одноименное поле, которое является внешним ключом. Таким образом, таблица «Цена» должна содержать следующие поля (табл. 3.5): • Счетчик (первичный ключ); • Код комплектующих (поле внешнего ключа для таблицы «Комплектующие» ); • Код поставщика (поле внешнего ключа для таблицы «Поставщики» ); • Цена (числовое поле). ГБОУ СОШ № 840 Счетчик 1 2 3 4 5 6 7 8 Код комплектующих К1 К1 К2 К2 К3 кз К4 К4 Код поставщика П1 П2 П1 П2 П1 П2 П1 П2 Цена, руб. 9000 10000 5000 6000 250 300 300 350 Межтабличная связь обеспечивает целостность данных. Связанные таблицы представляют собой единую базу данных, в которой можно создавать новые таблицы, а также запросы и отчеты, содержащие данные из связанных таблиц. Прежде чем приступить к созданию многотабличной базы данных, необходимо продумать ее проект. Проект представляет собой модель будущей базы данных, состоящей из объектов и их связей, необходимых для выполнения поставленных задач. Процесс проектирования включает, прежде всего, определение перечня необходимых таблиц и задание их структуры, а также установки типа связей между этими таблицами. ГБОУ СОШ № 840 Задание: • создать реляционную многотабличную базу данных «Компьютеры», в качестве основных объектов которой будут использованы три таблицы: «Комплектующие», «Поставщики» и «Цена». Таблицы «Комплектующие» и «Поставщики» должны быть связаны отношением «многие-ко-многим» с помощью таблицы «Цена»; • создать запрос, который осуществляет отбор данных, необходимых для закупки дешевого системного блока. Итак, прежде всего, необходимо создать три таблицы: «Комплектующие», «Поставщики» и «Цена». Создать в СУБД Мiсrosоft Access 2010 новую базу данных с помощью команды [Создать]. В появившемся диалоговом окне в текстовом поле Имя файла: присвоить файлу базы данных имя Компьютеры. accdb. Щелкнуть по кнопке Создать. Таблица «Комплектующие» должна содержать комплектующих, Наименование и Описание. три текстовых поля: Код ГБОУ СОШ № 840 1. В диалоговом окне Компьютеры: база данных создать таблицу «Комплектующие» и ввести данные. 2. Ввести команду [Режим Конструктор ]. В качестве первичного ключа задать поле Код комплектующих. 3. Создать таблицу «Поставщики», выполнив рассмотренную выше последовательность действий. Ввести данные. Первичным ключом является поле Код поставщика ГБОУ СОШ № 840 Таблица «Цена» должна содержать поля Счетчик, Код комплектующих, Код поставщика, а также поле Цена. В качестве первичного ключа этой таблицы будет использоваться поле Счетчик. 4. С помощью аналогичных действий создать таблицу «Цена» и ввести данные Таблицы «Комплектующие» и «Поставщики» должны быть связаны отношением «один-ко-многим» С таблицей «Цена». Таблица «Цена» содержит поля Код комплектующих и Код поставщика, являющиеся внешними ключами исходных таблиц. ГБОУ СОШ № 840 Установим связи между таблицами. 5. Ввести команду [Работа с базами данных-Схема данных]. Связь в отношении «многие-ко-многим» между таблицами «Комплектующие» и «Поставщики» через таблицу «Цена» будет установлена Созданная многотабличная база данных «Компьютеры» состоит из трех связанных таблиц и поэтому обладает целостностью данных. Это значит, что можно создавать запросы, формы и отчеты, которые используют данные из разных таблиц. Создадим, например, запрос, который осуществляет отбор данных, необходимых для закупки дешевого системного блока. ГБОУ СОШ № 840 Ввести команду [Режим-Конструктор]. 6. В таблице «Комплектующие» для поля Код комплектующих ввести условие равно "К1", в таблице «Поставщики» для полей Название фирмы и Адрес установить вывод на экран, в таблице «Цена» для поля Цена ввести условие <9500. ГБОУ СОШ № 840 7. Ввести команду [Режим-Режим таблицы]. Появится результат выполнения запроса.