SQL (언어)의 좋은 대안은 무엇입니까? [닫은]


95

나는 때때로 SQL이 얼마나 짜증나고 좋은 언어가 아닌지에 대한 이야기를 듣지만 그 대안에 대해서는별로 듣지 못했습니다. 그렇다면 동일한 목적 (데이터베이스 액세스)을 제공하는 다른 좋은 언어가 있으며 SQL보다 나은 점은 무엇입니까? 이 대체 언어를 사용하는 좋은 데이터베이스가 있습니까?

편집 : 나는 SQL에 익숙하고 항상 사용합니다. 나는 그것에 문제가 없으며, 존재할 수있는 대안에 관심이 있고 사람들이 왜 그들을 더 좋아하는지에 관심이 있습니다.

또한 다른 종류의 데이터베이스 (NoSQL 운동)를 찾는 것이 아니라 데이터베이스에 액세스하는 다른 방법을 찾고 있습니다.


22
SQL이 짜증나? 참고 문헌이 있습니까?
Murali VP

3
당신은 XML에 비해별로라고 말하는 것이 아닙니다.
Bratch

6
여부 SQL 실제로 짜증 여부를 내가 관심이 뭔가하지만 다음의 예는 다음과 같습니다. en.wikipedia.org/wiki/The_Third_Manifesto ... "짜증"잘못된 단어를 수 있습니다 I 추측
브랜든 긴

4
명확히하기 위해 SQL에 문제가 없습니다. 더 나은 것이있을 경우를 대비하여 다른 아이디어에 대해 배우는 것을 좋아합니다.
Brendan Long

6
쿼리 언어 여야하고 RDBMS 용이어야한다면 Quel을 확인하세요. en.wikipedia.org/wiki/QUEL_query_languages-Postgres가 1995 년 이전에 이름을 예외적으로 변경했을 때 사용했던 것이기도합니다. 어리석은 "PostgreSQL".

답변:


44

나는 SQL의 구문이 자동 생성의 관점과 구문 분석의 관점 모두에서 작업하기 어렵다는 데 동의하며, 우리가 요구하는 SQL을 설계한다면 오늘날 작성할 언어 스타일이 아닙니다. 오늘 그것에. 오늘 우리가 언어를 디자인했다면 그렇게 많은 다양한 키워드를 찾을 수 없을 것이라고 생각합니다. 조인 구문이 다를 수 있고, 함수 GROUP_CONCAT의 동작을 제어하기 위해 괄호 중간에 더 많은 키워드를 붙이는 것보다 더 규칙적인 구문을 가질 것이라고 생각합니다. ... 오늘 우리가 언어를 재 설계하면 완화되기를 원하거나 기대하는 SQL의 불일치 및 중복 목록을 직접 작성하십시오.

관계형 데이터베이스 (예 : 프로토콜로서의 SQL)와 대화하기위한 SQL에 대한 대안은 없지만 응용 프로그램에서 SQL을 작성하는 데는 많은 대안이 있습니다. 이러한 대안은 관계형 데이터베이스 작업을위한 프런트 엔드 형태로 구현되었습니다. 프런트 엔드의 몇 가지 예는 다음과 같습니다.

오늘의 기본 주제는 SQL을 하나의 새로운 쿼리 언어로 대체하는 대신, 일상적인 프로그래밍 언어로 SQL을 숨기고 SQL 을 관계형과 대화하기위한 프로토콜 로 처리하는 언어 별 프런트 엔드를 만드는 것입니다. 데이터베이스.


흥미 롭군. 그래도 말이됩니다.
Brendan Long

11
사실이지만 이상적으로는 언어 만큼 잘 작동하는 쿼리 언어가 있습니다 . SQL이 프로토콜로 축소되었다는 사실은 언어로서의 약점에 대한 증거입니다.

3
만세 켄! 3 년 전 저는 SQL에 캡슐화 나 로컬 메서드와 같은 것이 없기 때문에 SQL 쿼리 조각을 반복해서 복사하는 전형적인 기업 관행으로 인해 발생하는 급증하는 기술 부채로 어려움을 겪고있었습니다. 나는 당신의 게시물 (현재는 Slick이라고 함)에서 ScalaQuery를 찾아서 전체 시스템을 다시 작성했고, 캡슐화하고 로컬 메서드를 가질 수 있기 때문에 6 개의 쿼리마다 1이됩니다! SQL 공포로 고통받는 사람이 있다면 Scala Slick 또는 Quill을 찾아 깨달음을 준비하십시오!
ChoppyTheLumberjack

