Розширення захоплення SQL


20

Згідно з Іммерманом , клас складності, пов'язаний із SQL- запитами, є саме класом безпечних запитів у Q(FO(COUNT)) (запити першого порядку плюс оператор підрахунку): SQL фіксує безпечні запити. (Іншими словами, всі запити SQL мають складність у Q(FO(COUNT)) , а всі проблеми - у Q(FO(COUNT)) може бути виражений у вигляді SQL-запиту.)

Виходячи з цього результату, з теоретичної точки зору, існує багато цікавих проблем, які можна вирішити ефективно, але не є виразними в SQL. Тому розширення SQL, яке ще є ефективним, здається цікавим. Тож ось моє питання:

Чи є розширення SQL (впроваджене та використовується в галузі ), яке фіксує P (тобто може виражати всі обчислювальні запити в многочлени та без інших)?

Я хочу мову запиту до бази даних, яка підкреслює всі три умови. Легко визначити розширення , яке буде розширити SQL і захопити . Але мої запитання полягають у тому, чи така мова має сенс з практичної точки зору, тому я хочу мову, яка використовується на практиці. Якщо це не так і немає такої мови, то я хотів би знати, чи є причина, яка робить таку мову нецікавою з практичної точки зору? Наприклад, чи запити, що виникають на практиці, зазвичай досить прості, що немає необхідності в такій мові?P


1
@JD, вибачте, але виходячи з вашого коментаря, я думаю, ви не розумієте питання. Питання чітко визначене. Захоплення класом складності мовою - це стандартна термінологія. (що я не є чітко визначеним, це моя перевага, що мова має бути мовою запиту, але це лише вподобання, і я сказав вам, що я буду добре з тією, яка не є, якщо немає такої з цим уподобанням.)
Каве

1
@ Shog9, я вже відповів на це. JD не розуміє питання, він навіть не знав, що означає захоплення, і не знає, що мова, яка захоплює P, не може бути Тюрінг повною за визначенням. Він очікує, що це буде викладено так, як йому це подобається, я зазначив це у звичайній описовій термінології складності та складності мов запитів і навіть пояснив їх йому. Що тут не зрозуміло?
Каве

1
@ Shog9, мотивація виходить із описової складності . Я намагаюся зрозуміти, чи існує мова, що розширює SQL, використовується в галузі, яка захоплює P. Оригінальна мова SQL є досить слабкою, як показують результати Іммермана, з теоретичної точки зору багато ефективних обчислень неможливо в ній заявити. З іншого боку, ми хотіли б підтримувати мову ефективно (тобто ). Чи є така мова? (Я думаю, що це, мабуть, зрозуміло людям, знайомим з описовою складністю). P
Каве

4
@ Shog9: Я не розумію, чому це питання потребувало втручання модератора, і його було закрито. Мені достатньо комфортно з описовою складністю, щоб сказати, що це справжнє питання (хоча, можливо, краще підходить для TCS - це трохи важке питання).
Олексій десять Бринк

1
Оскільки я помітив, що ще одне питання було закрите (яке також мало голоси), я поставив запитання щодо мета про це: meta.cs.stackexchange.com/questions/97/…
Алекс десять Бринк

Відповіді:


5

Що стосується вашого головного питання, я рекомендую це коротке опитування Мартіна Грое.


Чи запити, які потрібні на практиці, зазвичай є досить простими, щоб не було потреби в більш сильній мові?

Я б сказав, що це триває більшість часу, враховуючи неабияку кількість розширень, доданих до загальних мов запитів (транзитивне закриття, арифметичні оператори, підрахунок тощо). Це відбувається з точки зору того, хто провів певну роботу як позаштатний розробник порівняно простих веб-сайтів та інших додатків, тому я не впевнений у реальному використанні SQL у великих галузях промисловості / великих базах даних.

У рідкісних випадках може знадобитися більш потужна мова, я гадаю, що розробники програмного забезпечення справляються з ними за допомогою мови, якою вони пишуть додаток, а не запитів (наприклад, C ++ або java).


3

По-перше, експресивна сила SQL менш чітка, ніж здається. Сукупність, групування та арифметичні особливості SQL, виявляється, мають досить тонкі ефекти. Апріорі видається можливим, що при деякому кодуванні алгебраїчних операторів, що використовують ці функції, можна було фактично виразити доступність у SQL. Виявляється, це насправді не так для SQL-92 , який є "локальним".

