문제

SQL에 대한 ANSI 표준이 있음에도 불구하고 SQL 배포가 왜 그렇게 비표준적인가요?SQL 데이터베이스가 작동하는 방식에 실제로 그렇게 많은 의미 있는 차이점이 있습니까? 아니면 제가 작업해 온 두 개의 데이터베이스만 해당됩니까?MS-SQL과 PostgreSQL?왜 이러한 차이가 발생하는가?

도움이 되었습니까?

해결책

이는 "스텔스 잠금"의 한 형태입니다.Joel은 여기에서 매우 자세히 설명합니다.

기업은 구현 시 비즈니스 기능을 비표준 또는 이상한 지원되지 않는 기능에 묶어두게 되며, 이로 인해 공급업체에서 경쟁업체로 이동하는 능력이 제한됩니다.

반면에, 절반의 두뇌를 가진 사람은 독점 부분을 추상화하거나 너무 심각해지면 잠금을 완전히 피하는 경향이 있기 때문에 매우 근시안적입니다.

다른 팁

ANSI 표준은 제한된 명령 및 데이터 유형 세트만 지정합니다.그 이상으로 넘어가면 구현자는 스스로 책임을 지게 됩니다.그리고 자동 증가 열과 같은 일부 매우 중요한 개념은 전혀 지정되지 않습니다.SQLite는 null이 아닌 첫 번째 정수를 선택합니다. MySQL에서는 AUTO INCREMENT, PostgreSQL은 시퀀스 등을 사용합니다.그것은 엉망이고 그것은 OSS 데이터베이스에만 있는 것입니다!Oracle, Microsoft, IBM이 함께 까다로운 기능을 결정하도록 해보세요.

첫째, 비호환성 측면에서 데이터베이스는 브라우저나 운영 체제와 같지 않습니다.몇 시간의 교육을 받은 사람이라면 누구나 모든 SQL 데이터베이스에서 선택, 삽입, 삭제 및 업데이트 작업을 시작할 수 있습니다.한편, 모든 브라우저에서 동일하게 렌더링되는 HTML을 작성하거나 둘 이상의 OS에 대한 시스템 코드를 작성하는 것은 어렵습니다.일반적으로 SQL의 차이점은 성능이나 상당히 난해한 기능과 관련이 있습니다.주요 예외는 날짜 형식과 기능인 것 같습니다.

둘째, 데이터베이스 개발자는 일반적으로 자신의 제품을 다른 제품과 차별화하는 기능을 추가하려는 동기를 갖습니다.Oracle, MS SQL Server, MySQL과 같은 제품은 실제로 교차 수분이 거의 이루어지지 않는 광대한 생태계입니다.내 직장에서는 Oracle과 MySQL을 사용하지만 필요하거나 원할 경우 약 하루 안에 100% Oracle로 전환할 수 있습니다.그래서 저는 Oracle이 각 릴리스마다 제공하는 반짝이는 장난감에 대해 많은 관심을 갖고 있지만 우리가 사용하고 있는 MySQL 버전이 무엇인지조차 모릅니다.IBM, Microsoft, PostgreSQL 및 나머지는 우리가 생각하는 한 존재하지 않을 수도 있습니다.고객과 사용자를 확보하고 유지하는 기능을 갖는 것은 데이터베이스 세계의 호환성보다 훨씬 더 중요합니다.(내 생각에는 이것이 "고정" 답변에 대한 긍정적인 해석인 것 같습니다.)

셋째, 회사마다 SQL을 다르게 구현하는 데에는 타당한 이유가 있습니다.예를 들어 Oracle에는 매우 빠르고 확장 가능한 일관된 읽기를 허용하는 다중 버전 관리 시스템이 있습니다.다른 데이터베이스에는 해당 기능이 없지만 일반적으로 행 삽입 및 트랜잭션 롤백 속도가 더 빠릅니다.이것이 이러한 시스템의 근본적인 차이점입니다.(적어도 일반적인 경우에는) 하나를 다른 것보다 더 좋게 만드는 것은 아닙니다. 단지 다를 뿐입니다.데이터베이스 엔진의 SQL이 장점을 활용하고 단점을 최소화하려고 시도하더라도 놀랄 일이 아닙니다.사실, 이렇게 하지 않는 것은 개발자의 무책임한 일입니다.

남자:표준은 실제로 ID 열, 시퀀스, 트리거, 루틴, upsert 등을 포함한 많은 주제를 다루고 있습니다.그러나 물론 이러한 표준 구성 요소 중 상당수는 첫 번째 구현보다 늦게 도입되었을 수 있습니다.이는 일반적으로 SQL 표준 준수율이 다소 낮은 이유일 수 있습니다.

닐:실제로 SQL 표준이 구현보다 앞서 있는 영역이 있습니다.예를 들어 CREATE ASSERTION이 있으면 좋겠지만, 제가 아는 한 DBMS에서는 아직 어설션을 구현하지 않습니다.

개인적으로 저는 일부 ISO 표준(예: SQL 표준)의 폐쇄적 특성이 문제의 일부라고 생각합니다.표준을 온라인에서 쉽게 사용할 수 없으면 구현자/기획자가 이를 알 가능성이 적고 무엇을 요구해야 할지 모르기 때문에 규정 준수를 요청하는 고객이 너무 적습니다.

1800이 말한 것처럼 확실히 효과적인 잠금 기능입니다.그러나 데이터베이스 공급업체에 대한 공정성을 고려하여 SQL 표준은 항상 현재 데이터베이스의 기능 세트를 따라잡고 있습니다.오늘날 우리가 보유하고 있는 대부분의 데이터베이스는 꽤 오래된 계보를 가지고 있습니다.Microsoft SQL Server의 뿌리를 추적해 보면 70년대에 작성된 최초의 관계형 데이터베이스 중 하나인 Ingres를 찾을 수 있을 것입니다.그리고 Postgres는 원래 80년대에 Ingres의 후속 제품으로 같은 사람들에 의해 작성되었습니다.Oracle은 과거로 거슬러 올라갑니다. MySQL이 어디서 들어왔는지 잘 모르겠습니다.

데이터베이스 비이식성은 좋지 않지만 훨씬 더 나쁠 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top