18

이 목록을 살펴보십시오.

Hibernate Query Language 가 아마도 가장 일반적입니다. Hibernate의 장점은 객체가 관계형 데이터베이스에 매우 쉽게 (거의 자동으로) 매핑되고 개발자가 데이터베이스 설계에 많은 시간을 할애 할 필요가 없다는 것입니다. 자세한 정보 는 Hibernate 웹 사이트 를 확인하십시오 . 나는 다른 사람들이 다른 흥미로운 쿼리 언어를 사용하게 될 것이라고 확신합니다.

물론 많은 NoSQL 관련 항목이 있지만 특별히 관심이 없다고 언급했습니다.


확실히 제가 찾던 종류였습니다.
Brendan Long

그 목록에는 매우 이상한 언어 모음이 있습니다. XQuery가 속한다고 생각하지 않고 D에 대해 충분히 알지 못해 왜 속하는지 알 수 없습니다.
Ken Bloom

1
@Ken 블룸 분명히 D라는 쿼리 언어 및 D라는 별도의 C와 같은 언어 내가 생각 첫 번째는 C와 같은 언어 ...이었다 거기
브랜든 긴

저는 D에 대해 너무 빨리 말했습니다. 이름을봤을 때 저는 Digital Mars의 D를 생각했습니다. D 데이터 언어는 완전히 다른 것입니다.
Ken Bloom


13

"저는 가끔 SQL이 얼마나 형편없고 좋은 언어가 아니라는 얘기를 듣습니다."

SQL은 30 년이 넘었습니다. "어떤 기능이 어떤 것을 '좋은'언어로 만들고 어떤 기능이 '나쁜'언어로 만드는지"에 대한 통찰력은 SQL 자체보다 더 빠르게 진화했습니다.

또한 SQL은 "관계형이되기 위해 필요한 것"의 현재 표준을 따르는 언어가 아니므로 SQL은 부팅 할 관계형 언어가 아닙니다.

"그러나 나는 그것에 대한 대안에 대해 많이 듣지 못했습니다."

잘못된 곳 (즉, 상용 DBMS 산업에만 해당)에서만 들으려고 할 가능성에 대해 생각해 보시길 바랍니다.

"그러면 동일한 목적 (데이터베이스 액세스)을 제공하는 다른 좋은 언어가 있으며 SQL보다 나은 점은 무엇입니까?"

Date & Darwen은 최신 데이터 조작 언어가 준수해야하는 기능을 "Third Manifesto"에서 설명합니다. 가장 최근 버전은 "Databases, Types & the Relational Model"에 나와 있습니다.

"이 대체 언어를 사용하는 좋은 데이터베이스가 있습니까?"

"좋다"라는 말이 "산업 강도"와 같은 의미라면 아니오. 사용 가능한 가장 가까운 것은 아마도 Dataphor 일 것입니다.

Rel 프로젝트는 "데이터베이스, 유형 및 관계형 모델"에 정의 된 Tutorial D 언어에 대한 구현을 제공하지만 Rel의 현재 주요 목표는 본질적으로 교육적인 것입니다.

내 SIRA_PRISE 프로젝트는 "진정한 관계형"데이터 관리에 대한 구현을 제공하지만 "언어의 구현"이라는 레이블도 지정하는 것을 주저합니다.

물론 일부가 제안한 것처럼 비 관계형 데이터를 살펴볼 수도 있지만 저는 개인적으로 비 관계형 데이터 관리를 수십 년의 기술적 회귀라고 일축합니다. 고려할 가치가 없습니다.

아, 그런데 데이터베이스를 관리하는 데 사용되는 소프트웨어 시스템은 "데이터베이스"가 아니라 "데이터베이스 관리 시스템", 줄여서 "DBMS"입니다. 사진이 카메라와 같지 않은 것처럼 카메라에 대해 논의하고 혼동을 피하려면 "사진"대신 "카메라"라는 적절한 단어를 사용해야합니다.


