Что такое реляционная таблица

SQL и NoSQL: инь и ян в мире баз данных

SQL или NoSQL — вот в чём вопрос. Чем они различаются? Это конкуренты или сотрудники? Что о них спрашивают на собеседовании?

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

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

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

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

Что такое реляционные базы данных

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

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

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

Реляционную модель данных придумал Эдгар Кодд ещё в семидесятых годах прошлого века.

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

Кодд доказал, что любое представление данных сводится к совокупности двумерных таблиц особого вида, который в математике называется отношением (relation) — отсюда и слово «реляционная» в переводе названия.

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

А ещё Эдгар Кодд дал жизнь языку SQL.

Основные понятия

Отношение — это двумерная таблица с уникальным именем. Она состоит из строк (записей) и столбцов (атрибутов).

Каждая строка таблицы представляет некоторый объект реального мира (экземпляр сущности) или соотношения между объектами.

Столбцы — это атрибуты сущности, для сущности каждого типа они свои.

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

А что там внутри. Пример нормализации

Разберём устройство реляционной БД подробнее на примере. Позже это поможет нам понимать и сравнивать базы разных типов.

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

Телефон у компании многоканальный. Поэтому одному и тому же оператору могут звонить разные клиенты, а один и тот же клиент может попадать на разных операторов с разными вопросами.

clientclient_phoneoperatoroperator_phonequestionanswerdate
Вася8 (902) 111-11-11Оператор 18 (800) 111-11-11Когда принтер готов будет?!Готов, забирайте.10.02.2021
Лера8 (910) 222-22-22Оператор 18 (800) 111-11-11На планшете стекло поменяете?Конечно, приносите.10.02.2021
Вася8 (902) 111-11-11Оператор 28 (800) 222-22-22Принтер не работает ваще.Приносите, посмотрим.20.02.2021

А теперь представьте, что записей в такой таблице десятки тысяч. И возникает такая ситуация: в компанию звонит самый любимый клиент и говорит, что сменил номер телефона. А нерешённых вопросов по этому клиенту в базе, скажем, сотня. Значит, придётся заменить номер телефона на новый по крайней мере в 100 записях, то есть внести изменения сразу во много строк таблицы Messages.

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

О подобном заботятся ещё на этапе проектирования базы, а предотвращают это путём нормализации отношений.

Что такое нормализация

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

Избыточность данных — это когда одни и те же данные хранятся в базе сразу в нескольких местах.

Проверим наш пример на избыточность

Каждая строка таблицы Messages содержит имя клиента и никнейм оператора, а также их телефоны. Причём в 1-й и 3-й строках мы видим звонки от одного и того же клиента, а в 1-й и во 2-й — ответы одного и того же менеджера. То есть в 1-й и 3-й строках дублируются имя и телефон клиента — Васи, а в 1-й и 2-й — никнейм менеджера «Оператор1».

Чтобы избавиться от дублирования информации, выделим сущности Клиент и Оператор. И вынесем специфичные для каждой атрибуты в отдельные таблицы.

В первой ( Clients) будут храниться имена и телефоны клиентов, а во второй ( Operators) — операторов. Кроме того, каждой записи в этих таблицах мы присвоим атрибут id — так называемый первичный ключ (его значение уникально, то есть не может повторяться в пределах таблицы). С его помощью мы установим связь с записями таблицы Messages.

Для этого к каждой записи в Messages (напомним, она всё ещё представляет сущность «звонок») добавим два новых атрибута (внешних ключа): id_client и id_oper. Они будут ссылаться на первичные ключи из таблиц Clients и Operators соответственно. Столбцы с именами и телефонами из таблицы Messages уберём.

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

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

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

Системы управления реляционными базами данных

Данные в таблицах не лежат мёртвым грузом — с ними работают системы управления базами данных ( СУБД ).

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

Языки манипулирования данными

Это декларативный язык. То есть инструкции в нём не идут одна за другой (не как в императивных языках). Каждый оператор SQL описывает только необходимое действие, а СУБД сама принимает решение, как его выполнить.

Например, чтобы выбрать все данные из таблицы Messages за 10.11.2020, делается запрос:

SELECT * FROM messages WHERE date = ‘10.11.2020’

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