Це означає, що для захоплення PTIME потрібне розширення для SQL-92 і таке, яке дозволяє отриманій мові бути "не локальною".

Однак, якщо дозволити впорядковані структури та з реально обмеженою арифметикою, доведення того, що SQL-92 не може виразити доступність, означало б, що це єдиний і, отже, це буде досить складно. (Можна стверджувати, що природне лінійне впорядкування завжди існує для типів даних у SQL-92, і тому можна припустити, що базові структури впорядковані.)TC0NLOGSPACE

Потім пейзаж знову змінився, оскільки SQL: 1999 (SQL3) включав рекурсію. Тож SQL: 1999 здається настільки ж виразним, як логіка з фіксованою точкою з підрахунком (хоча, я думаю, деталі можуть знову бути досить складними, включаючи питання порядку). Чи зробили нові конструкції логіку більш виразною, ніж потрібно для захоплення PTIME, я не знаю, і для встановлення цього потрібно було б провести певне дослідження. Тим часом в 2003 , 2006 , 2008 роках були внесені подальші зміни та 2011 роках(будучи документами ISO, вільно доступні лише чернетки). Ці версії додали цілу низку нових функцій, у тому числі дозволяючи XQuery як "частину" SQL запитів. Я здогадуюсь, що "SQL" зараз є більш виразним, ніж потрібно для зйомки PTIME, але для кодування, необхідного для цього, можуть знадобитися великі і неприродні запити, які можуть не підтримуватися в реальних системах.

Тому я думаю, що є докази того, що не існує промислового розширення SQL, яке б точно захоплювало PTIME , відповідаючи на ваше запитання нечітко. Коротше кажучи, промислові розширення є досить потужними і, можливо, вже мають прострочений PTIME. Якщо правда, що SQL: 1999 вже досить потужний, щоб захопити принаймні PTIME, то також не ясно, що насправді означає "SQL" у вашому запитанні, оскільки потрібно було б визначити "SQL", щоб означати версію, що передує SQL: 1999 рік.

Нарешті, опитування Грое щодо пошуку логіки, що фіксує PTIME (також згадується Яномою), вказує не лише на те, що захоплення PTIME є хитромудрим, якщо ми не маємо лінійний порядок як частина мови, але і те, що доказ того, що такої логіки не може бути також маємо на увазі .PNP


Дякую Андрашу, особливо за те, що зауважив, що SQL3 підтримує "рекурсію", я повинен перевірити і побачити, що відомо про це. :)
Kaveh

ps: Я здогадуюсь, що ви включили обговорення зв'язку з теорією складності та логікою захоплення P для читачів, однак дозвольте додати як бічну зауваження та для уточнення: я використовую SQL в тому сенсі, що Іммерман використав його в результаті і що В результаті використовується точне визначення SQL. Я знаю про відношення до поділу класів складності та питання про логіку захоплення Р, проте я не думаю, що вони дають відповідь на моє запитання,
Kaveh

відповідь на моє запитання може бути позитивною (або негативною), і вони відповідали б усім можливим відповідям на П проти НП та наявності логіки інваріантності порядку для П.
Каве

Kaveh, якщо ти визначаєш SQL як Immerman, тоді я думаю, що відповідь "напевно, ні", оскільки існуючі промислові розширення здаються або занадто слабкими, або занадто потужними. Але (AFAIK) у нас немає жорстких доказів для цього. Можливо, якийсь підмножина розширень точно захоплює PTIME, але я не впевнений, що хотів би пролізти через специфікації, намагаючись його ізолювати ...
András Salamon

-1

PPPPP

P=NPP=NPPPNPC

PNP

P=NP

Мабуть, він, ймовірно, не існує в реальних цілях, він, безумовно, існує і є конструктивним та реалізованим. Ви можете визначити цю мову з чимось здатним імітувати машину Тьюрінга до заданої кількості одинакових кроків. IE, здатний вирішити P-повну задачу. Однак, якщо ви побудуєте таку річ, вона майже повна Тьюрінга, за винятком обмеження "з заданим числом кроків", що в мові, подібній SQL, було б дуже дивним способом обмежити її лише безпечними запитами. Ви могли б зробити це, якщо кроки є записами якоїсь таблиці, але це все ще не представляє нічого корисного для практичних цілей.


2
FOAC0

1
NPPPFO(LFP)P
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.