비 관계형 데이터베이스는 약간의 용도가있는 것 같으므로 (일부 응용 프로그램은 덜 구조화 된 데이터에서 더 나은 성능을 얻음) 회귀라고 부르지 않습니다. 그래도 좋은 대답입니다.
Brendan Long

2
"성능"이 모델 의 특징으로 인식되는 것처럼 보이는 것은 모든 관계자들의 오랜 좌절입니다 . 그 인식은 결함이 있습니다. 성능은 모델 구현 의 특성입니다 . 현재 존재 하는 RM 구현 이 실제로 성능 문제를 일으키는 경우가 많다는 것은 다음과 같은 여러 요소의 조합입니다. (a) RM을 완전히 구현하는 것은 매우 어렵습니다. (b) DBMS 공급 업체가 새로운 구현 진행을 위해 충분히 노력하지 않습니다. , (c) 기본 알고리즘에 대한 충분한 이해가 부족한 사용자.
Erwin Smout

3
@Erwin 그러나 특정 모델이 본질적으로 효율적으로 구현하기 어렵다는 것을 발견하면 효율성 관점에서 해당 모델에 문제가 있다고 말하는 것이 타당합니다.
Jay는

SQL은 끔찍합니다. 30 년 전, 영어와 같은 문법과 단어를 사용하는 것은 아마도 막연하게 사용자 친화적이고 아무것도 아닌 것보다 낫다는 좋은 생각처럼 들리지만, 오늘날 우리는 그렇지 않다는 것을 알고 있습니다. 컴퓨터 개념을 상징적 인 언어로 표현하는 것이 더 낫습니다. 영어를 사용하려면 적절한 자연어 구문 분석기가 있어야합니다. SQL은 자연어를 적절하게 구문 분석하기 위해 노력하지 않으며, 더 혼란스럽게 만들기 위해 (때로는 선택 사항 인) 영어 단어를 던진 일련의 해킹 일뿐입니다.
Rolf

2
예, SQL은 끔찍하지만 실제로 언급 한 이유는 아닙니다. "충분히 상징적이지 않다"는 것이 진정한 범인이라면 우리는 모두 APL을 사용하고있을 것입니다. 대부분의 사람들이 세계에서 유일한 쓰기 전용 언어로 태그를 지정할 정도로 매우 상징적 인 언어입니다. SQL 언어의 기호는 Oxford 또는 Webster 사전에 나타나는 특정 단어와 일치합니다. 그 자체가 문제가되는 근본적인 이유는 없습니다.
Erwin Smout

12

아마도 당신은 C. Date와 그의 친구들이 기존의 관계형 데이터베이스와 SQL에 반대하는 비판을 생각하고있을 것입니다. 그들은 시스템과 언어가 100 % 관계형이 아니며 그래야한다고 말합니다. 여기서 진짜 문제는 보이지 않습니다. 내가 볼 수있는 한, 당신이 원한다면 SQL을 사용하는 방식을 훈육함으로써 100 % 관계형 시스템을 가질 수 있습니다.

제가 개인적으로 계속 부딪 치는 것은 SQL이 이론적 기반 인 관계형 대수에서 물려받은 표현력이 부족하다는 것입니다. 한 가지 문제는 날짜, 타임 스탬프 등으로 표시된 데이터로 작업 할 때 발생하는 도메인 순서 사용에 대한 지원 부족입니다. 한 번은 타임 스탬프가 가득한 데이터베이스에서 일반 SQL로보고 응용 프로그램을 완전히 수행하려고 시도했지만 실행 가능하지 않았습니다. 다른 하나는 경로 순회에 대한 지원이 부족하다는 것입니다. 대부분의 데이터는 경로를 순회해야하는 방향성 그래프처럼 보이지만 SQL은이를 수행 할 수 없습니다. ( "전 이적 폐쇄"가 없습니다. SQL-1999는 "재귀 적 하위 쿼리"로 할 수 있지만 아직 실제로 사용하는 것을 보지 못했습니다. SQL에 대처할 수있는 다양한 해킹도 있지만 추악합니다.) 이러한 문제는 다음과 같습니다. 그건 그렇고, Date의 일부 저술에서도 논의되었습니다.

최근 전 이적 폐쇄 문제를 잘 해결하는 것처럼 보이는 .QL 을 지적 했지만 주문 된 도메인의 문제를 해결할 수 있는지 여부는 모르겠습니다.


