Differences between relational algebra and SQL

Tags:

오늘 DB수업시간에 누군가 질문 했던 이야기인데요.

Q) Let R=(A,B,C), S=(D,E,F). r(R)과 r(S)에 대해 Relational Algebra r x s와 동일한 SQL문은?

답은 SELECT distinct * FROM r,s 입니다. RDBMS가 relational algebra의 모든 식을 표현할 수 있어 relationally complete 하지만, RDBMS가 relational algebra와 같은건 아니죠.

가장 큰 차이는 RDBMS의 테이블이란 것은 중복을 허가하고 relational algebra는 그렇지 않단거죠. relation의 정의가 원래 cartesian product의 subset이거든요. 다시 말해 relation은 set이죠. 그리고 set에서는 원래 중복이 허가가 되지 않죠.

따라서 SQL에서 distinct를 꼭 써야 relational algebra와 같아집니다.

이와같이 RDBMS에서 중복을 허가하는 이유는
1) 모든 사람이 중복이 제거된 테이블을 원하는 것은 아니다.
2) 중복을 제거하기 위해서는 sort가 수반되는데 그 비용이 크다.

라는 두가지 이유가 있습니다.

물론 DB전공할 것도 아니면서 이런 자잘하고 한정된 이야기까지 알아야하는 건 아니지만, 적어도 CS 석사/박사과정이면 알아두는 것도 좋을듯. 이건 학부과정 교재에 다 나온 이야기거든요. 아무래도 제가 수업듣는 곳에서의 학생들은 진학할때 전공 리뷰를 하지 않아서 그런지 빡시게 복습을 안한 듯..

Comments

One response to “Differences between relational algebra and SQL”

  1. 김태준 Avatar
    김태준

    선생님 질문이 잇습니다.
    SQL의 결과는 Relation이 아니라 Table(=multiset)인 것이고
    Relational Algebra의 결과가 Relation(=set) 인 것이죠?

    릴레이션에는 중복된 튜플이 없는게 원칙인데 SQL의 결과는 중복된 튜플이 있어서 릴레이션이라고 말할 수 없는 것 같아서 질문드립니다!

Leave a Reply

Your email address will not be published. Required fields are marked *