Linguagem de Consultas
com suporte a Preferências
AULA 10
PPG107 - 2012
SISTEMAS DE BANCO DE DADOS –
Pós-graduação em CC - UFU
Modelo de Preferência
 R(A1,...,An) : esquema relacional
 Operadores de Preferências locais:
 Atuam sobre os valores dos atributos.
 Permitem obter os melhores valores de acordo com
algum critério.
 Operadores de Preferências globais
 Atuam sobre as tuplas
 Resultam de uma combinação de operadores locais
 Permitem obter as melhores tuplas de R(A1,...,An),
satisfazendo de acordo com algum critério.
Operadores Locais : Aproximação
 AROUND <valor alvo>


Favorece valores próximos de um valor alvo.
Caso o valor alvo existe no banco de dados, este é
retornado. Caso contrário, o mais próximo deste valor
é retornado.
 BETWEEN [low,up]



Favorece valores dentro do intervalo [low,up]
Caso valores dentro do intervalo [low, up] existem, tais
valores são retornados.
Caso contrário, os valores mais próximos de low ou up
são retornados.
Exemplo
SELECT * FROM VIAGENS
PREFERRING DURATION AROUND 14
SELECT * FROM VIAGENS
PREFERRING
START-DAY BETWEEN [1/9, 5/9]
Operadores Locais:
Minimização, Maximização
 LOWEST (atributo)

Valores mínimos são privilegiados
 HIGHEST(atributo)

Valores máximos são privilegiados
 Versão SQL (agregados MIN e MAX)

Em PrefSQL é possivel aplicar LOWEST e
HIGHEST sobre uma expressão aritmética
envolvendo diversos atributos ou mesmo
sobre o resultado de uma store procedure.
Exemplo
SELECT * FROM APART
PREFERRING HIGHEST(Area)
SELECT * FROM APART
PREFERRING LOWEST(Preço/Area)
Operadores Locais
Favoritos / não-desejados
 POS(Atributo,Pos-set)
x < y se x não está em Pos-set e y ɛ Pos-set
 NEG(Atributo,Neg-set)
 x < y se x ɛ Neg-set e y ε Neg-set
 POS/NEG(Atributo,Pos-set,Neg-set)
 x < y se (x ɛ Neg-set e y ε Neg-set) ou
(x ɛ Neg-set e x ɛ Pos-set e y ε Pos-set )
 POS/POS(Atributo,Pos1-set,Pos2-set)


x < y se (x ɛ Pos1-set e y ɛ Pos2-set) ou
(x ɛ Pos1-set e x ɛ Pos2-set e y ɛ Pos1-set) ou
(x ɛ Pos1-set e x ɛ Pos2-set e y ɛ Pos2-set)
Exemplo
 SELECT * FROM HOTELS
PREFERRING
POS/NEG (LOCAL,{centro,lidice},{umuarama})
Prefiro um hotel no centro ou no bairro lidice. Caso
não tenha nenhum disponível, pode ser qualquer um
menos no umuarama.
Composição de Preferências Locais
 Composição Pareto = todos os atributos tem
igual importância


t = (a1,…,an)
t > s se


s=(b1,…,bn)
Existe i talque ai > bi e
Para todo j ≠ i, bj não é melhor do que aj (ou
ambos são indiferentes, ou aj > bj)
Exemplo
 SELECT * FROM HOTELS
PREFERRING
POS/NEG (LOCAL,{centro,lidice},{umuarama})
AND
Preço BETWEEN [110, 150]
Introduzindo ordem de importância
entre os atributos
 CASCADE



Associa diferentes níveis de importância às
preferências locais
Aplica uma preferência após a outra.
A ordem em que são apresentadas as
preferências é igual à ordem de importância
entre os atributos
Exemplo
 SELECT * FROM HOTELS
