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