나는 관계형 데이터베이스를 이해하기위한 적어도 두 가지 다른 이론적 접근법, 즉 Codd의 관계형 대수 / 미적분학 및 범주 이론을 알고 있습니다.
이 두 접근법 사이에 어떤 관계가 있습니까? 그것들은 어떤 의미에서 동등합니까? 이 두 프레임 워크가 관계형 데이터베이스를 설명하는 방법을 설명하는 입문 작업이 있습니까?
배경 :
얼마 전에 나는 데이비드 스피 바크 (David Spivak)의 과학자 들을 위한 범주 이론 (Category Theorys for Scientists) 을 읽었 습니다. 그러나 관계형 데이터베이스가 무엇인지 또는 왜 유용한 지에 대한 개인적인 경험이 거의 없었습니다. 당시이 책에서 찾은 깊이있는 통찰력을 충분히 이해하지 못했습니다.
그러나 최근에는 dplyr 과 data.table 데이터 조작을위한 SQL 쿼리와 두 개의 R 패키지에 대해 배웠습니다 . SQL은 Codd의 관계형 대수 / 미적분 / 모델의 많은 아이디어 를 표현할 수 있지만 전부는 아닙니다 . 또한 dplyr의 저자 인 Hadley Wickham 은 패키지의 기본 철학은 관계형 대수에 대한 Codd의 작업과 data.table 의 기본 명령을 기반으로 한다고 명시 적으로 언급 했습니다.
또한 범주 이론은 Haskell과 같은 함수형 프로그래밍 언어를 사용하는 많은 프로그래머에게 영향을 미친다는 것을 알고 있습니다. 그러나 Hadley Wickham의 R에 대한 purrr 패키지, Apache Spark 가 Scala 로 작성된 사실 및 MapReduce 관련 기술 외에 데이터 조작 또는 데이터 과학에 기능 프로그래밍을 사용 하고 있다는 사실을 실제로 알지 못합니다. .
이 모든 종류는 카테고리 이론과 Codd의 관계형 대수 / 미적분학 사이에 어떤 종류의 관계 가 있어야한다고 제안 하지만, 나는 그러한 연결을 명시 적으로 만들거나 대중적인 데이터 조작에서 디자인 결정의 기초가되는 방법을 설명하는 사람은 결코 들어 본 적이 없습니다. 관계형 데이터베이스 기술. 그래서 나는 내가 완전히 틀렸다고 생각합니다.
편집 : 분명히 David Spivak은 ” FQL (functorial query language) “에서 작업했습니다. 이것은 이론적 연결의 적용이 될 수있는 것처럼 들린다.
참고 : “관계형 구조”가 관계형 데이터베이스 또는 관계형 대수 / 미적분학에 대한 적절한 태그인지 확실하지 않습니다. 이 Wikipedia 기사 는 그것들이 연결될 수 있다고 제안하지만 궁극적으로 “관계 구조”라는 문구가 무엇을 의미하는지 모르겠습니다. 태그를 다시 지정하십시오.
답변
쿼리 언어에 대한 범주 적 접근 방식은 틈새 시장에 관심이 있지만 매우 흥미로운 틈새 시장이라고 생각합니다.
이 분야의 주요 인물 중 두 명은 Peter Buneman 과 Torsten Grust입니다. 입니다. 분명히, 그들은 모든 작업을 수행하지는 않았지만 논문으로 시작하여 인용 그래프를 추적하면 해당 영역을 상당히 잘 이해할 수 있습니다.
그들이 일하는 중심 관찰은 관계가 튜플 세트로 볼 수 있기 때문에, 파워 셋 펑 터는 튜플 유형을 해당 튜플에 대한 관계 유형으로 가져 오는 것으로 해석 될 수 있다는 것입니다. 그러면 파워 셋 펑터가 모나드를 형성한다는 사실은 필립와 들러의 모나드 이해 구문 에서 영감을 얻은 아이디어를 사용 하여 풍부한 방정식 이론을 가진 쿼리에 범주 적으로 영감을주는 미적분학을 제공 할 수 있음을 의미합니다 .
실제로 Buneman 등의 쿼리 시스템 Kleisli 는 모나드가 때때로 “Kleisli triples”라는 사실에서 그 이름을 얻었습니다.
Grust의 박사 학위 논문, 이해하는 쿼리 , 모델 집계 사업자 모나드 morphisms의 사용 (등을 포함, 구체적으로 이러한 아이디어에서이 작동 sum
하고 count
). Grust와 그의 그룹은 데이터베이스를 프로그래밍 언어로 통합하는 방법을 연구 한 Ferry 시스템도 구축 했습니다.
이 작업 (및 메모리가 제공되는 경우 Kleisli)의 주요 문제 중 하나는 모나드 쿼리 언어가 관계형 대수보다 조금 더 표현적인 경향이 있다는 것입니다. 이것을 SQL 또는 관계형 대수로 컴파일하려면 약간의주의가 필요합니다 (예 : Cheney et al.의 언어 통합 쿼리의 이론적 이론 참조 ). 기본 문제에는 매우 훌륭한 범주 형식이 있습니다. 관계형 대수 는 powerset functor 의 monoidal 구조, 즉 직교 곱 자연 변환의 존재 만 사용합니다.
(∙):피(엑스)×피(와이)→피(엑스×와이); 모나 딕 쿼리 언어도 조인을 요구합니다.
μ:피(피(엑스))→피(엑스).
그것은 아마도 쿼리 언어에 대한 범주 적 접근 방식에 대한 주요 작업 흐름 일 것입니다.
David Spivak은 데이터베이스를 모델링하기 위해 단순 집합을 사용하는 작업에 대해 새로운 아이디어를 얻었습니다 (불행히도 그만한 가치를 얻지 못했습니다) . Simplicial Databases를 참조하십시오 . 중심 혁신은 단순한 구조가 테이블 간의 관계 (예 : 외래 키 시스템)를 포함하여 전체 데이터베이스 스키마를 명시 적으로 모델링 할 수있게하여 스키마 업데이트 작업에 의미를 부여 할 수 있다는 것입니다.
표준 쿼리 언어와 다른 편차는 Datalog와 같은 제한된 논리 프로그래밍 언어이며 관계형 대수 + 고정 소수점 연산자로 이해 될 수 있습니다. 고정 소수점 은 전이 폐쇄 쿼리와 같은 것을 표현할 수 있으며, 데이터 로그를 기반으로하는 Datomic 기능 쿼리 언어 와 같은 새로운 데이터베이스를 표현할 수 있습니다. 저의 박사 과정 학생 인 Michael Arntzenius 와 저는 Datalog의 시맨틱 스를 연구했으며, 우리는 Datafun 이라는 기능적 유사체를 생각해 냈습니다 .이 함수 는 자세와 반격 자 범주의 관점에서 꽤 범주적인 해석을합니다.