Для чего нужно связывание таблиц базы данных
Связывание таблиц базы данных
Урок 53
Тема: «Связывание данных».
Теоретическая часть.
Связывание таблиц базы данных
Установление связей в Access дает возможность автоматически соединять данные из разных таблиц, таким образом, обеспечивается целостность базы данных.
Процесс установки связей между таблицами называют построением схемы базы данных.
Для установления связей между двумя таблицами необходимо определить в каждой из них поля для этого связывания. Эти поля не обязательно могут иметь одинаковые имена, но должны содержать однотипные данные.
Пример.Рассмотрим связь между двумя таблицами «Покупатель» и «Заказы» в базе данных Trade.mdb. Структура каждой таблицы представлена на рис. 4.10.
В таблице «Покупатель» ключевым полем является поле Код покупателя.Данное поле является счетчиком и содержит уникальные значения для каждой записи этой таблицы. Поле данной таблицы назовем первичным ключом.
Если каждый покупатель имеет право сделать только один заказ, то в таблице «Заказы» ключевым полем может являться аналогичное первой таблице поле-счетчик Код покупателя.В таблице «Заказы» ключевое поле Код покупателябудем называть внешним ключом.
В этом случае тип связи, установленной между первичным и внешним ключом, называют связью один к одному. Этот тип связи представлен на рисунке 4.11
Если в таблице «Заказы» один покупатель имеет право сделать несколько заказов, то поле Код покупателяуже не будетуникальным, так как может повторяться многократно. В этом случае тип данных в этом поле может принимать числовые значения, а ключевым полем с уникальными значениями может быть определено поле Номер заказа.В этом случае тип связи, установленной между одноименными полями Код покупателя в обеих таблицах, называют связью один ко многим, как показано на рисунке 4.12.
В реляционных базах данных между таблицами могут также создаваться связи типа многие ко многим.
Для создания Схемы данныхв СУБД Access необходимо выполнить следующее:
1. Откройте многотабличную базу данных, для которой между таблицами устанавливаются связи, например базу данных trade.mdb.
2. Щелкните мышью по значку Схема данных или выполните цепочку команд Сервис®Схема данныхна панели Стандартная.
4. Щелкните мышью на кнопке Добавить.На экране будет отображена таблица, которую мы добавили, как показано на рисунке 4.13. Затем таким же образом требуется добавить в Схему данныхостальные связываемые таблицы, например «Заказы» и щелкнуть мышью по кнопке Закрыть.
5. В окне первой таблицы щелкните мышью на поле, которое будете использовать для установки связи, например Код покупателя и перетащите его на совпадающее поле второй таблицы.
6. В окне Изменение связейубедитесь, что связаны необходимые поля и установите флажок Обеспечение целостности данных, затем нажмите кнопку Создать(Рис. 4.14).
В результате выполненных действий в окне Схема данныхдва связанных поля соединятся линией, как показано на рисунках 4.11 и 4.12.
В дальнейшем для сохранения созданных связей необходимо щелкнуть мышкой по кнопке Сохранитьи закрыть окно Схема данных.
Созданные связи в дальнейшем можно удалить в окне Схема данных, щелкнув мышью по линии связи, чтобы выделить ее, а затем нажать клавишу Delete (Удалить). Двойной щелчок мышью по линии связи приведет к открытию окна Изменение связей, в котором связи могут быть отредактированы.
Практическая часть.
Упражнения
Информационные технологии. 10 класс (Базовый уровень)
§ 2. Работа с таблицами базы данных
2.1. Создание таблиц базы данных
Таблица — основной объект базы данных, предназначенный для хранения данных в структурированном виде.
База данных может быть однотабличной, т. е. хранить одну таблицу. При большом количестве объектов с многочисленными свойствами хранение данных в одной таблице может быть неудобным для дальнейшего использования базы данных. В таком случае имеет смысл представить БД в виде нескольких таблиц, связи между которыми устанавливаются с помощью совпадающих полей, т. е. как многотабличную базу данных.
На основе таблиц создаются другие объекты базы данных.
В процессе создания таблиц можно выделить этапы:
1. Создание объекта Таблица (пример 2.1).
2. Описание структуры таблицы — имен полей, типов и свойств данных в них.
3. Ввод данных в таблицу.
Работать с таблицами баз данных можно в двух режимах (пример 2.2).
Описание структуры таблицы (пример 2.3) выполняется в режиме Конструктор (см. Приложение к главе 1).
Данные в таблицу вводятся в режиме Таблица. В этом режиме можно также просматривать и изменять структуру таблицы.
Таблицы в реляционных базах данных должны обладать следующими свойствами:
1. В таблице не может быть двух записей с полностью совпадающими данными.
2. Поля таблицы должны располагаться в порядке, который определяется при ее создании.
3. В таблице обязательно должно быть хотя бы одно поле.
Каждое поле должно иметь уникальное имя (одно в пределах таблицы). Все значения в одном поле имеют один тип (число, текст, дата и т. д.).
Таблица базы данных похожа на электронную таблицу, и в Access реализована возможность импортировать данные из электронных таблиц в БД (пример 2.4).
Пример 2.1. Создание объекта Таблица в Access.
Пример 2.2. Режимы работы с таблицами в Access.
Пример 2.3. Описание структуры таблицы.
Пример 2.4. Импорт таблицы из Excel в Access.
1. На вкладке Внешние данные выбрать Excel:
2. В окне Внешние данные нажать кнопку .
3. В окне Открытие файла выбрать файл с электронной таблицей и подтвердить выбор.
4. В окне Импорт электронной таблицы на каждом шаге сделать требуемый выбор и нажать кнопку Далее.
Например, на втором шаге поставить птичку, если содержимое первой строки импортируемой таблицы будет использоваться в качестве имен полей таблицы базы данных:
По завершении нажать кнопку
Связывание таблиц
Вы будете перенаправлены на Автор24
В процессе проектирования БД для размещения информации создается несколько таблиц, которые связываются между собой.
Многими СУБД при связывании таблиц выполняется автоматический контроль целостности данных, которые вводят в БД, согласно установленным связям. В результате повышается достоверность информации, которая хранится в базе данных.
Также связывание таблиц приводит к облегчению доступа к данным. Установление связей между таблицами при выполнении поиска, просмотра, редактирования, выборки и подготовки отчетов позволяет обеспечить возможность обращения к любому полю связанных записей. Это приводит к уменьшению количества явных обращений к таблицам и числа операций в каждой из них.
Основные виды связи таблиц
Между таблицами можно устанавливать бинарные (связь двух таблиц), тернарные (связь трех таблиц) и $n$-арные связи.
Чаще всего встречаются бинарные связи.
При связи двух таблиц выделяется основная и дополнительная (подчиненная) таблица. Логическое связывание таблиц происходит при помощи ключа связи.
Ключ связи, как и обычный ключ таблицы, содержит одно или несколько полей, которые в таком случае называются полями связи.
Связывание заключается в установлении соответственных полей связи основной и дополнительной таблиц.
Основная таблица может содержать обычные и ключевые поля связи. Поля связи подчиненной таблицы обычно являются ключевыми полями.
В зависимости от того, как соотнесены ключевые поля и поля связи, в общем случае между двумя таблицами могут быть установлены 4 основные вида связи:
Готовые работы на аналогичную тему
Связь вида 1:1
Связь 1:1 создается, если все поля связи основной и дополнительной таблиц – ключевые.
Т.к. значения ключевых полей обеих таблиц не могут повторяться, записи из этих таблиц взаимно-однозначно соотносятся.
Пусть существует основная О и дополнительная Д таблицы. Символом «$*$» обозначим ключевые поля, символом «$+$» обозначим поля, которые используются для связи.
В таблицах совпадают значения в полях связи, поэтому будут связаны запись (а, 10) таблицы О и запись (а, стол) таблицы Д, а также запись (в, 3) и (в, книга).
На практике связь 1:1 используется довольно редко, т.к. информацию, которая хранится в двух таблицах, можно объединить в одну таблицу, которая будет занимать намного меньше места в памяти компьютера.
Например, если объединить запись (а, 10) таблицы О и запись (а, стол) таблицы Д, то получим запись (а, 10, стол) новой псевдотаблицы.
Иногда удобно иметь больше одной таблицы. Например, при необходимости ускорения обработки, повышения удобства работы с общей информацией нескольких пользователей, обеспечения большей степени защиты информации и т.д.
Связь вида 1:М
Связь 1:М создается, если одной записи основной таблицы соответствуют более одной записи вспомогательной таблицы.
Рассмотрим связанные таблицы О и Д. Таблица О содержит информацию о видах мультимедийных устройств, а таблица Д – сведения о фирмах, которые производят эти устройства, и о наличии как минимум одного устройства на складе.
Таблица Д содержит 2 ключевых поля, поскольку одна фирма может производить устройства нескольких видов.
Если сопоставить записи таблиц по полю Код, то получим новые псевдозаписи. Например, псевдозапись (a, CD-ROM, Acer, да).
При сведении псевдозаписей в новую таблицу можно получить полную информацию обо всех видах мультимедийных устройств ПЭВМ, фирмах, которые их производят, и сведения о наличии этих устройств на складе.
Связь вида М:1
Связь М:1 создается, если нескольким записям основной таблицы соответствует одна запись дополнительной таблицы.
Рассмотрим связанные таблицы О и Д.
При связывании этих таблиц обеспечивается установление такого соответствия между записями, которое приводит к образованию новых псевдозаписей. Например, (деталь 1, чугун, марка1, 1.04.2016, 150), (деталь 1, чугун, марка2, 1.04.2016, 150) и т.д.
Связь вида М:М
Связь М:М возникает, если несколько записей дополнительной таблицы соответствуют нескольким записям основной таблицы.
Связь М:М, аналогично связи 1:1, не устанавливает подчиненность таблиц. Чтобы это проверить, нужно поменять местами основную и дополнительную таблицу и объединить информацию путем связывания. Порядок следования полей и порядок расположения записей полученных таблиц будет отличаться.
Получи деньги за свои студенческие работы
Курсовые, рефераты или другие работы
Автор этой статьи Дата написания статьи: 01 08 2016
Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)
Сегодня мы продолжаем наше путешествие в мир SQL и связанных баз данных. В третьей части этой серии мы узнаем, как работать с несколькими таблицами, которые имеют отношения друг с другом. Во-первых, мы рассмотрим некоторые базовые концепции, а затем начнем работать с JOIN queries в SQL.
Вы также можете увидеть базы данных SQL в действии, просмотрев SQL scripts, apps and add-ons на рынке Envato.
Напоминание
Введение
При создании базы данных здравый смысл подсказывает, что мы используем отдельные таблицы для разных типов сущностей. Например: клиенты, заказы, предметы, сообщения. Но нам также нужно иметь отношения между этими таблицами. Например, клиенты делают заказы, а заказы содержат предметы. Эти отношения должны быть представлены в базе данных. Кроме того, при получении данных с помощью SQL нам нужно использовать определённые типы запросов JOIN, чтобы получить то, что нам нужно.
Существует несколько типов отношений базы данных. Сегодня мы рассмотрим следующее:
При выборе данных из нескольких таблиц с отношениями мы будем использовать запрос JOIN. Существует несколько типов JOIN, и мы собираемся узнать следующее:
Мы также узнаем об оговорках ON и USING.
Отношения один к одному
Предположим, у вас есть таблица для клиентов:
Мы можем поместить информацию об адресе клиента в отдельную таблицу:
Теперь мы имеем отношение между таблицей Customers и таблицей Addresses. Если каждый адрес может принадлежать только одному клиенту, это отношение «Один к одному». Имейте в виду, что такого рода отношения не очень распространены. Наша начальная таблица, которая включала адрес вместе с клиентом, в большинстве случаев могла работать нормально.
Обратите внимание: теперь в таблице Customers есть поле с именем «address_id», которое ссылается на запись соответствия в таблице Address. Это называется «Foreign Key» и используется для всех видов отношений баз данных. Мы рассмотрим этот вопрос позже.
Мы можем показать отношения между клиентскими и адресными записями следующим образом:
Обратите внимание, что существование отношений может быть необязательным, например, есть запись клиента, у которой нет связанной записи адреса.
Отношения «один ко многим» и «многие к одному»
Это наиболее часто используемый тип отношений. Рассмотрим веб-сайт e-commerce со следующим:
В этих случаях нам необходимо создать отношения «один ко многим». Вот пример:
У каждого клиента может быть ноль, один или несколько заказов. Но заказ может принадлежать только одному клиенту.
Отношения «многие ко многим»
В некоторых случаях вам может потребоваться несколько экземпляров с обеих сторон. Например, каждый заказ может содержать несколько элементов. И каждый элемент также может быть в нескольких заказах.
Для этих отношений нам нужно создать дополнительную таблицу:
Таблица Items_Orders имеет только одну цель, а именно, чтобы создать отношение «многие ко многим» между элементами и заказами.
Вот картинка таких отношений:
Если вы хотите включить записи items_orders в график, это может выглядеть так:
Самостоятельные ссылки
Это используется, когда таблица должна иметь отношения с самой собой. Например, у вас есть реферальная программа. Клиенты могут направлять других клиентов на ваш веб-сайт. Таблица может выглядеть так:
Клиенты 102 и 103 были переданы клиентом 101.
На самом деле это может быть похоже на отношение «один ко многим», поскольку один клиент может ссылаться на нескольких клиентов. Также он может выглядеть, как древовидная структура:
Один клиент может ссылаться на ноль, одного или несколько клиентов. К каждому клиенту может обращаться только один клиент, или вообще никто.
Если вы хотите создать самостоятельную ссылку «многие ко многим», вам понадобится дополнительная таблица, вроде той, что мы говорили в предыдущем разделе.
Foreign Keys
До сих пор мы узнали только о некоторых концепциях. Теперь пришло время воплотить их в жизнь с помощью SQL. Для этой части нам нужно понять, что такое Foreign Keys.
В приведённых выше примерах отношений мы всегда имели эти поля «**** _ id», которые ссылались на столбец в другой таблице. В этом примере столбец customer_id в таблице Orders является столбцом Foreign Key:
В базе данных типа MySQL есть два способа создания столбцов внешних ключей:
Чёткое определение Foreign Key
Давайте создадим простую таблицу клиентов:
Теперь таблицу заказов, в которой будет Foreign Key:
Оба столбца (customers.customer_id и orders.customer_id) должны иметь одинаковую структуру данных. Если один является INT, другой не должен быть BIGINT, например.
Обратите внимание, что в MySQL только механизм InnoDB имеет полную поддержку Foreign Keys. Но другие механизмы хранения данных по-прежнему позволят вам указывать их без каких-либо ошибок. Кроме того, столбец Foreign Key индексируется автоматически, если не указать для него другой индекс.
Без явной декларации
Та же таблица заказов может быть создана без явного объявления столбца customer_id как Foreign Key:
Далее мы собираемся узнать о JOIN-запросах.
Визуализация отношений
Моим любимым программным обеспечением для проектирования баз данных и визуализации отношений Foreign Key является MySQL Workbench.
После разработки базы данных вы можете экспортировать SQL и запустить его на своем сервере. Это очень удобно для больших и сложных баз данных.
JOIN Queries
Для извлечения данных из базы, имеющей отношения, нам часто приходится использовать JOIN queries.
Прежде чем начать, давайте создадим таблицы и некоторые образцы данных для работы.
У нас 4 клиента. У одного клиента два заказа, у двух клиентов по одному заказу, а у одного клиента нет заказа. Теперь давайте посмотрим различные виды JOIN queries, которые мы можем запустить в этих таблицах.
Перекрестное соединение
Это тип JOIN query по умолчанию, если условие не указано.
Результатом является так называемый «Cartesian product» таблиц. Это означает, что каждая строка из первой таблицы сопоставляется с каждой строкой второй таблицы. Так как каждая таблица имела 4 строки, мы получили результат из 16 строк.
Ключевое слово JOIN может быть опционально заменено запятой.
Конечно, такой результат не очень полезен. Давайте посмотрим на другие типы соединений.
Обычное соединение
При таком типе JOIN query таблицы должны иметь имя соответствующего столбца. В нашем случае обе таблицы имеют столбец customer_id. Таким образом, MySQL будет присоединяться к записям только тогда, когда значение этого столбца соответствует двум записям.
Внутреннее соединение
Когда указано условие соединения, выполняется Inner Join. В этом случае было бы неплохо иметь поле customer_id в обеих таблицах. Результаты должны быть похожими на Natural Join.
Результаты те же, за исключением небольшой разницы. Столбец customer_id повторяется дважды, один раз для каждой таблицы. Причина в том, что мы просто попросили базу данных соответствовать значениям этих двух столбцов. Но сами они не знают, что представляют одну и ту же информацию.
Давайте добавим еще несколько условий в запрос.
ON Clause
Прежде чем перейти к другим типам соединений, нам нужно посмотреть ON clause. Это полезно для помещения условий JOIN в отдельное предложение.
Теперь мы можем отличить условие JOIN от условий WHERE. Но есть и небольшая разница в функциональности. Мы увидим это в примерах LEFT JOIN.
USING Clause
USING clause похоже на предложение ON, но оно короче. Если столбец имеет одинаковое имя в обеих таблицах, мы можем указать его здесь.
На самом деле это похоже на NATURAL JOIN, поэтому столбец join (customer_id) не повторяется дважды в результатах.
Левое (внешнее) соединение
Хотя у Энди нет заказов, его запись все ещё отображается. Значения под столбцами второй таблицы имеют значение NULL.
Это полезно для поиска записей, которые не имеют отношений. Например, мы можем искать клиентов, которые не разместили какие-либо заказы.
Всё, что мы сделали, это нашли NULL для order_id.
Также обратите внимание, что ключевое слово OUTER является необязательным. Вы можете просто использовать LEFT JOIN вместо LEFT OUTER JOIN.
Условия
Теперь давайте рассмотрим запрос с условием.
Так что случилось с Энди и Сэнди? LEFT JOIN должен был вернуть клиентов без соответствующих заказов. Проблема в том, что предложение WHERE блокирует эти результаты. Чтобы их получить, мы можем попытаться включить условие NULL.
У нас Энди, но нет Сэнди. Тем не менее это выглядит не так. Чтобы получить то, что мы хотим, нам нужно использовать ON clause.
Правое (внешнее) соединение
RIGHT OUTER JOIN работает точно так же, но порядок таблиц обратный.
На этот раз у нас нет результатов NULL, потому что каждый заказ имеет соответствующую запись клиента. Мы можем изменить порядок таблиц и получить те же результаты, что и в LEFT OUTER JOIN.
Теперь у нас есть эти значения NULL, потому что таблица Customers находится на правой стороне соединения.
Заключение
Спасибо, что прочитали статью. Надеюсь, вам понравилось! Пожалуйста, оставляйте свои комментарии и вопросы, и хорошего дня!
Не забудьте проверить SQL scripts, apps and add-ons на рынке Envato. Вы получите представление о возможностях баз данных SQL, и сможете найти идеальное решение, которое поможет вам в текущем проекте разработки.
Следуйте за нами на Twitter или подпишитесь на Nettuts + RSS Feed для получения лучших обучающих материалов по веб-разработке в Интернете.