В SQL изначально нет средств для создания печатных отчётов, экранных форм и других инструментов для разработки программ. Хотя SQL сам по себе не является полноценным (Тьюринг-полным) языком программирования, но его стандарт позволяет создавать процедурные расширения. Они доводят его функциональность до полноценного языка программирования.

При этом синтаксис SQL в разных СУБД может различаться. Кое-где даже используются его отдельные диалекты, например:

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

Это такие базы, в которые включены средства работы с объектными типами данных. А возникли они в связи с развитием объектно-ориентированных языков программирования.

В структуре таких баз и языке запросов используются классы, объекты, наследование. В этом направлении развиваются, например, Oracle и PostgreSQL.

Какие реляционные БД популярны в веб-разработке

MySQL

Это открытая СУБД, купленная Oracle в придачу к Sun Microsystems. С ней работают более половины (55,6%) всех разработчиков (по результатам опроса, который в 2020 году провёл сайт StackOverflow.com среди 65 тысяч респондентов).

Главные её преимущества — бесплатность и высокая скорость работы с данными. MySQL создавалась для обработки огромных массивов информации в промышленных масштабах, но благодаря доступности и быстродействию оккупировала Всемирную паутину, заслужив звание «СУБД всея интернета». И сегодня MySQL всё ещё самая удобная СУБД для работы с интернет-страницами и веб-приложениями.

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

SQLite

Эта СУБД использует большую часть стандартного языка SQL.

Главное преимущество SQlight — встраиваемость. Это объясняется тем, что SQlight не приложение типа «клиент-сервер» (в отличие от других реляционных СУБД), а библиотека, которую подключают непосредственно к программе.

И она тоже весьма популярна: достаточно сказать, что SQLite есть в каждом смартфоне. Например, в смартфонах на Android там хранятся контакты и медиа, а в iOS её используют многие приложения.

PostgreSQL

Её можно назвать самой продвинутой. Это не просто реляционная, а объектно-реляционная свободная СУБД.

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

Ограничения реляционных СУБД

Реляционные СУБД просты, удобны и предсказуемы. А их рынок один из самых консервативных в IT-отрасли. Поэтому даже при появлении множества NoSQL реляционные базы остаются самым востребованным инструментом в очень разных отраслях.

По данным DB-Engines за февраль 2021 года, мировая доля реляционных СУБД составляет 74% от всех:

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Однако реляционные БД не лишены недостатков.

Масштабируемость

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

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

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

Сложность

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

Представьте себе, что таблиц 100, 200, 1000, — СУБД будет работать медленно, а код запроса будет очень громоздким.

Гибкость

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

NoSQL как альтернатива традиционным БД

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

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

В NoSQL нет таких понятий, как строки, столбцы, таблицы и их соединения. Данные в нереляционных базах хранятся как объекты с произвольными атрибутами: это могут быть пары «ключ-значение», документы в формате JSON, графы и так далее.

Виды нереляционных баз данных

Базы NoSQL делятся на четыре основные категории (в зависимости от решаемых с их помощью задач).

Ключ-значение

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

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

Базы «ключ-значение» часто используют для кэширования данных и организации очередей.

Их достоинства — быстрый поиск и простое масштабирование.

Их недостаток — нельзя производить операции со значениями. Например — сортировать их или анализировать.

Базы «ключ-значение» применяют в поисковой системе Google, «Википедии», «Фейсбуке», интернет-магазине Amazon.

Одна из самых популярных — Redis. Её используют Uber, Slack, Stack Overflow, сайты гостиниц и туристические, социальная сеть Twitter.

Документоориентированные СУБД

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

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

Например, фрагмент документа с информацией о фильмах:

Документоориентированные базы используют в системах управления содержимым (CMS) — для хранения каталогов и пользовательских профилей.

Одна из самых популярных — MongoDB (там можно создавать процедуры на JavaScript).

Колоночные

Эти базы отличаются от реляционных лишь способом хранения данных на накопителе.

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

Например, если реляционная таблица выглядит так:

namecolorproperty
волксерыйзубастый
козабелаярогатая
капустазелёная

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

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

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

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

Одна из самых популярных СУБД такого типа — Apache Cassandra.

Графовые

В некоторых предметных областях данные удобно представлять в виде графов. Для их хранения лучше всего подходят графовые базы.

