Quality Functions
Description
Quality functions can be used to reduce the size of a result set. The result of a Preference SQL query only consists of the BMO set. Normally, the underlying preference query has a multi-dimensional structure involving several attributes. The Pareto preference delivers compromise tuples which are not dominated by others. Having weak orders as input relations, quality functions are defined on categorical preferences by LEVEL_{SCORE_d}(aNumericalPreference) or on numerical preferences by DISTANCE(aNumericalPreference). Top tuples are identified by the zero value of any quality function for all attributes. The BUT ONLY clause may be used for postfiltering the BMO result set by quality functions in order to cancel compromise tuples of bad quality.
Quality functions may also be used in the projection list of the SELECT clause by naming any preference.
Definition of DISTANCE
Formal Definition of DISTANCE(aNumericalPreference)
distance(v,[low,up]):=
if v ∈ [low,up] then 0 else
if v < low then low − v else v − up
Definition of LEVEL
Formal Definition of LEVEL_{SCORE_d](aNumericalPreference)
Consider the above defined scoring function
distance(x,[low,up])
LEVEL_{SCORE_d}(x) := ⌈distance(x,[low,up]) / d⌉
Use Case
For the use case of purchasing a new car, consumers may decide that intervals of 1.000 EUR are precise enough to describe their preference with respect to the price. The price should be less than 5000 EUR. The age of the new car should be about 4 years. 2 years more are less do not matter. The age and the price are of equal importance.
SELECT name, age, LEVEL(p1), price, LEVEL(p2) FROM car PREFERRING (age AROUND 4, 2 AS p1) AND (price LESS THAN 5000, 1000 AS p2) |
Result set:
name | age | level(p1) | price | level(p2) |
car144 | 3 | 1.0 | 7000 | 2.0 |
car136 | 8 | 4.0 | 4000 | 0.0 |
car235 | 4 | 0.0 | 10000 | 5.0 |
car184 | 7 | 3.0 | 6000 | 1.0 |
The quality function level(aNumericalPreference) is used in the BUT ONLY clause to further reduce the result set by guaranteeing quality levels.
SELECT name, age, LEVEL(p1), price, LEVEL(p2) FROM car PREFERRING (age AROUND 4, 1 AS p1) AND (price LESS THAN 5000, 1000 AS p2) BUT ONLY LEVEL(p1) < 2 AND LEVEL(p2) < 3 |
Reduced result set:
name | age | level(p1) | price | level(p2) |
car144 | 3 | 1.0 | 7000 | 2.0 |
Remark
Top tuples are filtered by either LEVEL(aNumericalPreference)= 0 or DISTANCE(aNumericalPreference) = 0.0 in the BUT ONLY clause.
The LIMIT clause restricts the size of the result set by the indicated number of the clause. This syntactic reduction happens after the semantic reduction of the BUT ONLY clause.