PREFERRING
POS/NEG (LOCAL,{centro,lidice},{umuarama})
CASCADE
Preço BETWEEN [110, 150]
CASCADE
Dog-Accepted = ‘sim’
Combinando composição Pareto com
Cascade
Exemplo: cliente comprando um carro usado.
CARRO(MARCA,CATEGORIA,PREÇO,COR,POTENCIA,KM)
(1) Meu carro favorito deve ser da marca Chevrolet.
Não admito outra marca de carro.
Restrição forte sobre MARCA – não se trata de uma
preferência, mas de uma exigência.
(2) Prefiro que seja uma caminhonete, mas se não tiver,
prefiro que não seja van.
Preferência POS/NEG sobre CATEGORIA
Combinando composição Pareto com
Cascade - continuação
(3) Igualmente importante, quero gastar em torno de 40
mil reais e o carro deve ser tão potente quanto
possível.
Preferência AROUND sobre PREÇO e HIGHEST
sobre POTENCIA
(4) Menos importante para mim é a cor, embora se for
para escolher, prefiro vermelho.
Preferência POS sobre COR
(5) Se houver muitas opções possiveis, decido pelo que
tem menos quilômetros rodados.
Preferência LOWEST sobre KM
Combinando composição Pareto com
Cascade - continuação
SELECT * FROM CARRO
WHERE MARCA = ‘Chevrolet’
PREFERING
POS-NEG(CATEGORIA,{Caminhonete},{Van})
AND PREÇO AROUND 40000
AND HIGHEST(POTENCIA)
CASCADE POS(COR,{Vermelho})
CASCADE LOWEST(KM)
Funções de Qualidade
 Tuplas selecionadas ou rejeitadas pela
cláusula WHERE:

razão da aceitação ou rejeição é clara – não
satisfaz a condição especificada.
 Tuplas selecionadas ou rejeitadas pela
cláusula PREFERRING :

Razão da aceitação ou rejeição não é clara –
não depende somente da tupla, mas também
de seus competidores.
As Funções de Qualidade

TOP(A) : verdadeiro se o valor para o atributo
A é o melhor.

LEVEL(A) = n se o valor do atributo A dista do
valor optimal de n unidades. O valor optimal
está no nível 1.

DISTANCE(A) : para atributos numéricos.
DISTANCE(A) = n se
| valor(A) – valor optimal | = n
Exemplo
Carro MARCA
t1
t2
t3
t4
Alfa Ro
Honda
Jaguar
Audi
t5 Mercedes
t6 Toyota
COR
KM
Branco 19
Verde 19
Amar. 35
Verm. 40
Verm 43
Amar. 51
t1
t2
t6
t3
t4
t5
SELECT MARCA, COR, KM, LEVEL(COR), DISTANCE(KM)
FROM CARRO
PREFERRING POS-POS(COR, {branco}, {Amarelo})
AND KM AROUND 40
Exemplo - continuação
RESULTADO
MARCA
COR
KM L(COR) DIST(KM)
t4
Audi
Verm.
40
t3
Jaguar
Amar.
t1
Alfa Ro
Branco
35
19
3
2
1
0
5
21
Controle de Qualidade
 Utilizado para retornar melhores alternativas,
quando as preferências não podem ser
totalmente satisfeitas.
 Utilizada também quando o usuário
estabelece um certo grau de qualidade para
as respostas.
Exemplo
Um cliente de uma agência de viagens procura um
“pacote” que tenha início por volta do dia 3 de Julho
e dure aproximadamente 2 semanas. Mas não aceita
variações acima de dois dias para cada critério.
SELECT *
FROM VIAGEM
PREFERRING start_day AROUND ‘3/7/2009’
AND DURATION AROUND 14
BUT ONLY DISTANCE(start_day) <= 2
AND DISTANCE(duration) <= 2
Bloco básico de PrefSQL
SELECT <Lista atributos, funções de qualidade>
FROM < tabelas>
WHERE <condições>
PREFERRING <condições de preferência>
GROUPING <lista de atributos>
BUT ONLY <condições but_only>
ORDER BY <lista de atributos>
Semântica de PrefSQL
 Executa as operações de junção da cláusula FROM
e seleciona as tuplas verificando as condições da
cláusula WHERE. Obtém-se assim uma relação R.
 Encontra as tuplas optimais com relação às
preferências da cláusula PREFERRING.
 As tuplas optimais pertencentes à relação R são
retornadas caso exista alguma nestas condições.
 Caso contrário: considera todas as tuplas de R