Вершины (или узлы графа) — это объекты (сущности), а рёбра графа — взаимосвязи между ними.

Например, информация о друзьях в социальных сетях просто идеальна для представления в виде графа:

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

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

Одна из популярнейших графовых СУБД с открытым кодом и собственным языком запросов — это Neo4j.

Что дальше?

Приходите к нам на курс «Базы данных для разработчиков». Вы изучите проектирование баз данных и язык SQL, узнаете, как выбрать СУБД для своего проекта и выжать из неё максимум. Сможете работать с базами в банковской сфере, бэкенд-разработке веб- и мобильных приложений.

Источник

Реляционные базы данных: объяснение понятий, вводный обзор

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Системы управления базами данных (СУБД) организует и структурирует данные таким образом, чтобы пользова­тели и прикладные программы могли их сохранять и выбирать из базы данных. Структуры данных и способы доступа к ним, обеспечиваемые конкретной СУБД, называются ее моделью данных. Модель данных определяет как «индивидуальность» СУБД, так и круг приложений, для которых она подходит наилучшим образом.

SQL представляет собой язык для работы с реляционными базами данных и ос­нован на реляционной модели данных. Что это такое? В каком виде информация хранится в реляционной базе данных? Чем реляционные базы данных отличаются от более ранних баз данных, таких как иерархические и сетевые? Какими пре­имуществами и недостатками обладает реляционная модель? В данной статье опи­сана реляционная модель данных, поддерживаемая языком SQL, и приведено ее сравнение с более ранними стратегиями организации баз данных.

Ранние модели данных

Когда в 1970-80-х годах стали популярны базы данных, появилось множество различных моделей данных. Каждая из них имела свои преимущества и недостат­ки, которые сыграли ключевую роль в развитии реляционной модели данных, появившейся во многом благодаря стремлению упростить и упорядочить ранние модели данных. Чтобы понять роль SQL и реляционных баз данных и оценить их вклад в развитие СУБД, следует кратко изучить ряд моделей данных, предшество­вавших появлению SQL.

Системы управления файлами

До появления СУБД все данные, которые содержались в компьютерной системе постоянно, хранились в виде отдельных файлов. Система управления файлами, ко­торая обычно являлась частью операционной системы, следила за именами фай­лов и их размещением. Системы управления файлами широко используются и се­годня — вероятно, вы знакомы со структурой папок и файлов, предоставляемой файловыми системами операционных систем Microsoft Windows или Macintosh компании Apple. Аналогичные файловые системы используются и в UNIX- серверах и всех коммерческих вычислительных системах.

В системах управления файлами модели данных, как правило, отсутствуют; эти системы ничего не знают о внутреннем содержимом файлов. В лучшем случае фай­ловая система поддерживает информацию о «типе файла» наряду с его именем, по­зволяя отличить документ текстового редактора от файла, содержащего данные о начисленной зарплате. Знание о содержимом файла — какие данные в нем хранятся и как они организованы — удел прикладных программ, использующих этот файл, как показано на рис. 1. В этом приложении начисления зарплаты каждая из про­грамм на языке программирования COBOL, работающая с основным файлом с ин­формацией о сотрудниках, содержит описание файла (file description, FD), в котором указана схема размещения данных в файле. Если структура данных изменяется — например, при решении хранить некоторую дополнительную информацию о каж­дом сотруднике— должны быть соответствующим образом модифицированы все программы, работающие с данным файлом. Это не слишком большая проблема в случае файла с документом текстового редактора или электронных таблиц, кото­рые обычно обрабатываются одной программой. Но при корпоративной работе с данными файлы зачастую совместно используются десятками, а то и сотнями про­грамм (см. рис. 1). При увеличении количества файлов и программ отделу обра­ботки данных придется тратить больше усилий на поддержание работоспособности старых программ, чем на разработку новых.