4
SQL이 진정한 관계형이 아니기 때문에 "SQL을 사용하는 방법을 규율"하더라도 "100 % 관계형 시스템"을 방해하는 몇 가지 결함이 있습니다. 예 : SELECT Sum (foo) BAR Blah WHERE 1 = 0. SQL은 null을 반환하고 100 % 관계형에서는 0을 요구합니다. carfield.com.hk/document/misc/SQL_Problems.pdf
McKay

1
또한 모든 선택 후에 "DISTINCT"를 씁니까?
McKay

예, NULL을 완전히 피하고 (빈 결과에 대한 특수 케이스가 필요함) DISTINCT를 모든 곳에 또는 적어도 COUNT를 사용해야하는 곳에 작성합니다.
reinierpost

8

직접적인 대답 : 나는 거기에 심각한 경쟁자가 없다고 생각합니다. DBase와 그 모방 자 (Foxpro, Codebase 등)는 한동안 경쟁자 였지만 기본적으로 데이터베이스 쿼리 언어 전쟁에서 졌다고 생각합니다. Progress 및 Paradox와 같은 고유 한 쿼리 언어를 가진 다른 많은 데이터베이스 제품이 있습니다. 예를 들어 Progress 및 Paradox와 같은 이름을 기억하지 못하는 다른 여러 제품과 확실히 들어 본 적이없는 더 많은 제품이 있습니다. 그러나 나는 다른 경쟁자가 시장에서 사소한 점유율을 얻지 못했다고 생각합니다.

데이터베이스 형식과 쿼리 언어 사이에 차이가 있다는 간단한 증거로, 내가 사용했던 DBase의 마지막 버전 (수년 전)은 "전통적인"DBase 쿼리 언어와 SQL을 모두 제공했습니다. 둘 다 사용할 수 있습니다. 동일한 데이터에 액세스합니다.

Side ramble : SQL이 형편 없다고 말하지는 않겠지 만, 많은 결함이 있습니다. 수년 간의 경험과 현재 우리가 가진 경험의 이점을 통해 더 나은 쿼리 언어를 설계 할 수있을 것이라고 확신합니다. 그러나 더 나은 쿼리 언어를 만들고 사람들이이를 사용하도록 설득하는 것은 매우 다른 두 가지입니다. 사람들에게 배움의 가치가 있다고 설득하는 것으로 충분할까요? 사람들은 SQL을 효과적으로 사용하는 방법을 배우는 데 오랜 시간을 투자했습니다. 새로운 언어가 사용하기 더 쉽다하더라도 확실히 학습 곡선이있을 것입니다. 기존 시스템을 SQL에서 새 언어로 어떻게 마이그레이션 하시겠습니까? 물론 C ++, C # 및 Java가 COBOL 및 FORTRAN을 크게 무너 뜨린 것처럼 가능합니다. 그러나이를 실현하기 위해서는 기술적 우월성과 좋은 마케팅의 조합이 필요합니다.

그래도 누군가가 SQL을 비판 할 때마다 SQL을 방어하기 위해 서두르는 사람들로부터 웃음을 얻습니다. SQL에 대한 문제는 SQL의 결함이 아니라 SQL의 결함이 아니라 자신의 무능함이어야한다고 주장하는 사람들입니다. 그 완벽 함을 이해하는 데 필요한 더 높은 수준의 사물에 도달했습니다. 진정하고 심호흡하십시오. 우리는 당신의 어머니가 아니라 컴퓨터 언어를 모욕하고 있습니다.


1
@Jay : SQL에 대한 한 가지 가능한 대체는 데이터베이스 특정 언어가 전혀 없을 수 있습니다. 데이터 지속성을 위해 일반적인 OO 프로그래밍 언어를 사용하십시오. Object-databases 및 ORM에 대한 내 대답을 참조하십시오. 나는 ORM이 오늘날 시장 점유율을 차지하지 않는다고 말하지 않을 것입니다.
kriss

Kriss : ORM은 "쿼리 언어"가 아니라 쿼리 언어 위에있는 것으로 생각했습니다. 그것이 데이터베이스와 통신하는 데 사용하는 것이라면 쿼리 언어로 간주 될 수 있으며 아마도 현명한 것일 수 있습니다. 예를 들어, 저는 수년 전에 COBOL과 C가 정말로 컴퓨터 언어가 아니라 어셈블러 만이 실제 컴퓨터 언어라는 것을 읽은 것을 기억합니다. COBOL과 C는 컴퓨터 언어로 번역되는 것입니다. 그 당시 논쟁은 단순히 어리석은 것처럼 보였습니다.) 그래서 : 좋아, 내가 살게.
제이

