표준 SQL 및 데이터베이스 입문
데이터베이스에는 여러가지 종류가 있고 SQL을 사용하는 것은 "관계형 데이터베이스(Ralation Database)'라고 불리는 종류의 데이터베이스인데, 관계형 데이터베이스는 데이터를 2차원 표형태로 관리하는 가장 일반적인 데이터베이스입니다.
다른 종류는 어떻 것이 있을까요?
예를 들어, 키와 그에 관련된 값을 세트로 관리하는 '키-벨류형 스토어(Key-value store, KVS)'나 '문서지향 데이터베이스(document-oriented database)'등이 있고, 이들을 통틀어 NoSQL계열 DBMS라고 부르기도 합니다. NoSQL은 'Not only SQL'이라는 의미가 있습니다.
즉, SQL만 있는 것이 아니라, "SQL이 아니면, 그 외냐"라는 형태입니다. 하지만 여러가지 종류가 있더라도, 데이터베이스 중에서 압도적인 대부분을 차지하는 것은 관계형 데이터베이스입니다. 그래서 이 관계형 데이터베이스를 사용하기 위해 SQL을 배우자는 것입니다.
데이터를 관리하고자 할 때는 무엇을 어떤 방식으로 관리해야 하는지 고민할 필요가 있으며, 관계형 데이터베이스의 경우, 데이터를 2차원 표(table)형태로 관리합니다.
관계형 데이터베이스는 2차원 표로 데이터를 관리하는 것입니다. 데이터베이스라고 해서 반드시 표 형태이어야 하는 것은 아닙니다. 데이터를 어떤 형태로 만들어야 컴퓨터에서 효율적으로 관리할 수 있는지에 대한 문제는 큰 주제입니다. 그리고 표형태로 하면 보기 쉽고, 컴퓨터로 처리하기에도 분명 편리해 보입니다. 즉 데이터를 항상 표의 횽태로 만드는 것이 관계형 데이터베이스라는 것입니다.
이전에 사용한 '학생마스터'에는 '학생번호', '이름', '캠퍼스'라는 3개 항목이 있으며, 예를 들어, 학생번호 'C0001', 이름 '이철순', 캠퍼스 '강남구'라는 조합과 학생번호 'C0002', 이름 '김기리', 캠퍼스 '종로구'라는 조합이 저장되어 있었습니다.
이를 표의 형태로 나타내면 아래와 같습니다. 동일한 항목은 세로방향으로 나열하고, 데이터 조합은 가로방향으로 배열하며, 세로방향을 열(column), 가로방향을 행(row)라고 부릅니다.
행과 열
데이터베이스 관리 시스템에 원하느 데이터를 요청하는 것을 질의(query, 쿼리)라고 하는데, SQL을 사용한 질의 결과 역시 2차원 표 형태가 됩니다.
데이터를 단순히 표 형태로 나열하는 것만으로는 아직 부족합니다. 추가로 '제약'이라고 불리는 규칙들을 설정할 수 있습니다. 제약이라고 들으면 어쩐지 조금 귀찮고 불편하다는 느낌이 들 수 있지만, 반드시 그런 것은 아닙니다. 데이터를 올바른 상태로 관리하고 싶다면, 제약을 정해두고 DBMS가 그 제약을 준수하도록 하는 편이 오히려 더 편리합니다.
각각의 학생에 개별 학생번호가 부여되어 있는 경우, '학생마스터'의 '학생번호'는 중복된 값을 저장할 수 없도록 합니다. 이를 '유일성 제약(unique constraint)'라고 합니다. 또한, 앞서 '학생마스터'외에도 '선택과목'이라는 테이블을 사용했습니다. '선택과목'테이블에는 '학생번호'와 '과목'이라는 열이 있었는데, 선택과목 테이블의 '학생번호'는 반드시 학생마스터에도 등록되어 있어야 합니다. 이 규칙을 '참조제약' 또는 '참조정합성 제약(referential integrity constraint)'이라고 합니다. 참조제약은 뒤에서 설명할 '외부키'로 선언되므로, '외부키 제약(foreign key constraint)'라고도 불리기도 합니다.
제약
'제약'이라는 것은 DBMS가 체크하도록 하는데, 바로 DBMS에 의해 강제되는 규칙이라는 의미입니다. 만약에 DBMS를 사용하지 않고 관리한다면 '직접 스스로가 주의하는' 것밖에는 방법이 없기 때문입니다.
반대로, 사용자가 모두 관리할 수 있을 정도의 양이라면 굳이 DBMS로 관리할 필요는 없을지도 모릅니다. 또한 앞으로 어떻게 사용할지, 어떤 요소가 추가될지 전혀 예측할 수 없기 때문에, 어찌되었든 데이터를 축적해두려고 한다면, 깔끔하게 2차원 표 형태로 관리하는 관계형 데이터베이스가 아닌 타입의 DBMS가 더 적합할수도 있습니다. 그리고 학원처럼 성적을 관리하거나 경리업무처럼 일상적인 업무에 관련된 데이터에는 관계형 데이터베이스가 적합합니다.
관계형 데이터베이스를 사용하기로 했다면, 어떤 테이블로 데이터를 관리할지 고민해야 합니다. 이런 경우 3계층 스키마로 접근하는 것이 핵심입니다.
데이터베이스에 국한되지 않고, 어떤 시스템을 설계할 때에는 전체적인 틀이나 구조를고려하는 것이 중요합니다. 이런 틀을 '스키마(schema)'라고 부릅니다. 데이터베이스 설계에서는 '3계층 스키마(three schema structure)'라고 하며, 3개의 계층으로 전체틀을 구성합니다.
첫번째, '외부스키마(external schema)'입니다. 이는 최종사용자(엔드유저)의 관점에서 바라본 틀입니다. 관계형 데이터베이스에서는 최종사용자가 '보고 싶어하는' 데이터를 SELECT문을 통해 유연하게 추출할수 있습니다.
한편, 컴퓨터가 관리하는 데이터는 결국 디스크(SSD나 HDD)에 저장됩니다. 데이터를 파일에 저장할 때의 구조(물리적 구조등)를 다루는 부분은 '내부스키마(internal schema)'라고 부릅니다. 이 부분은 DBMS내부에서 수행되는 처리로 최종사용자가 직접 다루는 영역은 아닙니다.
그리고 외부 스키마와 내부스키마를 잇는 다리 역할을 하는 것이 '개념스키마(conceptual schema)'입니다. 데이터베이스 설계의 중심은 바로 이 개념 스키마의 설계에 해당합니다.
아래와 같이 왼쪽 '애플리케이션'에서 데이터를 화면에 표시하거나 입력을 수행하는 부분이 외부 스키마에 해당합니다. 그리고 애플리케이션에 데이터를 제공하는 DBMS 중, 테이블 정의 등 데이터베이스 설계 부분이 개념 스미카이며, 데이터를 저장장치에 보관하고 읽고 쓰기를 수행하는 부분이 내부 스키마입니다.
시스템 설계시 3가지 스키마(3계층 스키마)
조금 복잡해졌습니다. 여기서 핵심은 어던 데이터를 보고 싶은가?(외부스키마)와 어떤 테이블로 구성할 것인가?(개념스키마)는 별개라는 것입니다. 즉, 테이블을 만들 때 원하는 항목들을 그냥 나열하는 것만으로는 부족하다는 것입니다. 표시하고자 하는 항목이나 표시순서를 고료하는 것은 '외부 스키마'에 해당합니다. SQL에서는 SELECT로 열을 지정하고, JOIN으로 테이블을 결합하는 등의 작업을 통해 얻은 '결과'가 외부 스키마입니다. 그리고 '테이블' 자체는 '개념스키마'에 해당합니다. 요점은 이 둘을 별개로 생각하는 것이 핵심입니다. 관계형 데이터베이스에서 가장 중요한 것은 바로 이 테이블의 설계입니다. 제대로 설계된 테이블이 있다면, 원하는 데이터는 SELECT문을 통해 언제든지 만들어 낼수 있다는 것입니다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon JW Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5