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

Реляционная алгебра
Представьте, что вы организуете свою обширную коллекцию action figures супергероев (или, может быть, это только я). Реляционная алгебра - это как набор особых сил, которые позволяют вам manipulate и запрашивать вашу коллекцию самыми полезными способами. Это основа того, как мы взаимодействуем с реляционными базами данных, предоставляя теоретический framework для операций над отношениями (таблицами).
Основные концепции
Прежде чем мы начнем кидаться модными символами, давайте установим некоторые базовые правила:
- Отношения - это множества кортежей (строк)
- Атрибуты - это заголовки столбцов
- Операции производят новые отношения в качестве своего результата
Теперь посмотрим на суперсилы (операции), которые у нас есть в нашем распоряжении:
| Операция | Символ | Описание | 
|---|---|---|
| Выбор | σ | Фильтрует строки по условию | 
| Проекция | ∏ | Выбирает特定的 столбцы | 
| Объединение | ∪ | Объединяет два совместимых отношения | 
| Разность множеств | − | Удаляет кортежи из одного отношения, которые появляются в другом | 
| Кардиный продукт | Χ | Комбинирует каждую строку одного отношения с каждой строкой другого | 
| Переименование | ρ | Переименовывает атрибуты или отношения | 
Операция выбора (σ)
Операция выбора - это как ультрафиолетовое зрение для вашей базы данных. Она позволяет вам фильтровать строки по определенному условию.
Синтаксис: σ<условие>(отношение)
Давайте представим, что у нас есть таблица под названием 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 баз данных запросов.
Существует два типа:
- Tuple Relational Calculus (TRC)
- 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