Проблемы сопровождения больших систем, основанных на файлах, привели в конце 1960-х годов к появлению СУБД. В основе СУБД лежала простая идея: изъ­ять из отдельных программ определение структуры содержимого файла и хранить это определение вместе с данными, в базе данных. Используя информацию, хра­нящуюся в базе данных, СУБД может играть существенно более активную роль как в управлении данными, так и в изменениях структуры данных. Кроме того, СУБД представляют собой расширения систем управления файлами, а не их заме­ну. СУБД используют системы управления файлами (обычно входящими в состав операционных систем) для хранения структур баз данных. Затем пользователь ба­зы данных обращается к СУБД, которая работает с деталями физического хране­ния информации. Это тот уровень абстракции, который обеспечивает физическую независимость данных.

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 1. Приложение для начисления зарплаты, исполь­зующее систему управления файлами

Иерархические базы данных

Одной из наиболее важных сфер применения первых СУБД было планирова­ние производства для компаний, занимающихся выпуском продукции. Например, если автомобильная компания хотела выпустить 10000 машин одной модели и 5000 машин другой модели, ей необходимо было знать, сколько деталей следует заказать у своих поставщиков. Чтобы ответить на этот вопрос, необходимо выяс­нить, из каких частей состоит изделие, затем определить, из каких деталей состоят эти части, и т.д. Например, машина состоит из двигателя, корпуса и ходовой час­ти; двигатель состоит из клапанов, цилиндров, свечей и т.д. Для обработки таких списков частей идеально подходят компьютеры.

Список составных частей изделия по своей природе является иерархической структурой. Для хранения данных, имеющих такую структуру, была разработана иерархическая модель данных, которую иллюстрирует рис. 2. В этой модели каж­дая запись базы данных представляла конкретную деталь. Между записями суще­ствовали отношения предок-потомок, связывающие каждую часть с деталями, вхо­дящими в нее.

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

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 2. Иерархическая база данных, содержащая информацию о составных частях

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

Одной из наиболее популярных иерархических СУБД была Information Management System (IMS) компании IBM, появившаяся в 1968 году. Ниже пере­числены преимущества IMS и реализованной в ней иерархической модели.

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

Сетевые базы данных

Если структура данных оказывалась сложнее, чем обычная иерархия, простота организации иерархической базы данных становилась ее недостатком. Например, в базе данных для хранения заказов один заказ может участвовать в трех различных отношениях «предок-потомок», связывающих заказ с покупателем, разместившим его, продавцом, принявшим его, и с заказанным товаром, что проиллюстрировано на рис. 3. Такие структуры данных не соответствовали строгой иерархии IMS.

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 3. Множественные отношения “предок-потомок”

В связи с этим для таких приложений, как обработка заказов, была разработана новая, сетевая, модель данных. Она расширила иерархическую модель, позволяя одной записи участвовать в нескольких отношениях «предок-потомок», именуе­мых множествами (set) (рис. 4). В 1971 году на конференции по языкам обработки данных (Conference on Data Systems Languages, CODASYL) был опубликован офи­циальный стандарт сетевых баз данных, который известен как модель CODASYL. Компания IBM не стала разрабатывать собственную сетевую СУБД, но в 1970-х го­дах независимые производители программного обеспечения реализовали сетевую модель в таких продуктах, как IDMS компании Cullinet, Total компании Cincom и СУБД Adabas, которые приобрели большую популярность. Однако IBM усовер­шенствовала IMS, обеспечив путь обхода правила единственного предка в класси­ческих иерархических структурах, в котором дополнительные предки рассматри­ваются как логические. Эта модель данных, ставшая известной как расширенная иерархическая модель, сделала базу данных IMS конкурентом сетевых СУБД.

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

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 4. Сетевая (CODASYL) база данных для работы с заказами

И опять программисту приходилось искать информацию в базе данных, после­довательно перебирая записи, но указывая при этом не только направление, но и требуемое отношение.

Сетевые базы данных обладали рядом преимуществ.

Конечно, у сетевых баз данных имелись недостатки. Подобно своим иерархиче­ским предкам, сетевые базы данных были очень «жесткими». Наборы отношений и структура записей должны были быть заданы наперед. Изменение структуры ба­зы данных обычно означало полную перестройку последней.

И иерархическая, и сетевая база данных были инструментами программистов. Чтобы получить ответ на вопрос какой товар наиболее часто заказывает компания X? или сколько всего заказано единиц товара Y?, программисту приходилось пи­сать программу для навигации по базе данных, выборки нужных записей и под­счета результата. Реализация пользовательских запросов часто затягивалась на не­дели и месяцы, и к моменту появления программы возвращаемая ею информация часто оказывалась бесполезной.

