Подтвердить что ты не робот

Агрегатная реляционная алгебра (максимум)

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

4b9b3361

Ответ 1

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

Предположим, что у нас есть таблица T, и мы хотели бы найти максимум своего поля "значение". Во-первых, мы должны взять декартово произведение Т с собой - или, вернее, с копией самого себя, Т2. Затем мы выбираем строки, где T.value меньше, чем T2.value: это задает нам все нежелательные строки, значение которых меньше значения какой-либо другой строки. Чтобы получить максимальные значения, мы должны вычесть эти нежелательные строки из набора всех строк. И это так. По крайней мере, что основная идея, нам также нужно использовать проекции, чтобы получить размеры справа.

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

π(T.a1...Tan, T.value)(T)
    -
π(T.a1...Tan, T.value)(
    σ(T.value<T2.value)( ρ(T, T2) x T )
)

где π - оператор проектирования, - заданная разность, σ - оператор выбора, а ρ - оператор переименования.

SQLishly:

SELECT T.* FROM T
    MINUS
SELECT T.* FROM T, T as T2 WHERE T.value<T2.value

И более практично:

SELECT T.* FROM T LEFT JOIN T as T2 ON T.value<T2.value WHERE T2.value IS NULL

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

Ответ 2

Предположим, что у нас есть таблица T с атрибутами a1, a2,..., an, v, и нам нужно найти строку, где атрибут v имеет максимальное значение по сравнению со всеми другими строками.

Во-первых, нам нужно перекрестное произведение T и T '(копия T, где v была переименована в v1), поэтому мы можем сравнить значения v

T x ρ{a1, a2, ..., an, v1}T

Во-вторых, выберите строки, где v < v1, и мы получим все строки, значение v меньше, чем значение v, по крайней мере в одной строке. Это строки, которые нам нужно исключить позже:

σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T)

Затем спроектируйте столбцы с исходными атрибутами T (имена столбцов), поэтому у нас есть таблица с схемой T, содержащая все нежелательные строки, которые должны быть исключены из T на следующем шаге:

π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))

Наконец, исключите ненужные строки из T и мы получим строку с максимальным значением v:

T - π{a1, a2, ..., an, v}(σ{v < v1}(T x ρ{a1, a2, ..., an, v1}T))

(Я проработал это на основе ответа SaT и тестирования со Стэнфордом онлайн курс RA, так как я действительно не понял нотацию SaT, я поставьте решение в мои записи здесь, в котором условия оператора находятся в {}. Надеюсь, это может помочь кому-то в будущем)

Ответ 3

table1:= project field (table);
table2 (fieldrenamed):= project field (table);
Producted:=table1 mult table2;
minors:= select fild<fieldrenamed (producted);
result:=table1 difference (project field(minors)); 

Код соответствует winRDBI, поле - это атрибут, который вы хотите сравнить, чтобы получить максимальное значение. Таблица - это исходная таблица, в которой это поле.

Ответ 4

позволяет думать, что мы имеем отношение с атрибутом A и значениями 1,2,3

A

1
2
3

так что теперь..

project A и переименовать с A1

A1
1
2
3

снова project A и переименовать с A2

A2
1
2
3

присоедините это к A2<A1 i.e \join_{A2<A1}
так что - Схема вывода: (целое A2, целое число A1)

A2<A1

1|2
1|3
2|3

всегда слышать значения A2 будут меньше, чем A1, потому что мы join как это (A2<A1)

теперь проект A2, выход выглядит как ниже

A2
1
2

теперь diff с исходным атрибутом

A diff A2

A
1
2
3

 diff

A2
1
2

Вывод 3 которое является максимальным значением

Привет, я знаю, что кто-то должен помочь в редактировании, чтобы лучше выглядеть

\project_{Att}Relation

\diff

\project_{A2}(\rename_{A2}(\project_{Att}Relation)
              \join_{A2<A1}
             \rename_{A1}(\project_{Att}Relation))

Ответ 5

max(columnname) вернет максимальное значение в столбце columnname.