1
이 답변은 구식 일 수 있습니다. 이제 Mongo 등과 같은 비 SQL 데이터베이스가 시장에서 사소한 점유율을 차지하지 않습니다.
Jay

8

LINQ to SQL 살펴보기 ...

몇 달 전에 그것을 시도했고 결코 뒤돌아 보지 않았습니다 ....


1
Linq는 훌륭하지만 .NET에서 개발하는 경우에만 :)
Justin Ethier

7

1980 년대에 ObjectStore 는 투명한 객체 액세스를 제공했습니다. 그것은 RDBMS에 ORM을 더한 것 같았는데, 모든 여분의 유출 된 추상화 레이어가없는 것을 제외하고는 데이터베이스에 직접 객체를 저장했습니다.

따라서이 대안은 실제로 "아무 언어도"또는 "이미 사용중인 언어"였습니다. C ++ 코드를 작성하고 네이티브 객체 인 것처럼 객체를 생성하거나 트래버스하면 데이터베이스가 필요에 따라 모든 것을 처리했습니다. ActiveRecord와 비슷하지만 실제로 ActiveRecord 마케팅 블리츠 주장만큼 잘 작동했습니다. :-)

(물론 오라클의 마케팅 능력이 없었고 MySQL의 제로 비용도 없었기 때문에 모두가 무시했습니다. 이제 우리는이를 RDBMS와 ORM으로 복제하려고 시도하고 일부 사람들은 테이블이 실제로 객체를 저장하는 것이 합리적이며 컴퓨터에 객체를 테이블에 매핑하는 방법을 알려주는 거대한 XML 파일을 작성하는 것이 합리적인 솔루션입니다.)


2
이런 종류의 쿼리 언어가 "이미 사용중인 언어"라는 단점은 적어도 그 당시에는 데이터베이스가 액세스 패턴을 최적화 할 여지가 많지 않다는 것입니다. SQL에 대해 내가 좋아하는 한 가지는 선언적이며 데이터베이스가 쿼리를 가장 잘 수행하는 방법을 알아 내기 위해 핵심적인 작업을 수행한다는 것입니다. 오늘날 다른 어떤 언어도 최적화에 대해 그렇게 많은 정보를 제공 할 수 없습니다. 키워드를 좀 더 정규화하고 오늘 다시 작성하면 구문을 단순화 할 것이라고 생각합니다.
Ken Bloom

4
대위법 : 쿼리 최적화 프로그램은 대대적 인 계획에서 꽤 멍청합니다. 여기에 얼마나 많은 "내 쿼리 최적화에 도움"질문이 있는지보십시오. 효율적인 쿼리를 작성하려면 쿼리 최적화 프로그램이 수행 할 작업을 이해해야합니다. 나는 이미 내 프로그래밍 환경을위한 프로파일 러와 디버거를 가지고 있으며 내가 본 어떤 EXPLAIN보다 훨씬 낫다. ObjectStore가 얼마나 좋은지는 모르겠지만 동종 소프트웨어 스택은 멋질 수 있습니다 .

2011 년에는 스몰 토크에서 무료 버전의 Gemstone과 프로그램을 다운로드 할 수 있습니다. 고려해야 할 유일한 것은 한 클래스 버전의 인스턴스를 다른 클래스 버전으로 마이그레이션하는 방법입니다 (자동으로 처리되는 간단한 경우)
Stephan Eggermont 2011

6

요즘 일반적인 움직임은 NoSQL입니다. 일반적으로 이러한 기술은 다음과 같습니다.

개인적으로 나는 그것이 당신의 필요에 맞는 한 SQL에 아무런 문제가 없다고 생각합니다. SQL은 구조화 된 데이터로 작업 할 때 표현력이 뛰어나고 훌륭합니다.


2
문서 지향 데이터베이스의 경우 +1. 데이터 세트의 크기가 증가함에 따라, 관계형 모델은 ... 정말 느려질 수 있습니다
마이크 Cialowicz