satisfazendo a condição BUT ONLY e retorna
aquelas que não são dominadas.
Plano de Execução básico
SELECT ------: PROJEÇÃO
BUT-ONLY
≠ø
SelectBest ---:
=ø
BEST-:
TUPLAS
OPTIMAIS
satisfazendo
condição do
Where
SELECIONA TUPLAS
NÃO-DOMINADAS
WHERE ----: SELEÇÃO
FROM ----: OPERADOR DE JUNÇÃO
R1
…
Rn
Exemplo
Tupla
ideal
t7
t1
t4
t2
Não satisfaz a restrição “hard”
da cláusula where
t2 e t4 são as melhores
satisfazendo as preferências
t5
t3
Banco de dados só contém
t2, t4, t5, t7
t2 satisfaz a restrição but-only
t4 não satisfaz a restrição but-only
t6
Resposta: t2
Características da versão 1.3
 Consultas de PREFSQL podem ser
invocadas como sub-consulta do comando
INSERT.
 Sub-consultas da cláusula WHERE não
podem conter a cláusula PREFERRING.
 A cláusula ORDER BY não aceita ordenação
por valores de uma função de qualidade.
 Ordenação por função de qualidade deve ser
codificada de forma ad-hoc.
Implementação de PrefSQL
 Implementação iniciou em 1997- grupo alemão da Universidade
de Augsburg. Primeira versão comercial em 1999.
 Consultas com preferências são traduzidas em consultas SQL.
 Um driver JDBC de Preferências se responsabiliza por esta
tradução e otimização.
 Em seguida o driver JDBC standard de SQL envia a consulta
para o SGBD.
 O otimizador SQL do SGBD otimiza a consulta mais uma vez.
 O plano de execução mais adequado é executado pelo SGBD.
Esquema Geral
Aplicação (ex. e-comércio)
Driver JDBC de Preferências
Otimizador de Preferências
SQL do SGBD
Driver JDBC standard do SQL
Procedimento Geral para encontrar as
melhores tuplas
1. Max:= ø
2. Seleciona uma tupla t1 em R
3. Insere t1 em Max se não existe nenhuma
tupla t2 em R que é melhor do que t1.
4. Repete passos (2) e (3) até que todas as
tuplas foram selecionadas.
5. Retorna Max = tuplas não-dominadas.
Otimizador de Preferências
 Pode invocar algoritmos específicos
(bibliotecas) para encontrar as melhores
tuplas.
OU
 Pode invocar um tradutor que transforma a
consulta com preferência em uma consulta
SQL normal.
 Cabe ao otimizador de preferências analisar
qual a melhor política.
Exemplo
Select * FROM CARROS
PREFERRING MARCA = ‘Audi’ AND
DIESEL = ‘sim’
Semântica Pareto: t1 > t2 se
t1(MARCA) = ‘Audi’ E t2(MARCA) ≠ ‘Audi’ E t1(DIESEL) = t2(DIESEL)
t1(MARCA) = ‘Audi’ E t2(MARCA) ≠ ‘Audi’ E t2(DIESEL) = ‘não’
t1(DIESEL) = ‘sim’ E t2(DIESEL) = ‘não’ E t1(MARCA) = t2(MARCA)
t1(DIESEL) = ‘sim’ E t2(DIESEL) = ‘não’ E t2(MARCA) ≠ ‘Audi’
Tradução em SQL
Create View Aux AS
SELECT *, CASE WHEN MARCA = ‘Audi’ THEN 1 ELSE 2 END AS MARCALEVEL,
CASE WHEN DIESEL = ‘Sim’ THEN 1 ELSE 2 END AS DIESEL-LEVEL
FROM CARROS;
AUX
MARCA MODELO KM DIESEL MARCA-LEVEL DIESEL-LEVEL
1
1
1
2
2
1
2
2
Tradução em SQL
INSERT INTO MAX
SELECT MARCA, MODELO, KM, DIESEL FROM AUX A1
WHERE NOT EXISTS
(SELECT * FROM AUX A2
WHERE (A2.MARCA-LEVEL < A1.MARCA-LEVEL AND
A2.DIESEL-LEVEL <= A1.DIESEL-LEVEL)
OR
(A2.DIESEL-LEVEL < A1.DIESEL-LEVEL AND
A2.MARCA-LEVEL <= A1.MARCA-LEVEL)
Discussão
 PrefSQL não é uma extensão de SQL standard.
 Não tem um poder de expressão maior.
 SQL3 é mais expressivo do que SQL standard
 SQL3 permite consultas recursivas
 É provado que não é possivel realizar consultas
recursivas somente com os operadores do SQL
standard.
 Qualquer operador de otimalidade que tem a
semântica BMO (Best Matches Only) pode ser
expresso com os operadores do SQL standard.
Download

Slides