SQL 캡처


20

Immerman 에 따르면 SQL 쿼리 와 관련된 복잡성 클래스 는 Q ( F O ( C O U N T ) )안전한 쿼리 클래스입니다 (일차 쿼리와 계산 연산자). SQL은 안전한 쿼리를 캡처합니다. (즉, 모든 SQL 쿼리의 복잡도가 Q ( F O ( C O U N T ) ) , 그리고 모든 문제 Q ( F O ( C O U N T를Q(FO(COUNT))Q(FO(COUNT))Q(FO(COUNT)) 는 SQL 쿼리로 표현 될 수 있습니다.)

이론적 관점에서이 결과를 바탕으로 효율적으로 해결할 수 있지만 SQL로 표현할 수없는 많은 흥미로운 문제가 있습니다. 따라서 여전히 효율적인 SQL 확장이 흥미로워 보입니다. 내 질문은 다음과 같습니다.

이 생길되어 SQL의 확장 (구현 및 업계에서 사용 )하는 캡처 P (즉, 모든 다항식 시간 계산 가능한 쿼리없이 다른 사람을 표현할 수)?

세 가지 조건을 모두 충족시키는 데이터베이스 쿼리 언어를 원합니다. SQL을 확장하고 를 캡처하는 확장을 쉽게 정의 할 수 P있습니다. 그러나 내 질문은 그러한 언어가 실제적인 관점에서 의미가 있는지에 따라 실제로 사용되는 언어를 원합니다. 이것이 사실이 아니며 그러한 언어가 없다면, 그런 언어가 실제적인 관점에서 흥미가없는 이유가 있는지 알고 싶습니다. 예를 들어, 실제로 발생하는 쿼리는 일반적으로 그러한 언어가 필요 없을 정도로 간단합니까?


1
@JD, 죄송하지만 귀하의 의견을 바탕으로 질문을 이해하지 못하는 것 같습니다. 질문은 잘 정의되어 있습니다. 언어로 복잡한 클래스를 캡처하는 것은 표준 용어입니다. (언어가 잘 정의되어 있지 않은 것은 언어가 쿼리 언어 여야한다는 선호입니다.하지만 그것은 단지 선호 사항이며 해당 환경 설정이없는 경우에는 그렇지 않을 것입니다.)
Kaveh

1
@ Shog9, 나는 이미 그것에 대답했다. JD는이 질문을 이해하지 못하고, 캡처가 무엇을 의미하는지조차 알지 못했으며 P를 캡처하는 언어가 정의에 의해 튜링을 완료 할 수 없다는 것을 알지 못했습니다. 그는 그것이 그것을 좋아하는 방식으로 표현되기를 기대하며, 나는 일반적인 설명 복잡성 용어와 쿼리 언어의 복잡성으로 그것을 언급했으며 심지어 그것들을 그에게 설명했습니다. 여기서 명확하지 않은 것은 무엇입니까?
Kaveh

1
@ Shog9, 동기 부여는 기술 복잡성 에서 나옵니다 . P를 포착하는 업계에서 사용되는 SQL 확장 언어가 있는지 확인하려고합니다. 이론적 관점에서 볼 때 Immermann의 결과가 보여 주듯이 원래 SQL 언어는 다소 약합니다. 반면에 우리는 언어를 효율적으로 유지하고 싶습니다 (예 : ). 그런 언어가 있습니까? (이것은 아마도 설명 복잡성에 익숙한 사람들에게는 분명하다고 생각합니다). P
Kaveh

4
@ Shog9 : 왜이 ​​질문이 중재자의 개입이 필요한지 알지 못하고 닫혔습니다. Descriptive Complexity에 익숙해 져서 이것이 실제 질문이라고 할 수 있습니다 (TCS에 더 적합 할 수도 있지만 약간 어려운 질문입니다).
Alex ten Brink

1
또 다른 질문 (닫힌 투표도 있음)도 닫히면 서 메타에 관한 질문을했습니다. meta.cs.stackexchange.com/questions/97/…
Alex ten Brink

답변:


5

귀하의 주요 질문 에 대해서는 Martin Grohe의 짧은 설문 조사 를 권장합니다 .


실제로 필요한 쿼리는 일반적으로 더 강력한 언어가 필요하지 않을 정도로 간단합니까?

나는 일반적인 쿼리 언어 (전이 폐쇄, 산술 연산자, 계산 등)에 추가 된 상당한 양의 확장을 고려할 때 대부분의 시간을 유지한다고 말하고 싶습니다. 이것은 비교적 간단한 웹 사이트와 다른 응용 프로그램의 프리랜서 개발자로 일한 사람의 관점에서 비롯된 것이므로 더 큰 산업 / 대규모 데이터베이스에서 SQL의 실제 사용에 대해서는 확신하지 못합니다.

드문 경우지만 더 강력한 언어가 필요할 수 있습니다. 제 생각에는 소프트웨어 개발자가 쿼리가 아닌 응용 프로그램을 작성하는 언어 (C ++ 또는 java 등)를 사용하여 해당 언어를 처리하는 것입니다.


3

첫째, SQL의 표현력은 생각보다 명확하지 않습니다. SQL의 집계, 그룹화 및 산술 기능은 매우 미묘한 영향을 미칩니다. 우선, 이러한 기능을 사용하는 대수 연산자의 일부 인코딩으로 실제로 SQL에서 도달 가능성을 표현할 수있을 것 같습니다. 실제로 "local"인 SQL-92 의 경우는 그렇지 않습니다 .

이는 SQL-92가 PTIME을 캡처하기 위해 확장이 필요하고 결과 언어가 "로컬이 아닌"것을 허용하는 확장이 필요함을 의미합니다.

TC0NLOGSPACE

그런 다음 SQL : 1999 (SQL3)에 재귀가 포함되었으므로 조경이 다시 변경되었습니다. 따라서 SQL : 1999는 계산을 통해 고정 소수점 논리만큼 표현력이있는 것처럼 보입니다 (순서 문제를 포함하여 세부 사항은 다시 까다로울 수 있습니다). 새로운 구조가 PTIME을 포착하는 데 필요한 것보다 논리를 더 표현 적으로 만들 었는지 여부는 모르겠습니다.이를 확인하기위한 연구가 필요합니다. 한편 2003 년 , 2006 년 , 2008 년2011 에 추가 개정이 이루어졌습니다.(ISO 문서이므로 초안 만 자유롭게 사용할 수 있습니다). 이러한 수정 사항은 XQuery를 SQL 쿼리의 "부분"으로 허용하는 것을 포함하여 완전히 새로운 기능을 추가했습니다. 내 생각에 "SQL"은 PTIME을 캡처하는 데 필요한 것보다 표현력이 뛰어나지 만이를 위해서는 인코딩에 실제 시스템에서 지원되지 않는 크고 부 자연스러운 쿼리가 필요할 수 있습니다.

따라서 PTIME을 정확하게 캡처 하여 퍼지 방식으로 귀하의 질문에 대답 하는 SQL의 산업 확장이 없다는 증거가 있다고 생각 합니다 . 요컨대, 산업 확장은 다소 강력하며 이미 PTIME을 초과했을 수 있습니다. SQL : 1999가 적어도 PTIME을 캡처 할만큼 충분히 강력하다는 것이 사실이라면, SQL 이전의 버전을 의미하는 "SQL"을 정의해야하기 때문에 질문에서 "SQL"이 실제로 무엇을 의미하는지 명확하지 않습니다. 1999.

마지막으로, PTIME (Janoma에 의해 언급 된)을 포착하는 로직 검색에 대한 Grohe의 조사에 따르면, 언어의 일부로 선형 순서가 없으면 PTIME을 포착하는 것이 까다로울뿐만 아니라 그러한 로직이 없다는 증거도 의미 .PNP


András에게 감사드립니다. 특히 SQL3가 "재귀"를 지원한다고 언급 한 것에 대해, 나는 그것에 대해 알려진 것을 확인하고 확인해야합니다. :)
Kaveh

추신 : 독자를 위해 복잡성 이론 및 논리 캡처 P와의 관계에 대한 토론을 포함 시켰지만 추론과 설명으로 추가하겠습니다 .Immerman이 결과에 사용했다는 의미에서 SQL을 사용하고 있습니다. 결과는 정확한 SQL 정의를 사용합니다. 나는 복잡한 클래스 분리와의 관계와 P를 포착하는 논리의 문제에 대해 알고 있지만 이것이 내 질문에 대한 답에 영향을 미치지 않는다고 생각합니다.
Kaveh

내 질문에 대한 대답은 긍정적이거나 부정적 일 수 있으며 P 대 NP에 대한 가능한 모든 대답과 P에 대한 순서 불변 논리의 존재와 일치 할 것입니다.
Kaveh

Kaveh, Immerman과 같이 SQL을 정의하면 기존 산업 확장이 너무 약하거나 너무 강력 해 보이므로 대답이 "아무도 없다"고 생각합니다. 그러나 (AFAIK) 우리는 이것에 대한 엄격한 증거가 없습니다. 아마도 확장의 일부 하위 세트가 PTIME을 정확하게 캡처 할 수 있지만,이를 분리하려고하는 스펙을 트롤하고 싶을 지 모르겠다 ...
András Salamon

-1

와 만 캡처하는 확장 프로그램을 원 하거나 와 외부의 항목 을 캡처하는 경우 질문이 명확하지 않습니다 . 안전한 쿼리를 원하고 그렇지 않으면 Turing-complete SQL 확장이 가능하기 때문에 정확한 클래스 에서만 흥미있는 것처럼 보입니다 .P P P PPPPPP

인지는 모른다 . 경우 캡쳐 할 수있는, 다음 SQL 확장 단지 부울 식 다항식 시간에서 만족할 경우 계산 또는 다른 해결할 수 있어야 다항식 시간 문제.P = N P P P N P CP=NPP=NPPPNPC

그러나 인 경우 지정된 부울 수식이 만족스러운 경우 SQL 확장 언어에서 계산할 수 없습니다.PNP

부울 공식이 만족 스러운지 결정할 수있는 언어로 작성된 알고리즘 (또는 쿼리 등)이 있습니까? 나는 이것에 대답 할 수 없다 (그리고 아마도 라면 대답하고 있기 때문에 아무도 여기에서 할 수 없다 ). 이 질문은이 언어가 실제 목적으로 존재하는 것 같지 않다고 믿습니다.P=NP

실제 목적으로 존재하지는 않지만 반드시 존재하며 구성 가능하고 구현 가능합니다. 주어진 단수의 단계까지 튜링 머신을 시뮬레이션 할 수있는 언어로 해당 언어를 정의 할 수 있습니다. P- 완전 문제 를 해결할 수있는 IE . 그러나 이러한 것을 구성하면 SQL과 같은 언어에서는 안전한 쿼리로만 제한하는 매우 이상한 방법 인 "단일 단계 수"제한을 제외하고는 거의 Turing-complete입니다. 단계가 일부 테이블의 레코드 인 경우이 작업을 수행 할 수 있지만 여전히 실용적인 목적으로 유용한 것은 아닙니다.


2
우리가 복잡성 클래스를 캡처한다고 말할 때 우리는 정확히 그 복잡성 클래스를 의미합니다. 예를 들어 언어 는 복잡성 클래스 캡처 한다고합니다 . A C 0FOAC0
Kaveh

1
또한 대 가 제 질문에 표시되지 않습니다. 를 캡처하는 언어 ( 예 : 가 이미 있다는 것을 알고 있습니다 . 내가 묻는 것은 업계에서 사용 되는 SQL 확장확장하는 언어가 있고 모든 언어가 만족되기를 원한다는 것입니다. . P P F O ( L F P ) PNPPPFO(LFP)P
Kaveh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.