Sql Scholl
Распечатать страницу
Перейти на главную Карта сайта Отправить сообщение

Объединение таблиц

Что такое объединения? и Что такое реляционные таблицы?

     Одной из самых мощных особенностей реализаций языка SQL является возможность "на лету" объединять таблицы при выполнении запросов на выборку данных. Объединения — это самые мощные операции, которые можно выполнить с использованием оператора SELECT языка SQL, поэтому тщательное изучение объединений и их синтаксиса является чрезвычайно важной частью процесса освоения SQL.

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

     Понять, что представляют собой реляционные таблицы, поможет пример из реальной жизни.
  • Предположим, что некоторая таблица базы данных содержит каталог продуктов, в котором для каждого предмета, включенного в каталог, выделена одна строка. Информация, которая хранится о каждом предмете, должна включать описание продукта и его цену, а также сведения о поставщике и компании, выпустившей данный продукт. Теперь предположим, что вы получили обширный каталог от одного из поставщиков. Где вы должны хранить информацию о поставщике (такую как имя, адрес и контактная информация)? Не рекомендуется хранить эти данные вместе с данными о его продуктах по нескольким причинам.
  • Потому что информация о поставщике одна и та же для всех его продуктов; повторение этой информации для каждого продукта приведет к напрасной потере времени и места на диске.
  • Если информация о поставщике изменяется (например, если он переезжает или изменяется его почтовый код), вам придется обновлять информацию каждый раз, когда вы будете вносить данные об этом поставщике.
  • Когда данные повторяются (а так происходит, когда информация о поставщике указывается для каждого продукта), высока вероятность того, что данные не будут каждый развводиться одним и тем же образом. Несовместимые данные очень трудно использовать при создании отчетов.

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

     Реляционные таблицы разрабатываются таким образом, что вся информация распределяется по множеству таблиц, причем для данных каждого типа создается отдельная таблица. Эти таблицы соотносятся (связываются) между собой через общие значения (и таким образом являются реляционными (относительными) в реляционной конструкции).
В нашем примере вы можете создать две таблицы: одну для хранения информации о поставщике, вторую — о его продуктах. Таблица Vendors содержит информацию о поставщиках, по одной строке для каждого поставщика, где обязательно значится его уникальный идентификатор. Это значение, называемое первичный ключ, может быть или идентификатором поставщика, или каким-то другим уникальным (неповторяющимся) значением.

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

     Что это дает? Давайте рассмотрим следующие моменты:

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

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

Для чего используют объединения?

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

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

Использование   интерактивных   инструментов СУБД

     Важно понимать, что объединение не является "физическим объектом" — другими словами, оно не существует как реальная таблица в базе данных. Объединение создается СУБД в случае необходимости и сохраняется только на время выполнения запроса. Многие СУБД предлагают графический интерфейс, который может быть использован для интерактивного определения отношений таблицы. Эти инструменты могут оказаться чрезвычайно полезными для поддержания целостности ссылочных данных. При использовании реляционных таблиц важно, чтобы только достоверные данные содержались в реляционных столбцах. Вернемся к нашему примеру: если в таблице Products хранится недостоверный идентификатор поставщика, его продукты окажутся недоступными, поскольку они не будут относиться ни к одному поставщику. Во избежание этого база данных должна разрешать пользователю вводить только достоверные значения (т.е. такие, которые представлены в таблице Vendors) в столбце идентификаторов поставщика таблицы Products. Целостность на уровне ссылок (целостность ссылочных данных) означает, что СУБД обязывает пользователя соблюдать правила, обеспечивающие целостность данных. И соблюдение этих правил часто обеспечивается при посредстве интерфейсов СУБД.