what relacional examples entry database relational-database relational-algebra

database - examples - ¿Cómo puedo encontrar MAX con álgebra relacional?



relational database model (7)

Asumiendo que tienes una relación, A, con un solo atributo, ''a'' (reducir una relación más compleja a esto es una tarea simple en álgebra relacional, estoy seguro de que has llegado hasta aquí), así que ahora quieres encontrar el máximo valor en A.

Una forma de hacerlo es encontrar el producto cruzado de A consigo mismo, asegúrese de renombrar ''a'' para que su nueva relación tenga atributos con nombres distintos. por ejemplo:

(renombra ''a'' como ''a1'') X (renombra ''a'' como ''a2'')

ahora seleccione ''a1'' <''a2'', la relación resultante tendrá todos los valores excepto el máximo. Para obtener el máximo, simplemente encuentre la diferencia entre su relación original:

(A x A) - (select ''a1'' < ''a2'') ((rename ''a'' as ''a1'')(A) x (rename ''a'' as ''a2'')(A))

Luego use el operador del project para reducir a una sola columna como sugiere Tobi Lehman en el comentario a continuación.

Escribir esto en notación de álgebra relacional sería (si no recuerdo mal). Tenga en cuenta que el cambio de nombre final (es decir, ρ) es solo para terminar con un atributo que tiene el mismo nombre que en la relación original:

ρ a / a1a1 ((A x A) - σ a1 <a2a1 / a (A) x ρ a2 / a (A))))

Trabajando con bases de datos, ¿cómo puedo encontrar MAX usando álgebra relacional?


Olvidé la mayoría de la sintaxis de álgebra relacional ahora. Una consulta solo usando SELECT , PROJECT , MINUS y RENAME sería

SELECT v1.number FROM values v1 MINUS SELECT v1.number FROM values v1 JOIN values v2 ON v2.number > v1.number

¡Espero que puedas traducir!


Sé que esto es viejo, pero aquí hay una fórmula escrita a mano que podría ser útil.

Relación A: 1,2,3,4

1. First we want to PROJECT and RENAME relation A 2. We then to a THETA JOIN with the test a1<a2 3. We then PROJECT the result of the relation to give us a single set of values a1: 1,2,3 (not max value since a1<a2) 4. We then apply the difference operator with the original relation so: 1,2,3,4 --- 1,2,3 returns 4 4 is the Max value.


Solo mis dos centavos mientras intentaba resolver esto yo mismo.

Digamos que tenemos A = 1,2,3

Si utiliza

A x A - (select ''a1'' < ''a2'') ((rename ''a'' as ''a1'')(A) x (rename ''a'' as ''a2'')(A))

no obtendrá el valor máximo único sino dos columnas como 1 | 1, 2 | 1,3 | 2,3 | 1,3 | 2,3 | 3

la forma de obtener solo 3 es

project(a)A - project(a1)((select ''a1'' < ''a2'') ((rename ''a'' as ''a1'')(A) x (rename ''a'' as ''a2'')(A)))

Al menos eso es lo que tenía que hacer en una situación similar.

Espero que ayude a alguien


pensemos que tenemos una relación con un atributo A y valores 1,2,3

A 1 2 3

y ahora..

proyecto A valores y cambiar el nombre con A1

A1 1 2 3

volver a proyectar los valores A y renombrar con A2

A2 1 2 3

únete a esto con A2<A1 ie /join_{A2<A1}
entonces el - Esquema de salida: (A2 entero, A1 entero)

A2<A1 1|2 1|3 2|3

escuchar siempre los valores A2 serán menores que A1 porque nos join así ( a2<a1 )

ahora proyecto A2, la salida es como a continuación

A2 1 2

ahora diff con atributo original

A diff A2

A 1 2 3

diff

A2 1 2

La salida es 3 que es el valor máximo

Hola, sé que alguien tiene que ayudar en la edición, para una mejor mirada


Encuentra el MAX:

  • Estrategia:

    1. Encuentra esos x que no son el MAX .

      • Cambie el nombre de A relación como d para que podamos comparar cada A x con todas las demás.
    2. Use la set difference para encontrar aquellas A x que no se encontraron en el paso anterior.

  • La consulta es:


Project x(A) - Project A.x (Select A.x < d.x (A x Rename d(A)))