Недостатки иерархической и сетевой моделей привели к повышенному инте­ресу к новой реляционной модели данных, впервые описанной доктором Коддом в 1970 году. Поначалу она представляла лишь академический интерес. Сетевые ба­зы данных продолжали оставаться важной технологией на протяжении 1970-х и в начале 1980-х годов, особенно в мини-компьютерных системах, переживавших пик популярности. Однако в середине 1980-х годов начался взлет реляционной моде­ли. В начале 1990-х годов сетевые базы данных утратили популярность и сегодня не играют значительной роли на рынке баз данных.

Реляционная модель данных

Реляционная модель данных, предложенная Коддом, была попыткой упростить структуру базы данных. В ней отсутствовала явная структура «предок-потомок», а все данные были представлены в виде простых таблиц, разбитых на строки и столбцы. На рис. 5 показана реляционная версия рассмотренной выше сетевой базы данных, содержащей информацию о заказах (рис. 4).

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 5. Реляционная база данных для работы с заказами

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

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

Приведенное определение не оставляет места пользовательским структурам, та­ким как встроенные указатели иерархических и сетевых СУБД. Реляционная СУБД способна реализовать отношения «предок-потомок», однако эти отношения пред­ставлены исключительно значениями, содержащимися в таблицах базы данных.

Учебная база данных

На рис. 6 показана маленькая реляционная база данных для приложения, вы­полняющего обработку заказов. Большинство примеров в данном блоге построено на ее основе. Полное описание структуры и содержимого учебной базы данных, изображенной на рис. 6, приведено в приложении А, «Учебная база данных». Здесь представлено только по нескольку строк каждой таблицы.

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 6. Учебная база данных (представлена частично)

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

Таблицы

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

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 7. Структура реляционной таблицы

Каждый вертикальный столбец таблицы OFFICES представляет один элемент данных для каждого из офисов. Например, в столбце CITY содержатся названия городов, в которых расположены офисы. В столбце SALES содержатся объемы продаж, обеспечиваемые офисами. В столбце MGR содержатся идентификаторы управляющих офисами.

Все значения, содержащиеся в одном и том же столбце, являются данными од­ного типа. Например, в столбце CITY содержатся только слова, в столбце SALES — денежные суммы, а в столбце MGR — целые числа, представляющие идентификаторы служащих. Множество значений, которые могут содержаться в столбце, на­зывается доменом этого столбца. Доменом столбца CITY является множество всех названий городов. Домен столбца SALES — это любая денежная сумма. Домен столбца region состоит всего из двух значений, «Eastern» и «Western», поскольку у компании всего два торговых региона.

У каждого столбца в таблице есть свое имя, которое обычно служит заголовком столбца. Все столбцы в одной таблице должны иметь уникальные имена, однако разрешается присваивать одинаковые имена столбцам, расположенным в различ­ных таблицах. На практике такие имена столбцов, как NAME (имя), ADDRESS (адрес), PRICE (цена) и тому подобные, часто встречаются в различных таблицах одной базы данных.

Столбцы таблицы упорядочены слева направо, и их порядок определяется при создании таблицы. В любой таблице всегда есть как минимум один столбец. В стандарте ANSI/ISO максимально допустимое число столбцов в таблице не ука­зывается; однако почти во всех коммерческих СУБД такой предел существует, но он редко бывает меньше 255 столбцов.

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

В таблице может содержаться любое количество строк. По очевидным причи­нам допускается существование таблицы с нулевым количеством строк. Такая таб­лица называется пустой. Пустая таблица сохраняет структуру, определенную ее столбцами, просто в ней не содержатся данные. Стандарт ANSI/ISO не наклады­вает ограничений на количество строк в таблице, и во многих СУБД размер таб­лиц ограничен лишь свободным дисковым пространством компьютера. В других СУБД имеется максимальный предел, однако обычно он весьма высок, — два мил­лиарда строк, а то и больше.

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

Поскольку строки в реляционной таблице не упорядочены, нельзя выбрать строку по ее номеру в таблице. В таблице нет «первой», «последней» или «тринадцатой» строки. Тогда каким же образом можно выбрать в таблице кон­кретную строку, например строку для офиса, расположенного в Денвере?

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 8. Таблица с составным первичным ключом

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