2
당신이 언급 한 것은 SQL의 대안이 아니며 언어도 아닙니다. Apache Pig 및 Apache Hive와 같은 이니셔티브가 더 비슷합니다.
reinierpost

5

나는 당신이보고에 관심이있을 것 같아요 Dataphor (D를 말한다) 자체 데이터베이스 서버와 오픈 소스 관계형 개발 환경, 그 쿼리 언어에서 파생 된 사용자 인터페이스 할 수있는 기능입니다.

또한 Ingres는 여전히 QUEL을 지원하며 오픈 소스입니다.


기술적으로 데이터 포어 서버가 말하는 언어는 D4, D (또는 튜토리얼 D ...)는 약간 다른 언어입니다.
McKay

더 현명한 D는 언어가 아니라 Date & Darwen이 제공하는 사양입니다. 그들은 예제 언어로 "Tutorial D"를 사용합니다. D4는 D, 또는 적어도 대부분 그렇습니다. 그러나 McKay는 그것이 "D"가 아니라 "D"라고 말해야한다는 것이 맞습니다. Dataphor 문서에는 적합성 문서가 있습니다.
N8allan

4

SQL은 설계된 도메인 (상호 연결된 데이터 테이블)에서 잘 작동합니다. 이것은 일반적으로 전통적인 비즈니스 데이터 처리에서 발견됩니다. SQL은 복잡한 개체 네트워크를 유지하려고 할 때 제대로 작동하지 않습니다.

상대적으로 전통적인 데이터를 저장하고 처리해야하는 경우 SQL 기반 DBMS를 사용하십시오.

편집에 대한 응답 :

관계형 데이터 저장소에서 데이터를 검색하기 위해 SQL DML에 대한 대안을 찾고 있다면 SQL에 대한 심각한 대안에 대해 들어 본 적이 없습니다.

SQL이 얻는 노크는 언어의 기반이되는 기본 데이터 저장 원칙과 달리 언어에 그다지 반대되는 것이 아닙니다. 사람들은 종종 언어 SQL을 RDBMS가 구축 된 관계형 데이터 모델과 혼동합니다.


1
그래, 내가이 글을 쓰는 후에 깨달았 모든 것들 SQL 관계형 데이터베이스는 같은 일 것을 ...
브랜든 긴

4

관계형 데이터베이스는 유일한 종류의 데이터베이스가 아닙니다. 나는 다른 사람들의 응답에서 본 적이 없기 때문에 Object-Databases 에 대해 한 마디 말해야합니다 . RDBMS 대신 객체 지속성 을 위해 ZODB 를 사용하는 Zope python 프레임 워크에 대한 경험이 있습니다 (이론적으로 ZODB를 zope 내에서 다른 데이터베이스로 대체 할 수 있지만 마지막으로 확인했을 때 작동하지 못했습니다. 그것에 대해 긍정적이지 마십시오).

ZODB 사고 방식은 정말 다르며, 지속적으로 발생하는 객체 프로그래밍과 비슷합니다.

ORM 은 일종의 언어로 볼 수 있습니다.

어떤면에서 저는 객체 데이터베이스 모델이 ORM의 역할이라고 믿습니다. 일반적인 객체 모델을 통해 영구 데이터에 액세스하는 것입니다. 그것은 일종의 언어이고 시장 점유율을 얻고 있지만 지금은 언어가 아니라 추상화 계층으로 간주됩니다. 그러나 나는 SQL보다 객체 데이터베이스를 통해 ORM을 사용하는 것이 훨씬 효율적이라고 생각합니다 (즉, 일부 SQL 데이터베이스를 기본 레이어로 사용하여 사용한 ORM의 성능).


3

SQL (SQL Server, mysql, Oracle 등)의 많은 구현이 있지만 관계형 데이터 저장 및 검색을 위해 설계된 범용 언어 라는 의미에서 동일한 목적 을 제공하는 다른 언어 는 없습니다. .

있다 객체 데이터베이스 와 같은 db4o는은 , 유사한 소위가 되는 NoSQL 단지 데이터 저장 메커니즘에 대한 참조 데이터베이스 하지 않는 SQL에 의존하는,하지만 같은 가장 일반적으로 오픈 소스 제품 카산드라는 구글에 느슨하게를 기반으로 Bigtable을 개념.

