DBMS - Реляционная алгебра

Здравствуйте, будущие маги баз данных! Я рад быть вашим проводником в этом захватывающем путешествии по магическому миру реляционной алгебры. Как кто-то, кто преподавал informatikу не один год (давайте просто скажем, что я помню времена, когда диски действительно были гибкими), я могу заверить вас, что овладение этой темой будет как получение суперсилы в мире баз данных. Так что, погружаемся!

DBMS - Relational Algebra

Реляционная алгебра

Представьте, что вы организуете свою обширную коллекцию action figures супергероев (или, может быть, это только я). Реляционная алгебра - это как набор особых сил, которые позволяют вам manipulate и запрашивать вашу коллекцию самыми полезными способами. Это основа того, как мы взаимодействуем с реляционными базами данных, предоставляя теоретический framework для операций над отношениями (таблицами).

Основные концепции

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

  1. Отношения - это множества кортежей (строк)
  2. Атрибуты - это заголовки столбцов
  3. Операции производят новые отношения в качестве своего результата

Теперь посмотрим на суперсилы (операции), которые у нас есть в нашем распоряжении:

Операция Символ Описание
Выбор σ Фильтрует строки по условию
Проекция Выбирает特定的 столбцы
Объединение Объединяет два совместимых отношения
Разность множеств Удаляет кортежи из одного отношения, которые появляются в другом
Кардиный продукт Χ Комбинирует каждую строку одного отношения с каждой строкой другого
Переименование ρ Переименовывает атрибуты или отношения

Операция выбора (σ)

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

Синтаксис: σ<условие>(отношение)

Давайте представим, что у нас есть таблица под названием Heroes:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |

Если мы хотим найти всех героев младше 100 лет:

σ Age < 100 (Heroes)

Это даст нам:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Barry  | Speed        | 28  |

Смотрите? Мы отфильтровали Диану, нашу возрастную женщину-героиню!

Операция проекции (∏)

Операция проекции - это как уменьшающий луч. Она позволяет вам выбирать特定的 столбцы, уменьшая ширину вашего отношения.

Синтаксис: ∏<список атрибутов>(отношение)

Используя нашу таблицу Heroes, если мы хотим только имена и силы:

∏ Name, Power (Heroes)

Результат:

| Name   | Power        |
|--------|--------------|
| Bruce  | Intelligence |
| Clark  | Flight       |
| Diana  | Strength     |
| Barry  | Speed        |

Мы уменьшили нашу таблицу, сосредоточившись только на том, что нам нужно!

Операция объединения (∪)

Операция объединения - это как слияние в Dragon Ball Z - она объединяет два совместимых отношения.

Синтаксис: Отношение1 ∪ Отношение2

Давайте представим, что у нас есть другая таблица под названием Sidekicks:

| Name   | Power   | Age |
|--------|---------|-----|
| Robin  | Acrobat | 22  |
| Jimmy  | None    | 25  |

Мы можем объединить Heroes и Sidekicks:

Heroes ∪ Sidekicks

Результат:

| Name   | Power        | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |
| Robin  | Acrobat      | 22  |
| Jimmy  | None         | 25  |

Теперь у нас есть超级команда!

Разность множеств (−)

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

Синтаксис: Отношение1 − Отношение2

Если мы хотим найти героев, которые не являются подручными:

Heroes − Sidekicks

Это даст нам нашу исходную таблицу Heroes, так как никто из них не находится в таблице Sidekicks.

Кардиный продукт (Χ)

Кардиный продукт - это как создание альтернативных вселенных, где каждый герой встречает каждого подручного.

Синтаксис: Отношение1 Χ Отношение2

Heroes Χ Sidekicks

Это даст таблицу с每一种可能的组合 of героев и подручных. Это большая таблица, так что я не буду показывать ее полностью, но вот фрагмент:

| HName  | HPower       | HAge | SName | SPower  | SAge |
|--------|--------------|------|-------|---------|------|
| Bruce  | Intelligence | 35   | Robin | Acrobat | 22   |
| Bruce  | Intelligence | 35   | Jimmy | None    | 25   |
| Clark  | Flight       | 30   | Robin | Acrobat | 22   |
| Clark  | Flight       | 30   | Jimmy | None    | 25   |
...

Операция переименования (ρ)

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

Синтаксис: ρ new_name (old_name)

Если мы хотим переименовать атрибут Power в Superpower:

ρ Superpower←Power (Heroes)

Результат:

| Name   | Superpower   | Age |
|--------|--------------|-----|
| Bruce  | Intelligence | 35  |
| Clark  | Flight       | 30  |
| Diana  | Strength     | 5000|
| Barry  | Speed        | 28  |

Реляционное исчисление

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

Существует два типа:

  1. Tuple Relational Calculus (TRC)
  2. Domain Relational Calculus (DRC)

Например, в TRC, чтобы найти всех героев со способностью "Flight":

{H | H ∈ Heroes ∧ H.Power = "Flight"}

Это говорит "Дайте мне все кортежи H из Heroes, где H's Power равен Flight."

И вот и все,年轻的 padawans! Вы только что повысили свои навыки работы с базами данных. Помните, с grandes poderes comes grande responsabilidade – используйте эти операции реляционной алгебры wisely, и вы будете запрашивать базы данных как профи в кратчайшие сроки. Теперь идите и организуйте свои данные с точностью настоящего супергероя!

Credits: Image by storyset