Хотя первичные ключи являются важной частью реляционной модели данных, в первых реляционных СУБД (System/R, DB2, Oracle и других) явная их поддерж­ка обеспечена не была. Как правило, проектировщики базы данных сами следили за тем, чтобы у всех таблиц были первичные ключи; в самих СУБД не было воз­можности задать для таблицы первичный ключ. И только СУБД DB2 Version 2, появившаяся в апреле 1988 года, была первым коммерческим SQL-продуктом с поддержкой первичных ключей. После этого подобная поддержка была добав­лена в стандарт ANSI/ISO, и сегодня практически все СУРБД предоставляют та­кую возможность.

Взаимоотношения

Одним из отличий реляционной модели от ранних моделей представления данных было то, что в ней отсутствовали явные указатели, такие как использовав­шиеся для реализации отношений «предок-потомок» в иерархической модели данных. Однако вполне очевидно, что такие отношения существуют и в реляци­онных базах данных. Например, в нашей учебной базе данных каждый из служа­щих закреплен за конкретным офисом, поэтому ясно, что между строками табли­цы OFFICES и таблицы SALES REPS существует отношение. Не приводит ли отсут­ствие явных указателей в реляционной модели к потере информации?

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

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 9. Отношение “предок-потомок” в реляционной базе данных

Внешние ключи

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

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

Что такое реляционная таблица. Смотреть фото Что такое реляционная таблица. Смотреть картинку Что такое реляционная таблица. Картинка про Что такое реляционная таблица. Фото Что такое реляционная таблица

Рис. 10. Множественные отношения “предок-потомок” в реляционной базе данных

Внешние ключи являются фундаментальной частью реляционной модели, по­скольку реализуют отношения между таблицами базы данных. К сожалению, как и в случае с первичными ключами, поддержка внешних ключей отсутствовала в первых реляционных СУБД. Она была реализована в DB2 Version 2, а затем добавлена в стандарт ANSI/ISO и теперь имеется во всех основных коммерческих СУБД.

Двенадцать правил Кодда для реляционных баз данных

Когда в средине 1980-х годов реляционная модель стала очень популярной, почти все производители СУБД стали добавлять слово «реляционный» в описание своих продуктов. Но ряд из них был не более чем тонким слоем SQL-подобного языка на поверхности сетевой или иерархической базы данных. Некоторые реали­зовывали только рудиментарную табличную структуру, даже не пытаясь реализо­вать язык запросов. Вскоре вопрос так что же такое настоящая реляционная ба­за данных? стал подниматься все чаще и чаще, а производители СУБД стали ут­верждать, что их продукты «реляционнее», чем продукты их конкурентов.

В 1985 году Тед Кодл (чья статья 15-летней давности определила реляционную модель данных) задался этим вопросом и ответил на него в журнале Compu­terworld (Is Your DBMS Really Relational? (Действительно ли ваша СУБД реляционная?, 14.10.1985) и Does Your DBMS Run By the Rules? (Работает ли ваша СУБД по правилам?, 21.10.1985)). Здесь он изложил двенадцать правил, которым должна соответствовать настоящая реляционная база данных.

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

Правило 2 указывает на роль первичных ключей при поиске информации в ба­зе данных. Имя таблицы позволяет найти требуемую таблицу, имя столбца — тре­буемый столбец, а первичный ключ — строку, содержащую искомый элемент данных. Правило 3 требует, чтобы отсутствующие данные можно было предста­вить с помощью значения NULL.

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

Правило 5 требует, чтобы СУБД использовала язык реляционной базы данных, например SQL, хотя явно SQL в правиле не упомянут. Такой язык должен под­держивать все основные функции СУБД, а не только выборку данных.

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

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

Правила 8 и 9 изолируют пользователей и прикладные программы от низко­уровневой реализации базы данных и даже от изменений в структуре таблиц.

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

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

И наконец, правило 12 предотвращает использование других средств работы с ба­зой данных, помимо ее подъязыка, поскольку это может нарушить ее целостность.

Заключение

SQL основан на реляционной модели данных, в которой данные организованы в виде коллекции таблиц.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *