Universität Augsburg, Institut für Informatik Prof. Dr. W. Kießling F. Wenzel, L. Rudenko SS 2015 29. Mai 2015 Lösungsblatt 6 Suchmaschinen Aufgabe 1: Pareto mit SV-Semantik Pareto Definition: x <P 1⊗P 2 y gdw. (x1 <P 1 y1 ∧ (x2 <P 2 y2 ∨ x2 = y2 ))∨ (x2 <P 2 y2 ∧ (x1 <P 1 y1 ∨ x1 = y1 )) Ersetzen von = durch ∼: (x1 <P 1 y1 ∧ (x2 <P 2 y2 ∨ (¬(x2 <P 2 y2 )) ∧ ¬(y2 <P 2 x2 )))))∨ (x2 <P 2 y2 ∧ (x1 <P 1 y1 ∨ (¬(x1 <P 1 y1 )) ∧ ¬(y1 <P 1 x1 ))))); Als Gegenbeispiel lassen sich folgende zwei EXPLICIT-Präferenzen P1 , P2 angeben: Das Ergebnis P1 ⊗ P2 mit dem Austausch von ’=’ durch ’∼’ verletzt die Transitivität partieller Ordnungen, da zwar sowohl b <P1 ⊗P2 a als auch c <P1 ⊗P2 b gilt, allerdings nicht c <P1 ⊗P2 a. Aufgabe 2: Preference SQL: JDBC-Client Lösungsvorschlag unnötig Aufgabe 3: Preference SQL Queries a) Während die harte SQL Bedingung ein Empty Result liefert, gibt die PSQL-Query ein Ergebnis nahe am gewünschten Intervall zurück: • SELECT id, energ_kcal FROM beverages WHERE energ_kcal >= 10 AND energ_kcal <= 18; • SELECT id, energ_kcal FROM beverages PREFERRING energ_kcal BETWEEN 10, 18; b) SELECT * FROM beef b, beverages d WHERE d.energ_kcal + b.energ_kcal < 350 PREFERRING b.shrt_desc IN (’BEEF_TOP’) AND d.shrt_desc IN (’ALCOHOLIC_BEV’); c) Mit regulärer SV-Semantik werden 11 Tupel zurückgegeben, mit trivialer 28 Ergebnisse: • SELECT * FROM beef PREFERRING shrt_desc IN (’BEEF_SHOULDER’) PRIOR TO (fat AROUND 8, 2 AND vitamin_c HIGHEST); 1 • SELECT * FROM beef PREFERRING (shrt_desc IN (’BEEF_SHOULDER’) TRIVIAL) PRIOR TO (fat AROUND 8, 2 TRIVIAL AND vitamin_c HIGHEST TRIVIAL); d) SELECT * FROM beverages PREFERRING shrt_desc EXPLICIT (’DRINK_MIX’ < ’COFFEE_DRY’, ’LEMONADE_POWDER’ < ’ALCOHOLIC_BEV’, ’WATER_BTLD’ < ’WHISKEY_SOUR’); e) Eine Präferenz-Anfrage, bei dem der Standard-SQL Teil als harte Bedingung keine Ergebnisse zurückliefert, gibt als Gesamtanfrage auch keine Ergebnisse zurück: SELECT * FROM beverages WHERE vitamin_c < 0 PREFERRING shrt_desc IN (’ALCOHOLIC_BEV’); Aufgabe 4: Pareto und Priorisierung; Preference SQL Queries Die Tabelle wird angelegt mittels CREATE INSERT INSERT INSERT INSERT INSERT TABLE artikel (id INT, color VARCHAR(10), price INT); INTO artikel VALUES (1, ’white’, 22); INTO artikel VALUES (2, ’green’, 22); INTO artikel VALUES (3, ’yellow’, 21); INTO artikel VALUES (4, ’yellow’, 29); INTO artikel VALUES (5, ’red’, 28); a) i) Reguläre SV-Semantik: Query: SELECT * FROM artikel PREFERRING color IN (’green’, ’red’) ELSE (’yellow’) AND price AROUND 30; ID Ergebnis: 4 5 Color Price yellow 29 red 28 2 ii) Triviale SV-Semantik: Query: SELECT * FROM artikel PREFERRING color IN (’green’, ’red’) ELSE (’yellow’) TRIVIAL AND price AROUND 30 TRIVIAL; ID 2 Ergebnis: 4 5 Color green yellow red Price 22 29 28 b) i) Reguläre SV-Semantik: Query: SELECT * FROM artikel PREFERRING color IN (’green’, ’red’) ELSE (’yellow’) PRIOR TO price AROUND 30; Ergebnis: ID 5 Color Price red 28 ii) Triviale SV-Semantik: Query: SELECT * FROM artikel PREFERRING color IN (’green’, ’red’) ELSE (’yellow’) TRIVIAL PRIOR TO price AROUND 30 TRIVIAL; ID Ergebnis: 2 5 Color Price green 22 red 28 3