CDF와 같은 특수 목적의 데이터베이스 제품도 많이 있지만 걱정할 필요가 없습니다. 필요한 경우 알 수 있습니다.

이들 중 어느 것도 SQL과 동일하지 않습니다.

그렇다고 "더 나쁘다"거나 "더 나쁘다"는 의미가 아니라 동일하지 않습니다. Dennis Forbes는 최근 SQL에 대해 떠오르는 여러 가지 이상한 주장을 분류 하는 훌륭한 게시물을 작성했습니다 . 그는 이러한 불만이 처음부터 잘못된 도구를 선택했거나 SQL DBMS를 제대로 사용하지 않는 사람들과 상점에서 비롯된 것이라고 주장합니다 (그리고 저는 동의합니다). 모든 열이있는 다른 SQL 데이터베이스를 참조하십시오.varchar(50) 하나의 인덱스 나 키가 아닌 .)

또 다른 소셜 네트워킹 사이트를 구현하고 있고 ACID 원칙에 너무 관심이 없다면 db4o와 같은 제품을 살펴보기 시작하십시오. 그러나 미션 크리티컬 비즈니스 시스템을 개발하는 경우 "SQL 짜증"코러스에 참여하기 전에 두 번 생각 하는 것이 좋습니다. 먼저 조사를 수행하고 다양한 제품이 지원할 수있는 기능과 지원할 수없는 기능을 찾으십시오.


편집-답변을 작성 하느라 바빴고 몇 분 동안 질문 업데이트를받지 못했습니다. 그러나 SQL은 본질적으로 DBMS 자체와 분리 할 수 ​​없습니다. SQL 데이터베이스 제품을 실행하는 경우 SQL, 기간으로 액세스합니다.

아마도 당신은 구문에 대한 추상화를 찾고있을 것입니다. Linq to SQL, Entity Framework, Hibernate / NHibernate, SubSonic 및 기타 ORM 도구는 모두 SQL이 아닌 고유 한 SQL 유사 구문을 제공합니다. 이 모든 것이 SQL로 "컴파일"됩니다. SQL Server를 실행하는 경우 데이터베이스 내에서 실행되는 모든 .NET 언어로 코드를 작성할 수있는 CLR 함수 / 프로 시저 / 트리거를 작성할 수도 있습니다. 그러나 이것은 실제로 SQL을 대체하는 것이 아니라 확장에 가깝습니다.

SQL 데이터베이스 위에 레이어링 할 수있는 완전한 "언어"를 알지 못합니다. 다른 데이터베이스 제품으로 전환하지 않으면 결국 파이프에서 SQL을 보게 될 것입니다.


관계형 데이터베이스와 SQL 데이터베이스를 혼동하고 있다고 생각합니다. 관계형 데이터베이스가 SQL을 사용해야하는 특별한 이유는 없습니다 (다른 모든 사람이 SQL을 사용하는 경우 제외). 예, 대부분의 데이터베이스 제품은 SQL 만 사용한다는 것을 알고 있습니다.
Brendan Long

1
@Brendan Long : 맞습니다. 관계형 데이터베이스는 SQL을 사용할 필요 가 없습니다 . 그러나 이것이 관계형 데이터베이스 사용하는 것입니다. 오늘날 존재하는 다른 비 SQL 제품은 관계형 데이터베이스가 아닙니다.
Aaronaught

D와 Quel은 어떻습니까? 그다지 인기가 없어 보이지만 존재합니다 (관계형 데이터베이스에 사용됨).
Brendan Long

1
@Brendan Long : 내가 아는 한 Quel은 SQL로 대체되었습니다. 처음에 D에 대해 들어 봤고 위키 기사에서 D가 실제로 언어 자체가 아니라 DB 언어가 가져야하는 정의 된 기능 집합 인 것처럼 보였습니다. 매우 모호한 구현이있을 수 있지만 위의 내용이 크게 변경되지는 않습니다. 또한 사람들이 "SQL Sucks"라고 말할 때 SQL 문법을 언급하는 것이 아니라 SQL 기반 관계형 데이터베이스를 (올바르게 또는 잘못) 언급한다는 것을 인식해야한다고 생각합니다.
Aaronaught

3

SQL은 사실상입니다.

개발자를 보호하려는 프레임 워크는 결국 고유 한 특정 언어를 만들었습니다 (Hibernate HQL이 떠 오릅니다).

SQL은 문제를 상당히 잘 해결합니다. 고급 프로그래밍 언어보다 배우는 것이 더 어렵지 않습니다. 기능적 언어를 이미 알고 있다면 SQL을 쉽게 이해할 수 있습니다.

최첨단 데이터베이스 (Oracle 및 SQL Server)를 제공하는 선도적 인 데이터베이스 공급 업체가 SQL을 지원하고 최적화 엔진 등에 수년을 투자했으며 SQL의 모든 선도적 인 데이터 모델링 소프트웨어 및 변경 관리 소프트웨어 거래를 고려하면 가장 안전한 내기.

또한 데이터베이스에는 쿼리 이상의 것이 있습니다. 확장 성, 백업 및 복구, 데이터 마이닝이 있습니다. 대형 공급 업체는 새로운 "캐시"엔진조차 고려하지 않는 많은 것들을 지원합니다.


LINQ는 개발자를 SQL로부터 보호하기 위해 설계된 언어가 아니라 컬렉션을 조사하는 데 사용되는 쿼리 구문이며 다른 컬렉션 소스를 지원하도록 확장 할 수 있습니다. SQL 데이터베이스는 이러한 소스 중 하나입니다.
Khanzor

좋은 점, LINQ는 유효한 예가 아닙니다. 편집.
codenheim

2

SQL 문제로 인해 Portland Pattern Repository wiki 에서 SMEQL 이라는 초안 쿼리 언어를 만들게 되었습니다 . 의견 환영합니다. 함수형 프로그래밍과 IBM의 실험적인 Business System 12 언어에서 아이디어를 차용했습니다. (원래 TQL이라고 불렀지 만 나중에 그 이름이 사용되었습니다.)


SMEQL은 살고 있습니까? C2 외부에 존재합니까? 소프트웨어가 있습니까?
david.pfx 2014 년


1

.NET 세계에서는 여전히 SQL과 같은 느낌이 있지만 LINQ-to-SQL을 사용하면 데이터에 대해 SQL과 메모리 내 .NET 처리를 적절히 혼합 할 수 있습니다. 또한 아무도 원하지 않는 많은 하위 수준의 데이터 연결 작업을 단순화합니다.

완전히 다른 사고 방식의 데이터베이스 유형을보고 싶다면 CouchDB를 살펴보십시오 . "Better"는 분명히 상대적 요구 사항이며 이러한 종류의 비 관계 데이터베이스는 "Better"이지만 특정 시나리오에서만 가능합니다.


0

SQL 언어 는 매우 강력하며 관계형 데이터베이스 관리 시스템은 여전히 ​​큰 성공을 거두었습니다. 그러나 매우 높은 확장 성과 가용성이 필요하지만 높은 수준의 데이터 일관성이 반드시 필요한 것은 아닙니다 (최종 일관성이 중요합니다). 다양한 시스템은 완전한 ACID 호환 트랜잭션의 필요성을 완화하여 RDBMS보다 더 나은 성능과 확장 성을 얻습니다. 이것들은 "NoSQL"로 명명되었지만 다른 사람들이 지적했듯이 이것은 잘못된 명칭입니다. 아마도 NoACID 데이터베이스라고 불러야합니다.

Michael Stonebraker는 The "NoSQL"Discussion has No to Do With SQL 에서이를 다룹니다 .


그렇다면 NoACID "데이터베이스"는 데이터베이스 액세스 언어로서 SQL의 대안입니까? 아니요, 그렇지 않습니다.
reinierpost 2010

SQL은 강력하지만 관계형 대수는 더 강력합니다.
McKay

@reineirpost : 동의합니다. SQL을 사용하여 NoACID 데이터베이스를 쿼리 할 수 ​​있습니다. 당신은 너무 대신 관계의 텍스트 파일을 조회 할 수있다 (고대 유닉스 명령 행 도구 중 일부는 관계 대수에서 작업에 해당합니다.
짐 Ferrans

@McKay : 관계형 대수 구문을 지원하는 상용 RDBMS가 있습니까? 그것은 멋질 것입니다.
Jim Ferrans

이 스레드의 다른 사람들은 Dataphor와 같은 것을 언급했으며 관계형 대수를 더 잘 따르는 것을 목표로합니다.
McKay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.