DataBase
데이터베이스 체제 이론
목차
DB
데이터 베이스 기본 개념
데이터 베이스의 필요성
- 데이터과 정보의 차이
- 데이터(data): 현실 세계에서 단순히 관찰하거나 측정하여 수집한 사실이나 값.
-
정보(information): 의사 결정에 유용하게 활용할 수 있도록 데이터를 처리한 결과물.
예시: 학생에 대한 정보를 모을 때 영어성적, 수학성적, 한자성적, 집주소, 부모정보, 형제의 유무 등등 조사를 한다고 하자. 이때 이 모든 데이터가 학생의 성적을 매기는데 필요한가? 아니다. 영어 수학 한자 성적이 필요하므로 이거를 통해서 전체 성적을 매길 수 있다. 이게 정보이다. 그러나 성적을 매기는 것과는 관계 없이 수집한 것들은 특정 목적을 띄지 않으므로 data 라고 하는 것.
즉, 가공을 거치지 않은 것이 데이터이고 가공한 것이 정보이다. - 정보 처리(information processing): 데이터에서 정보를 추출하는 과정 또는 방법
- 정보 시스템과 데이터 베이스
- 정보 시스템(information system): 조직 운영에 필요한 데이터를 수집하여 저장해두었다가 필요할 때 유용한 정보를 만들어 주는 수단. DB보다는 좀 더 큰 바운더리의 개념이다.
- 데이터베이스(database): 정보 시스템 안에서 데이터를 저장하고 있다가 필요할 때 제공하는 역할 담당. 오라클 DB의 경우는 system software라고 한다.
- 현실세계 $\rightarrow$ (데이터) $\rightarrow$ 정보 시스템에서 처리(정보 시스템 내부, DB에 접속) $\rightarrow$ (정보) $\rightarrow$ 의사 결정자
데이터베이스 정의와 특징
- DataBase: 특정 조직의 여러 사용하자 공유하여 사용할 수 있도록 통합해서 저장하고 운영하는 데이터의 집합.
- 정의
- Shared Data: 특정 조직의 여러 사용자가 함께 소유하고 이용할 수 있는 공용 데이터.
- Intergrated Data: 최소의 중복과 통제 가능한 중복만 허용하는 데이터.
- Stored Data: 컴퓨터가 접근할 수 있는 매체에 저장된 데이터.
- Operational Data: 조직의 주요 기능을 수행하기 위해 지속적으로 꼭 필요한 데이터.
- 특징
- Realtime Approach: 사용자의 데이터 요구에 실시간으로 응답.
- Continuous Change: 데이터의 계속적인 삽입, 삭제, 수정을 통해 현재의 정확한 데이터를 유지.
- Simultaneous sharing: 서로 다른 데이터의 동시 사용뿐만 아니라 같은 데이터의 동시 사용도 지원.
-
Content-based reference: 데이터가 저장된 주소나 위치가 아닌 내용으로 참조 가능.
예시: 재고량이 500개 이상인 제품의 이름을 검색하시오.
과학 시대의 데이터
- 형태에 따른 데이터 분류
- 정형 데이터(Suructured Data): 구조화된 데이터, 미리 정해진 구조에 따라서 저장된 데이터.
- 해당 데이터 구조에 대한 설명이나 내용은 별도로 관리되어 유지됨.
예시: 엑셀 스프레드시트, 관계 데이터베이스 테이블 등
- 반정형 데이터(semi-Structured Data): 구조에 따라 저장된 데이터지만 데이터 내용안에 구조에 대한 설명이 함께 존재함.
- 구조를 파악하는 파싱(Parsing) 과정이 필요
- 보통 파일 형태로 저장
예시: 웹에서 데이터를 교환하기 위해 작성하는 HTML, XML, JSON 그리고 웹 로그, 센서 데이터 등
-
비정형 데이터(Unstructred Data): 정해진 구조가 없이 저장된 데이터
예시: SNS 텍스트나 영상 이미지, 워드 PDF 문서같은 멀티미디어 등
- 정형 데이터(Suructured Data): 구조화된 데이터, 미리 정해진 구조에 따라서 저장된 데이터.
- 데이터 분류(특성)
- 범주형 데이터(Categorical Data): 범주로 구분할 수 있는 값. 종류를 나타내는 값을 가진 데이터. 크기 비교와 산술적인 연산이 가능하지 않아서 질적 데이터라고 부르기도 함.
-
명목형 데이터(Nominal Data): 순서 서열이 없는 값을 가지는 데이터.
예시: 성별, 혈액형, MBTI, 음식 메뉴 등
-
순서형 데이터(Ordinal Data): 순서 서열이 있는 값을 가지는 데이터.
학년, 학점, 등급 등
-
- 수치형 데이터(Numerical Data): 크기 비교와 산술적인 연산이 가능한 숫자 값을 가진 데이터. 양적 데이터라고 하기도 함.
-
이산형 데이터(Discrete Data): 개수를 셀 수 있는 띄엄띄엄 단절된 숫자 값을 가지는 데이터. 소수점이 없는 정수 타입의 값으로 표현.
예시: 고객 수, 판매량, 합격자 수 등
-
연속형 데이터(Continuous Data): 측정을 통해 얻어지는 연속적으로 이어진 숫자 값을 가지는 데이터. 소수점이 있는 실수 타입의 값으로 표현.
예시: 키, 몸무게, 온도, 점수 등
-
- 정성적 데이터(Qualitative Data): 좁은 의미로는 범주형 데이터, 사람의 주관적인 생각과 평가를 기술한 비정형 데이터.
-
정량적 데이터(Quantitative Data): 좁은 의미로는 수치형 데이터, 객관적인 측정을 통해 수치나 도형 기호 등으로 표현한 정형 데이터.
정량적 데이터에 비해서 정성적 데이터가 저장 및 처리 측면에서 더 큰 비용이 드는 경우가 많음
- 범주형 데이터(Categorical Data): 범주로 구분할 수 있는 값. 종류를 나타내는 값을 가진 데이터. 크기 비교와 산술적인 연산이 가능하지 않아서 질적 데이터라고 부르기도 함.
데이터베이스 관리 시스템
데이터베이스 관리시스템의등장배경
- 파일 시스템(File System): 데이터를 파일로 관리하기 위해 파일을 생성•삭제•수정•검색하는 기능을 제공하는 소프트웨어. 응용 프로그램별로 필요한 데이터를 별도의 파일로 관리한다.
- 파일 시스템의 문제점
- 같은 내용의 데이터가 여러 파일에 중복 저장된다.
- 데이터 중복성
- 저장 공간의 낭비는 물론 데이터 일관성과 데이터 무결성을 유지하기 어려움.
한 고객의 연락처를 고객 데이터 파일에서만 수정하고 실수로 주문 데이터 파일에서 수정하지 않았다면...? 골로 간다.
- 그래서 데이터 통합을 진행하여 중복되지 않게 만들 필요가 있다.
- 응용 프로그램이 데이터 파일에 종속적이다.
- 데이터 종속성
- 사용하는 파일의 구조를 변경하면 응용 프로그램도 함께 변경해야 함
- 데이터 파일에 대한 동시 공유, 보안, 회복 기능이 부족하다.
- 응용 프로그램을 개발하기 쉽지 않다.
- 같은 내용의 데이터가 여러 파일에 중복 저장된다.
데이터베이스 관리시스템의 정의
- DBMS(DataBase Management System): 파일 시스템의 문제를 해결하기 위해 제시된 소프트웨어. 조직에 필요한 데이터를 데이터베이스에 통합하여 저장하고 관리함.
- DBMS의 주요 기능
- 정의 기능: 데이터베이스 구조를 정의하거나 수정할 수 있다.
- 조작 기능: 데이터를 삽입•삭제•수정•검색하는 연산을 할 수 있다.
- 제어 기능: 데이터를 항상 정확하고 안전하게 유지할 수 있다.
데이터베이스 관리시스템의장•단점
- DBMS의 장점
- 데이터 중복을 통제할 수 있다
- 데이터베이스에 데이터를 통합하여 관리하므로 데이터 중복 문제 해결
- 데이터 독립성이 확보된다
- 응용 프로그램 대신 데이터베이스에 접근하고 관리하는 모든 책임 담당 $\rightarrow$ 응용 프로그램과 데이터베이스 사이의 독립성이 확보됨.
- 데이터를 동시 공유할 수 있다
- 동일한 데이터를 여러 응용 프로그램이 공유하여 동시 접근할 수 있게 지원 $\rightarrow$ 동시 접근 제어 기술 보유.
- 데이터 보안이 향상된다
- 중앙 집중식으로 데이터를 관리하므로 효율적인 접근 제어 가능.
- 권한이 없는 사용자의 접근, 허용되지 않은 데이터와 연산에 대한 요청 차단.
- 데이터 무결성을 유지할 수 있다
- 데이터 삽입•수정 등의 연산이 수행될 때마다 유효성을 검사하여 데이터 무결성(정확성)을 유지
- 표준화할 수 있다
- 데이터베이스 관리 시스템이 정한 표준화된 방식을 통해 데이터베이스에 접근
- 장애 발생시 회복이 가능하다
- 데이터 일관성과 무결성을 유지하면서 장애 발생 이전 상태로 데이터를 복구하는 회복 기능 지원
- 응용 프로그램 개발 비용이 줄어든다
- 파일 시스템을 사용할 때보다 데이터 관리 부담이 줄어 응용 프로그램 개발 비용 및 유지 보수 비용이 줄어듦
- 데이터 중복을 통제할 수 있다
- DBMS의 단점
- 비용이 많이 든다
- 별도 구매 비용이 들고 동시 사용이 허용되는 사용자 수에 따라 가격이 증가한다.
- 백업과 회복방법이 복잡하다
- 장애 발생의 원인과 상태를 정확히 파악하기 어렵고 회복 방법도 복잡하다. (그래서 자격증이 따로 있는 것임)
- 중앙 집중 관리로 인한 취약점이 존재한다
- 데이터베이스나 데이터베이스 관리 시스템에 장애가 발생하면 전체 시스템의 업무 처리가 중단됨.
- 데이터베이스 의존도가 높은 시스템일수록 가용성과 신뢰성에 치명적이다.
- 비용이 많이 든다
데이터베이스 관리 시스템의 발전 과정
- 1세대
- 네트워크 DBMS: 데이터베이스를 그래프 형태로 구성
IDS(Integrated Data Store
- 계층 DBMS: 데이터베이스를 트리 형태로 구성
IMS(Information Management System
- 네트워크 DBMS: 데이터베이스를 그래프 형태로 구성
- 2세대
- 관계(Relationship) DBMS: 데이터베이스를 테이블 형태로 구성
예시: 오라클(Oracle), MS SQL 서버, Access, Informix, MySQL, MariaDB
- 3세대
- 객체지향 DBMS: 객체를 이용해 데이터베이스를 구성
- 객체관계 DBMS: 객체지향 DBMS + 관계 DBMS
예시: 관계DBMS제품들이 객체지향 기능을 지원하면서 객체관계 DBMS로 분류되기도 함. 오라클이 그 대표 예시
- 4세대
- NoSQL DBMS: 비정형 데이터를 처리하는데 적합하고 확장성이 뛰어남
- 안정성과 일관성 유지를 위한 복잡한 기능 포기
- 데이터 구조를 미리 정해두지 않는 유연성을 가짐
- 여러 대의 컴퓨터에 데이터를 분산하여 저장하고 처리하는 환경에서 주로 사용
예시: MongoDB, HBase, Cassandra, Redis, Neo4j, OrientDB
- NewSQL DBMS: 관계 DBMS의 장점 + NoSQL의 확장성 및 유연성
- 정형 및 비정형 데이터를 안정적이고 빠르게 처리 가능
예시: 구글 스패너(Spanner), VoltDB, NuoDB
- NoSQL DBMS: 비정형 데이터를 처리하는데 적합하고 확장성이 뛰어남
데이터베이스 시스템
데이터베이스시스템의정의
- 데이터베이스 시스템(DBS; DataBase System)
- 데이터베이스에 데이터를 저장하고 이를 관리하여 조직에 필요한 정보를 생성해주는 시스템
데이터베이스의 구조
- 스키마(Schema): 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것
- 인스턴스(Instance): 스키마에 따라 데이터베이스에 실제로 저장된 값
고객 - 고객번호(INT) 이름(CHAR(10)) 나이(INT) 주소(CHAR(20))
- 3단계 데이터베이스 구조
- 미국 표준화 기관인 ANSI/SPARC에서 제안
- 데이터베이스를 쉽게 이해하고 이용할 수 있도록 하나의 데이터베이스를 관점에 따라 세 단계로 나눈 것
- 외부 단계(External level)
- 데이터베이스를 개별 사용자 관점에서 이해하고 표현하는 단계
- 하나의 데이터베이스에 외부 스키마가 여러 개 존재할 수 있음
- 외부 스키마(External schema)
- 외부 단계에서 사용자에게 필요한 데이터베이스를 정의한 것
- 각 사용자가 생각하는 데이터베이스의 모습, 즉 논리적 구조로 사용자마다 다름
- 서브 스키마(Sub schema)라고도 함
- 개념 단계(Conceptual level)
- 데이터베이스를 조직 전체의 관점에서 이해하고 표현하는 단계
- 하나의 데이터베이스에 개념 스키마가 하나만 존재함
- 개념 스키마(Conceptual schema)
- 개념 단계에서 전체 데이터베이스의 논리적 구조를 정의한 것
- 조직 전체의 관점에서 생각하는 데이터베이스의 모습
- 전체 데이터베이스에 어떤 데이터가 저장되는지, 데이터들 간에는 어떤 관계가 존재하고 어떤 제약조건이 있는지에 대한 정의 뿐만 아니라, 데이터에 대한 보안 정책이나 접근 권한에 대한 정의도 포함
- 내부 단계(Internal level)
- 데이터베이스를 저장장치의 관점에서 이해하고 표현하는 단계
- 하나의 데이터베이스에 내부 스키마가 하나만 존재함
- 내부 스키마(Internal schema)
- 전체 데이터베이스가 저장 장치에 실제로 저장되는 방법을 정의한 것
- 레코드 구조, 필드 크기, 레코드 접근 경로 등 물리적 저장 구조를 정의
- 테이블 > 레코드 > 속성 > 데이터; 여기서 테이블에서 어느 한 속성으로 쭉 이어지면 그것이 필드이다.
- 외부 단계(External level)
- 각 단계별로 다른 추상화(abstraction) 제공
- 내부 단계에서 외부 단계로 갈수록 추상화 레벨이 높아짐
- 내부 단계는 구체적인 내용 위주로 들어갈 것이고, 외부 단계는 그냥 쓰기만 하면 되니까 추상화 된다는 것.
- 사상 또는 매핑(대응)
- 스키마 사이의 대응 관계
- 외부/개념 사상: 외부 스키마와 개념 스키마의 대응 관계(더 추상적)
- 응용 인터페이스(Application interface)라고도 함
- 개념/내부 사상: 개념 스키마와 내부 스키마의 대응 관계(덜 추상적)
- 저장 인터페이스(Storage interface)라고도 함
- 외부/개념 사상: 외부 스키마와 개념 스키마의 대응 관계(더 추상적)
- 미리 정의된 사상 정보를 이용해서 사용자가 원하는 데이터에 접근한다.
- 데이터베이스를 3단계 구조로 나누고 단계별로 스키마를 유지하며 스키마 사이의 대응 관계를 정의하는 궁극적인 목적 $\rightarrow$ 데이터 독립성의 실현
- 스키마 사이의 대응 관계
- 데이터 독립성(Data Independency)
- 하위 스키마를 변경하더라도 상위 스키마가 영향을 받지 않는 특성
- 논리적 데이터 독립성
- 개념 스키마가 변경되어도 외부 스키마는 영향을 받지 않음
- 개념 스키마가 변경되면 관련된 외부/개념 사상만 정확하게 수정해주면 됨
- 물리적 데이터 독립성
- 내부 스키마가 변경되어도 개념 스키마는 영향을 받지 않음
- 내부 스키마가 변경되면 관련된 개념/내부 사상만 정확하게 수정해주면 됨
- 데이터 사전(Data Dictionary)
- 시스템 카탈로그(system catalog)라고도 함
- 데이터베이스에 저장되는 데이터에 관한 정보, 즉 메타 데이터를 유지하는 시스템 데이터베이스
- 메타 데이터(Meta data): 데이터베이스에 들어있는 데이터 자체에 대한 데이터.
- 스키마, 사상 정보, 다양한 제약조건 등을 저장
- 데이터베이스 관리 시스템이 스스로 생성하고 유지함
- 일반 사용자도 접근이 가능하지만 저장 내용을 검색만 할 수 있음
- 데이터 디렉터리(Data Directory)
- 데이터 사전에 있는 데이터에 실제로 접근하는 데 필요한 위치 정보를 저장하는 시스템 데이터베이스
- 일반 사용자의 접근은 허용되지 않음
- 사용자 데이터베이스(User Database)
- 사용자가 실제로 이용하는 데이터가 저장되어 있는 일반 데이터베이스
데이터베이스사용자
- 데이터베이스 사용자
- 데이터베이스를 이용하기 위해 접근하는 모든 사람
- 이용 목적에 따라 구분
- 데이터베이스 관리자(DBA; DataBase Administrator)
- 데이터베이스 시스템을 운영 및 관리하는 사람
- 주로 데이터 정의어와 데이터 제어어를 이용
- 주요 업무
- 데이터베이스 구성 요소 선정
- 데이터베이스 스키마 정의
- 물리적 저장 구조와 접근 방법 결정
- 무결성 유지를 위한 제약조건 정의
- 보안 및 접근 권한 정책 결정
- 백업 및 회복 기법 정의
- 시스템 데이터베이스 관리
- 시스템 성능 감시 및 성능 분석
- 데이터베이스 재구성
- 최종 사용자(End User)
- 데이터베이스에 접근하여 데이터를 조작(삽입•삭제•수정•검색)하는 사람
- 주로 데이터 조작어를 이용
- 캐주얼 사용자와 초보 사용자로 구분
- 응용 프로그래머(Application Programmer)
- 데이터 언어를 삽입하여 응용 프로그램을 작성하는 사람
- 주로 데이터 조작어를 이용
데이터언어
- 데이터 언어
- 사용자와 데이터베이스 관리 시스템 간의 통신 수단
- 사용 목적에 따라 데이터 정의어, 데이터 조작어, 데이터 제어어로 구분
- 데이터 정의어(DDL; Data Definition Language)
- 스키마를 정의하거나 수정 또는 삭제하기 위해 사용
- 데이터 조작어(DML; Data Manipulation Language)
- 데이터의 삽입•삭제•수정•검색 등의 처리를 요구하기 위해 사용
- 절차적 데이터 조작어와 비절차적 데이터 조작어로 구분
- 절차적 데이터 조작어(procedural DML)
- 사용자가 어떤(what) 데이터를 원하고 그 데이터를 얻으려면 어떻게(how) 처리해야 하는지도 설명
- 비절차적 데이터 조작어(nonprocedural DML)
- 사용자가 어떤(what) 데이터를 원하는지만 설명
- 선언적 언어(declarative language)라고도 함
- 절차적 데이터 조작어(procedural DML)
- 데이터 제어어(DCL; Data Control Language)
- 내부적으로 필요한 규칙이나 기법을 정의하기 위해 사용
- 사용 목적
- 무결성: 정확하고 유효한 데이터만 유지
- 보안: 허가받지 않은 사용자의 데이터 접근 차단, 허가된 사용자에게 권한 부여
- 회복: 장애가 발생해도 데이터 일관성 유지
- 동시성 제어: 데이터 동시 공유 지원
데이터베이스 관리 시스템의 구성
- 데이터베이스 관리와 사용자의 데이터 처리 요구 수행
- 주요 구성 요소
- 질의 처리기(Query processor)
- 사용자의 데이터 처리 요구를 해석하여 처리
- DDL 컴파일러, DML 프리 컴파일러, DML 컴파일러, 런타임 데이터베이스 처리기, 트랜잭션 관리자 등을 포함
- 저장 데이터 관리자(Stored data manager)
- 디스크에 저장된 데이터베이스와 데이터 사전을 관리하고 접근함
- 질의 처리기(Query processor)
데이터 모델링
데이터 모델링과 데이터 모델의 개념
- 데이터 모델링(Data Modeling)
- 현실 세계에 존재하는 데이터를 컴퓨터 세계의 데이터베이스로 옮기는 변환 과정
- 데이터베이스 설계의 핵심 과정
- 2단계 데이터 모델링
- 개념적 데이터 모델링(Conceptual Modeling)
- 현실 세계의 중요 데이터를 추출하여 개념 세계로 옮기는 작업
- 논리적 데이터 모델링(Logical Modeling)
- 개념 세계의 데이터를 데이터베이스에 저장하는 구조로 표현하는 작업
- 개념적 데이터 모델링(Conceptual Modeling)
- 데이터 모델(Data Model)
- 데이터 모델링의 결과물을 표현하는 도구
- 개념적 데이터 모델
- 사람의 머리로 이해할 수 있도록 현실 세계를 개념적 모델링하여 데이터베이스의 개념적 구조로 표현하는 도구
예시: 개체-관계 모델
- 논리적 데이터 모델
- 개념적 구조를 논리적으로 모델링하여 데이터베이스의 논리적 구조로 표현하는 도구
예시: 관계 데이터 모델
- 데이터 모델의 구성
- 데이터 구조(Data Structure)
- 개념적 데이터 모델에서 개념적 구조(인간이 인지하는 요소)
- 현실 세계를 개념 세계로 추상화했을 때 어떤 요소로 이루어져 있는지 표현
- 논리적 데이터 모델에서 논리적 구조(어떤 모습&형식으로 정할지)
- 데이터를 어떤 모습으로 저장할 것인지 표현
- 특징: 자주 변하지 않고 정적임 (한번 잘 설계한 것으로 계속 사용)
- 개념적 데이터 모델에서 개념적 구조(인간이 인지하는 요소)
- 연산(Operation)
- 개념 세계나 컴퓨터 세계에서 실제로 표현된 값들을 처리하는 작업
- 특징: 값이 연산에 의해 계속 변경되므로 동적임
- 제약조건(Constraint) $\rightarrow$ 데이터 무결성 유지 목적
- 구조적 측면의 제약 사항
- 연산을 적용하는 경우 허용할 수 있는 의미적 측면의 제약 사항
- 데이터 구조(Data Structure)
개체-관계 모델
- E-R model; Entity-Relationship model
- 피터 첸(Peter Chen)이 제안한 개념적 데이터 모델
- 개체와 개체 간의 관계를 이용해 현실 세계를 개념적 구조로 표현
- 핵심 요소: 개체, 속성, 관계
- E-R diagram
- 개체-관계 모델을 이용해 현실 세계를 개념적으로 모델링한 결과물을 그림으로 표현한 것
- 개체(Entity)
- 현실 세계에서 조직을 운영하는데 꼭 필요한 사람이나 사물과 같이 구별되는 모든 것
- 저장할 가치가 있는 중요 데이터를 가지고 있는 사람이나 사물, 개념, 사건 등
- 다른 개체와 구별되는 이름을 가지고 있고, 각 개체만의 고유한 특성이나 상태, 즉 속성을 하나 이상 가지고 있음
예시: 서점에 필요한 개체는 고객 + 책
예시: 학교에 필요한 개체는 학과 + 과목
- 파일 구조의 레코드(record)와 대응됨
- E-R 다이어그램에서 사각형으로 표현하고 사각형 안에 이름을 표기
- 속성(Attribute)
- 개체나 관계가 가지고 있는 고유한 특성
- 의미 있는 데이터의 가장 작은 논리적 단위
- 파일 구조의 필드(field)와 대응됨
- E-R 다이어그램에서 타원으로 표현하고 타원 안에 이름을 표기
- 개체 타입(Entity Type)
- 개체를 고유한 이름과 속성들로 정의한 것
- 파일 구조의 레코드 타입(record type)에 대응됨
- 개체 인스턴스(Entity Instance)
- 개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체
- 개체 어커런스(entity occurrence)라고도 함
- 파일 구조의 레코드 인스턴스(record instance)에 대응됨
- 개체 집합(Entity Set)
- 특정 개체 타입에 대한 개체 인스턴스들을 모아놓은 것
- 속성의 분류
- 단일 값 속성(Single-vlaued Attribute)
- 값을 하나만 가질 수 있는 속성
예시: 고객 개체의 이름, 적립금 속성
- 다중 값 속성(Multi-valued Attribute)
- 값을 여러 개 가질 수 있는 속성
예시: 고객 개체의 연락처 속성
예시: 책 개체의 저자 속성
- E-R 다이어그램에서 이중 타원으로 표현
- 단순 속성(Simple Attribute)
- 의미를 더는 분해할 수 없는 속성
예시: 고객 개체의 적립금 속성
예시: 책 개체의 이름, ISBN, 가격 속성
- 복합 속성(Composite Attribute)
- 의미를 분해할 수 있는 속성
예시: 고객 개체의 주소 속성, 도 시 동 우편번호 등으로 세분화 가능
예시: 고객 개체의 생년월일 속성, 연월일로 의미를 세분화 가능
- 유도 속성(Derived Attribute)
- 기존의 다른 속성의 값에서 유도되어 결정되는 속성
- 값이 별도로 저장되지 않음
예시: 책 개체의 가격과 할인율 속성으로 계산되는 판매가격 속성
예시: 고객 개체의 출생년도 속성으로 계산되는 나이 속성
- E-R 다이어그램에서 점선 타원으로 표현
- 널 속성(Null Attribute)
- 널 값이 허용되는 속성
- 널(Null) 값
- 아직 결정되지 않았거나 모르는 값 또는 존재하지 않은 값
- 공백이나 0과는 의미가 다름
예시: 고객의 등급 속성이 널 값 - 등급이 아직 결정되지 않았음을 의미
예시: 병역 속성의 널 값 - 여성의 경우 해당 사항이 없음
- 키 속성(Key Attribute)
- 각 개체 인스턴스를 식별하는 데 사용되는 속성
- 모든 개체 인스턴스의 키 속성 값이 다름
- 둘 이상의 속성들로 구성되기도 함
- 고객 개체의 고객아이디가 없는 경우 $\rightarrow$ 고객명과 집전화번호를 조합
예시: 고객 개체의 고객아이디 속성
- E-R 다이어그램에서 밑줄로 표현
- 관계(Relationship)
- 개체와 개체가 맺고 있는 의미 있는 연관성
- 개체 집합들 사이의 대응 관계, 즉 매핑(mapping)을 의미
예시: 고객 개체와 책 개체 간의 구매 관계
- E-R 다이어그램에서 마름모로 표현
- 관계의 유형: 관계에 참여하는 개체 타입의 수 기준
- 이항 관계: 개체 타입 2개가 맺는 관계
- 삼항 관계: 개체 타입 3개가 맺는 관계
- 순환 관계: 개체 타입 1개가 자기 자신과 맺는 관계(재귀)
- 관계의 유형: 매핑 카디널리티 기준
- 일대일 1:1 관계
- 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 하나와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있음
- 일대일이 아니면 큰일나는것이다.
- 관계가 없을지언정 하나가 두 관계를 가지지 않는다.
예시: 남편과 아내의 혼인 관계
- 일대다 1:n 관계
- 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있지만, 개체 B의 각 개체 인스턴스는 개체 A의 개체 인스턴스 하나와 관계를 맺을 수 있음
예시: 부서와 사원 개체의 소속 관계
- 다대다 n:m 관계
- 개체 A의 각 개체 인스턴스가 개체 B의 개체 인스턴스 여러 개와 관계를 맺을 수 있고, 개체 B의 각 개체 인스턴스도 개체 A의 개체 인스턴스 여러 개와 관계를 맺을 수 있음
예시: 고객과 책의 구매 관계
- 일대일 1:1 관계
- 매핑 카디널리티(Mapping Cardinality)
- 관계를 맺는 두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺고 있는 상대 개체 집합의 인스턴스 개수
- 관계의 참여 특성
- 전체 참여(필수적 참여)
- 모든 개체 인스턴스가 관계에 반드시 참여해야 되는 것을 의미
예시: 고객 개체가 책 개체와의 구매 관계에 필수적으로 참여 - 모든 고객은 책을 반드시 구매해야함
- E-R 다이어그램에서 이중선으로 표현
- 부분 참여(선택적 참여)
- 개체 인스턴스 중 일부만 관계에 참여해도 되는 것을 의미
예시: 책 개체가 고객 개체와의 구매 관계에 선택적으로 참여 - 고객이 구매하지 않은 책이 존재할 수 있음
- 전체 참여(필수적 참여)
- 관계의 종속성
- 약한 개체(또는 종속 개체, Weak Entity)
- 다른 개체의 존재 여부에 의존적인 개체
- 강한 개체(또는 오너 개체, Strong Entity)
- 다른 개체의 존재 여부를 결정하는 개체
예시: 학교의 학생개체(강한 개체), 학부모 개체(약한 개체)
- 특징
- 강한 개체와 약한 개체는 일반적으로 일대다의 관계
- 약한 개체는 강한 개체와의 관계에 필수적으로 참여
- 약한 개체는 강한 개체의 키를 포함하여 키를 구성
- E-R 다이어그램에서 약한 개체는 이중 사각형으로 표현하고, 약한 개체가 강한 개체와 맺는 관계는 이중 마름모로 표현.
예시: 직원 개체와 부양가족 개체 사이의 부양 관계
직원 개체는 강한 개체, 부양가족 개체는 약한 개체
- 약한 개체(또는 종속 개체, Weak Entity)
- E-R 다이어그램
- 사각형: 개체를 표현
- 마름모: 관계를 표현
- 타원: 속성을 표현
- 링크(연결선): 각 요소를 연결
- 레이블: 일대일, 일대다, 다대다 관계를 표기
논리적 데이터 모델
- 단일 값 속성(Single-vlaued Attribute)
- 논리적 데이터 모델의 개념
- E-R 다이어그램으로 표현된 개념적 구조를 데이터베이스에 저장할 형태로 표현한 논리적 구조
- 데이터베이스의 논리적 구조 = 데이터베이스 스키마(Schema)
- 사용자가 생각하는 데이터베이스의 모습 또는 구조
- 관계 데이터 모델, 계층 데이터 모델, 네트워크 데이터 모델 등이 있음
- E-R 다이어그램으로 표현된 개념적 구조를 데이터베이스에 저장할 형태로 표현한 논리적 구조
- 관계 데이터 모델
- 일반적으로 많이 사용되는 논리적 데이터 모델
- 데이터베이스의 논리적 구조가 2차원 테이블 형태
- 계층 데이터 모델(Hierarchical data model)
- 데이터베이스의 논리적 구조가 트리(tree) 형태
- 루트 역할을 하는 개체가 존재하고 사이클이 존재하지 않음
- 개체 간에 상하 관계가 성립
- 부모 개체/자식 개체
- 부모와 자식 개체는 일대다(1:n) 관계만 허용됨
- 두 개체 사이에 하나의 관계만 정의할 수 있음
- 다대다(n:m) 관계를 직접 표현할 수 없음
- 개념적 구조를 모델링하기 어려워 구조가 복잡해질 수 있음
- 데이터의 삽입·삭제·수정·검색이 쉽지 않음
- 그래서 불편하기 때문에 보편적으로 쓰이지 않는다…
- 네트워크 데이터 모델(Network data model)
- 데이터베이스의 논리적 구조가 네트워크, 즉 그래프 형태임
- 개체 간에는 일대다(1:n) 관계만 허용됨
- 오너(owner) / 멤버(member)
- 두 개체 간의 관계를 여러 개 정의할 수 있어 이름으로 구별함
- 다대다(n:m) 관계를 직접 표현할 수 없음
- 구조가 복잡하고 데이터의 삽입·삭제·수정·검색이 쉽지 않음
관계 데이터 모델
관계 데이터 모델의 개념
- 관계 데이터 모델의 기본 개념
- 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델
- 하나의 개체에 관한 데이터를 하나의 릴레이션에 저장
고객아이디(CHAR(20)) | 고객이름(CHAR(20)) | 나이(INT) | 등급(CHAR(10)) | 직업(CHAR(10)) | 적립금(CHAR(10)) |
---|---|---|---|---|---|
apple | 아카리 | 13 | air | 소서러 | 1000 |
banana | 쿄코 | 14 | gold | 용사 | 500 |
carrot | 치나츠 | 13 | silver | 궁수 | 3000 |
orange | 유이 | 14 | master | 도적 | 7000 |
릴레이션 예시. 행(투플), 열(속성, 애트리뷰트), 도메인(CHAR, INT)
- 관계 데이터 모델의 기본 용어
- 릴레이션(Relation)
- 하나의 개체에 관한 데이터를 2차원 테이블의 구조로 저장한 것
- 파일 관리 시스템 관점에서 파일(file)에 대응
- 속성(Attribute)
- 릴레이션의 열, 애트리뷰트
- 파일 관리 시스템 관점에서 필드(field)에 대응
- 투플(Tuple)
- 릴레이션의 행
- 파일 관리 시스템 관점에서 레코드(record)에 대응
- 도메인(Domain)
- 하나의 속성이 가질 수 있는 모든 값의 집합
- 속성 값을 입력 및 출력할 때 적합성 판단의 기준이 됨
- 일반적으로 속성의 특성을 고려한 데이터 타입으로 정의
- 분해할 수 없는 원자 값만 속성 값으로 사용할 수 있다
- 널(Null)
- 속성 값을 아직 모르거나 해당되는 값이 없음을 표현
- 차수(Degree)
- 하나의 릴레이션에서 속성의 전체 개수
- 모든 릴레이션은 최소 1 이상의 차수를 유지해야 한다.
- 카디널리티(Cardinality)
- 하나의 릴레이션에서 투플의 전체 개수
- 투플이 없는 릴레이션이 존재할 수 있다.
- 릴레이션(Relation)
고객아이디(CHAR(20)) | 고객이름(CHAR(20)) | 나이(INT) | 등급(CHAR(10)) | 직업(CHAR(10)) | 적립금(CHAR(10)) |
---|---|---|---|---|---|
apple | 아카리 | 13 | air | 소서러 | 1000 |
banana | 쿄코 | 14 | gold | 용사 | 500 |
carrot | 치나츠 | 13 | silver | 궁수 | 3000 |
orange | 유이 | 14 | master | 도적 | 7000 |
이 경우 고객 릴레이션의 차수(속성의 개수)는 6, 카디널리티(투플의 개수)는 4
- 릴레이션의 구성
- 릴레이션 스키마(Relation Schema)
- 릴레이션의 논리적 구조
- 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의
- 릴레이션 내포(Relation Intension)라고도 함
- 자주 변하지 않는 정적인 특징
- 릴레이션 인스턴스(Relation Instance)
- 어느 한 시점에 릴레이션에 존재하는 투플들의 집합
- 릴레이션 외연(Relation Extension)이라고도 함
- 투플의 삽입·삭제·수정이 자주 발생하는 동적인 특징
- 릴레이션 스키마(Relation Schema)
고객아이디(CHAR(20)) | 고객이름(CHAR(20)) | 나이(INT) | 등급(CHAR(10)) | 직업(CHAR(10)) | 적립금(CHAR(10)) | 스키마 |
---|---|---|---|---|---|---|
apple | 아카리 | 13 | air | 소서러 | 1000 | 인스턴스 |
- 데이터베이스의 구성
- 데이터베이스 스키마(DataBase Schema)
- 데이터베이스의 전체구조
- 데이터베이스를 구성하는 릴레이션 스키마의 모음
- 데이터베이스 인스턴스(DataBase Instance)
- 데이터베이스를 구성하는 릴레이션 인스턴스의 모음
- 데이터베이스 스키마(DataBase Schema)
A릴레이션 스키마 | B릴레이션 스키마 | C릴레이션 스키마 | <- 데이터베이스 스키마 |
---|---|---|---|
A릴레이션 인스턴스 | B릴레이션 인스턴스 | C릴레이션 인스턴스 | <- 데이터베이스 인스턴스 |
- 릴레이션의 특성
- 릴레이션은 네가지 특성을 만족해야 한다.
- 투플의 유일성
- 하나의 릴레이션에는 동일한 투플이 존재할 수 없다
- 다른 투플과는 구별되는 유일한 특성이 있어야 한다. (키)
- 투플의 무순서
- 하나의 릴레이션에서 투플 사이의 순서는 무의미하다.
- 속성의 무순서
- 하나의 릴레이션에서 속성 사이의 순서는 무의미하다.
- 속성의 원자성
- 속성 값으로 원자 값만 사용할 수 있다.
고객아이디(CHAR(20)) | 고객이름(CHAR(20)) | 나이(INT) | 등급(CHAR(10)) | 직업(CHAR(10)) | 적립금(CHAR(10)) |
---|---|---|---|---|---|
apple | 아카리 | 13 | air | 궁수 | 1000 |
banana | 쿄코 | 14 | gold | 용사 | 500 |
carrot | 치나츠 | 13 | silver | 궁수 | 3000 |
orange | 유이 | 14 | master | 도적 | 7000 |
다중 값을 가지는 직업 속성을 포함하고 있어서 관계 데이터 모델의 릴레이션으로 적합하지 않음
- 키(Key)
- 릴레이션에서 투플들을 유일하게 구별하는 속성 또는 속성들의 집합
- 키의 특성
- 유일성(Uniqueness)
- 하나의 릴레이션에서 모든 투플은 서로 다른 키 값을 가져야 함
- 최소성(Minimality)
- 꼭 필요한 최소한의 속성들로만 키를 구성함
- 유일성(Uniqueness)
- 키의 종류
- 슈퍼키(Super Key)
- 유일성을 만족하는 속성 또는 속성들의 집합
예시: 고객 릴레이션의 슈퍼키: 고객아이디, (고객아이디, 고객이름), (고객이름, 주소) 등
- 고객 아이디를 포함하는 속성집합은 모두 슈퍼키가 될 수 있다.
- 후보키(Candidate Key)
- 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
예시: 고객 릴레이션의 후보키: 고객아이디, (고객이름, 주소) 등
(고객아이디, 고객이름)은 최소성을 위반한다
- 기본키(Primary Key)
- 후보키 중에서 기본적으로 사용하기 위해 반드시 선택해야 하는 키
- 속성명에 밑줄을 그어 표현
예시: 고객 릴레이션의 기본키: 고객 아이디
- 기본키 선택시 고려할 사항
- 널 값을 가질 수 있는 속성이 포함된 후보키는 부적합
예시: (고객이름, 주소) 의 경우 주소를 기입하지 않을 수 있음
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 부적합
예시: (고객이름, 주소) 의 경우 주소가 변경될 수 있음
- 단순한 후보키를 기본키로 선택하는 것이 적합함
예시: 고객아이디는 자릿수가 적은 정수나 단수 문자열 등이 선호됨
- 대체키(Alternate Key)
- 기본키로 선택되지 못한 후보키
예시: 고객 릴레이션의 대체키 (고객이름, 주소)
- 외래키(Foreign Key)
- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
- 릴레이션들 사이의 관계를 표현하기 위해 필요
- 참조하는 릴레이션: 외래키를 가진 릴레이션
- 참조되는 릴레이션: 외래키가 참조하는 기본키를 가진 릴레이션
- 다른 릴레이션의 대체키를 참조하는 것도 가능
- 외래키 속성과 그것이 참조하는 기본키 속성의 이름은 달라도 되지만 도메인은 같아야 한다.
- 하나의 릴레이션에는 외래키가 여러 개 존재할 수도 있고, 외래키를 기본키로 사용할 수도 있다.
- 같은 릴레이션의 기본키를 참조하는 외래키도 정의할 수 있다.
- 외래키 속성은 널 값과 중복값을 가질 수 있다.
- 슈퍼키(Super Key)
관계 데이터 모델의 제약
- 무결성 제약조건(Integrity Constraint)
- 데이터의 무결성을 보장하고 일관된 상태로 유지하기 위한 규칙
- 무결성
- 데이터에 결함이 없는 상태, 즉 데이터가 정확하고 유효하게 유지된 상태
- 권한이 있는 사용자의 요구에 의해 데이터가 부정확해지지 않도록 보호
- 개체 무결성 제약조건(Entity Integrity Constraint)
- 기본키를 구성하는 모든 속성은 널 값을 가질 수 없는 규칙
- 모든 릴레이션에 적용
- 참조 무결성 제약조건(Referential Integrity Constraint)
- 외래키는 참조할 수 없는 값을 가질 수 없는 규칙
- 외래키 속성이 널 값을 가진다고 해서 참조 무결성 제약 조건을 위반한 것은 아니다
관계 데이터 연산
관계 데이터 연산의 개념
- 데이터 모델 = 데이터 구조(Data Structure) + 제약조건(Constraint) + 연산(Operation)
- 관계 데이터 연산(Relational Data Operation)
- 관계 데이터 모델의 연산
- 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것
- 관계 대수와 관계 해석
- 관계 대수와 관계 해석의 역할
- 데이터 언어의 유용성을 검증하는 기준
- 관계 대수나 관계 해석으로 기술할 수 있는 모든 질의를 새로 제안된 데이터 언어로 기술할 수 있다면 $\rightarrow$ 관계적으로 완전(Relationally Complete) 하다고 판단(검증된 언어로 판단)
- 질의(query): 데이터에 대한 처리 요구
관계 대수
- 관계 대수(Relational Algebra)의 개념
- 절차 언어(Procedural Language)
- 원하는 결과를 얻기 위해 릴레이션의 처리 과정을 순서대로 기술하는 언어
- 릴레이션을 처리하는 연산자들의 모임
- 대표 연산자 8개
- 일반 집합 연산자와 순수 관계 연산자로 분류
- 폐쇄 특성(Closure Property)
- 피연산자도 릴레이션이고 연산의 결과도 릴레이션
- 절차 언어(Procedural Language)
릴레이션 | R | 릴레이션 | S | 릴레이션 | T | ||
---|---|---|---|---|---|---|---|
번호 | 이름 | 번호 | 이름 | 번호 | 소속 | ||
1 | 아카리 | 1 | 아카리 | 가 | 오락부 | ||
2 | 치나츠 | 2 | 치나츠 | 나 | 학생회 | ||
3 | 쿄코 | 5 | 사쿠라코 | ||||
4 | 유이 | 6 | 히마와리 |
- 관계 대수의 연산자
- 일반 집합 연산자(Set Operation)
- 릴레이션이 투플의 집합이라는 개념을 이용하는 연산자
- 피연산자가 2개 필요
- 2개의 릴레이션을 대상으로 연산 수행
- 합집합, 교집합, 차집합은 피연산자인 두 릴레이션이 합병 가능해야 함
- 합병 가능(Union-Compatible) 조건
- 두 릴레이션의 차수가 같아야 함
- 두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 함
- 합병 가능(Union-Compatible) 조건
- 합집합(Union): R $\cup$ S
- 합병 가능한 두 릴레이션 R과 S의 합집합
- 릴레이션 R에 속하거나 S에 속하는 모든 투플의 결과 릴레이션 구성
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같음
- 카디널리티는 릴레이션 R과 S의 카디널리티를 더한 것과 같거나 적어짐
- 교환적 특징이 있음
- R $\cup$ S = S $\cup$ R
- 결합적 특징이 있음
- (R $\cup$ S) $\cup$ T = R $\cup$ (S $\cup$ T)
- 합병 가능한 두 릴레이션 R과 S의 합집합
- 교집합(Intersection): R $\cap$ S
- 합병 가능한 두 릴레이션 R과 S의 교집합
- 릴레이션 R과 S에 공통으로 속하는 투플로 결과 릴레이션 구성
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같음
- 카디널리티는 릴레이션 R과 S의 어떤 카디널리티보다 크지 않음(같거나 작음)
- 교환적 특징이 있음
- R $\cap$ S = S $\cap$ R
- 결합적 특징이 있음
- (R $\cap$ S) $\cap$ T= R $\cap$ (S $\cap$ T)
- 합병 가능한 두 릴레이션 R과 S의 교집합
- 차집합(Difference): R - S
- 합병 가능한 두 릴레이션 R과 S의 차집합
- 릴레이션 R에는 존재하지만 릴레이션 S에는 존재하지 않는 투플로 결과 릴레이션 구성
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수와 같음
- R-S의 카디널리티는 릴레이션 R의 카디널리티와 같거나 적음
- S-R의 카디널리티는 릴레이션 S의 카디널리티와 같거나 적음
- 교환적, 결합적 특징이 없음
- 합병 가능한 두 릴레이션 R과 S의 차집합
- 카티션 프로덕트(Cartesian Product): R $\times$ S
- 두 릴레이션 R과 S의 카티션 프로덕트
- 릴레이션 R에 속한 각 투플과 릴레이션 S에 속한 각 투플을 모두 연결하여 만들어진 새로운 투플로 결과 릴레이션을 구성
- 결과 릴레이션의 특성
- 차수는 릴레이션 R과 S의 차수를 더한 것과 같음
- 카디널리티는 릴레이션 R과 S의 카디널리티를 곱한 것과 같음
- 교환적 특징이 있음
- R $\times$ S = S $\times$ R
- 결합적 특징이 있음
- (R $\times$ S) $\times$ T = R $\times$ (S $\times$ T)
- 두 릴레이션 R과 S의 카티션 프로덕트
- 순수 관계 연산자(Relational Operation)
- 릴레이션의 구조와 특성을 이용하는 연산자
- 셀렉트(Select) $\sigma$
- 릴레이션에서 조건을 만족하는 투플만 선택하여 결과 릴레이션을 구성
- 수평적 연산자: 결과 릴레이션을 연산 대상 릴레이션의 수평적 부분집합
- 하나의 릴레이션을 대상으로 연산을 수행
- 수학적 표현: $\sigma_{조건식}$(릴레이션)
- 데이터 언어적 표현: 릴레이션 where 조건식
- 조건식
- 비교식, 프레디킷(Predicate)이라고도 함
- 속성과 상수의 비교나 속성들 간의 비교로 표현
- 비료 연산자($>, \geq, <, \leq, =, \neq$)와 논리 연산자($\wedge, \vee, \neg$)를 이용해 작성
- 교환적 특징이 있음
- 릴레이션에서 조건을 만족하는 투플만 선택하여 결과 릴레이션을 구성
- 프로젝트(Project) $\pi$
- 릴레이션에서 선택한 속성의 값으로 결과 릴레이션을 구성
- 수직적 연산자: 결과 릴레이션은 연산대상 릴레이션의 수직적 부분집합
- 하나의 릴레이션을 대상으로 연산을 수행
- 수학적 표현: $\pi_{속성리스트}$(릴레이션)
- 데이터 언어적 표현: 릴레이션[속성리스트]
- 릴레이션에서 선택한 속성의 값으로 결과 릴레이션을 구성
- 조인(Join) $\bowtie$
- 릴레이션 하나로 원하는 데이터를 얻을 수 없어서 조인 속성을 이용해 두 릴레이션을 조합하여 결과 릴레이션을 구성
- 조인 속성의 값이 같은 투플만 연결하여 생성된 투플을 결과 릴레이션에 포함
- 조인 속성: 두 릴레이션이 공통으로 가지고 있는 속성
- 두 릴레이션에 대해 카티션 프로덕트 연산을 수행한 후 셀렉트 연산을 수행한 것과 같음
- 표현법: R $\bowtie$ S
- 동등 조인(Equi-Join)이라고도 함
- 릴레이션 하나로 원하는 데이터를 얻을 수 없어서 조인 속성을 이용해 두 릴레이션을 조합하여 결과 릴레이션을 구성
- 세타 조인(Theta-Join, $\theta$-Join)
- 동등 조인에 비해 더 일반화된 조인
- 주어진 조인 조건을 만족하는 두 릴레이션의 모든 투플을 연결하여 생성된 새로운 투플로 결과 릴레이션을 구성
- 결과 릴레이션의 차수는 두 릴레이션의 차수를 더한 것과 같음
- 표현법: R $\bowtie_{A{\theta}B}$ S
- $\bowtie_{A{\theta}B}$ 는 조인 조건
- A, B는 각 릴레이션의 속성이고, 같은 도메인이어야 한다.
- $\theta$ 는 비교연산자($>, \geq, <, \leq, =, \neq$)를 의미
- 동등 조인(Equi-Join)
- $\theta$ 연산자가 “=”인 세타 조인을 의미
- 표현법: R $\bowtie_{A=B}$ S
- 자연 조인(Natural Join)
- 동등 조인의 결과 릴레이션에서 조인 속성이 한 번만 나타나게 하는 연산
- 표현법: R $\bowtie_{N}$ S
- 세타조인 > 동등조인 > 자연조인
- 디비전(Division) R $\div$ S
- 표현법: R $\div$ S
- 릴레이션 2의 모든 투플과 관련이 있는 릴레이션 1의 투플로 결과 릴레이션을 구성
- 단, 릴레이션 1이 릴레이션 2의 모든 속성을 포함하고 있어야 연산이 가능함.
- 도메인이 같아야 한다는 의미
- 단, 릴레이션 1이 릴레이션 2의 모든 속성을 포함하고 있어야 연산이 가능함.
- 일반 집합 연산자(Set Operation)
합집합 | R $\cup$ S | 교집합 | R $\cap$ S | 차집합 | R - S | ||
---|---|---|---|---|---|---|---|
번호 | 이름 | 번호 | 이름 | 번호 | 이름 | ||
1 | 아카리 | 1 | 아카리 | 3 | 쿄코 | ||
2 | 치나츠 | 2 | 치나츠 | 4 | 유이 | ||
3 | 쿄코 | ||||||
4 | 유이 | ||||||
5 | 사쿠라코 | ||||||
6 | 히마와리 |
카티션 | R $\times$ T | ||
---|---|---|---|
R.번호 | R.이름 | T.번호 | T.소속 |
1 | 아카리 | 가 | 오락부 |
1 | 아카리 | 나 | 학생회 |
2 | 치나츠 | 가 | 오락부 |
2 | 치나츠 | 나 | 학생회 |
3 | 쿄코 | 가 | 오락부 |
3 | 쿄코 | 나 | 학생회 |
4 | 유이 | 가 | 오락부 |
4 | 유이 | 나 | 학생회 |
- 관계 대수 질의 표현 예
- 등급이 gold인 고객의 이름과 나이를 검색하시오
- $\pi_{고객이름,나이}(\sigma_{등급=’gold’}(고객))$
- 고객이름이 아카리인 고객의 등급과, 아카리 고객이 주문한 주문제품 수량을 검색하시오
- $\pi_{등급,주문제품,수량}(\sigma_{고객이름=’아카리’}(고객 \bowtie 주문))$
- 주문수량이 10개 미만인 주문 내역을 제외하고 검색하시오
- $주문-(\sigma_{수량<10}(주문))$
- 등급이 gold인 고객의 이름과 나이를 검색하시오
데이터베이스 언어 SQL
SQL의 소개
- SQL(Structured Query Language)
- 의미
- 관계 데이터베이스를 위한 표준 질의어로 많이 사용되는 언어
- 비절차적 데이터 언어 - 사용자가 처리를 원하는 데이터가 무엇인지만 제시하고 처리절차는 언급할 필요가 없다.
- 발전 역사
- SEQUEL(Structured English QUEry Language)에서 유래
- 연구용 관계 데이터베이스 관리 시스템인 SYSTEM R을 위한 언어
- 미국 표준 연구소인 ANSI와 국제 표준화 기구인 ISO에서 표준화 작업을 진행
- 계속 수정 및 보완되고 있음
- SEQUEL(Structured English QUEry Language)에서 유래
- 사용 방식
- 대화식 SQL: 데이터베이스 관리 시스템에 직접 접근해 질의를 작성하고 실행
- 삽입 SQL: 프로그래밍 언어로 작성한 응용 프로그램에 삽입
- 의미
- SQL의 분류
- 데이터 정의어(DDL)
- 테이블을 생성하고 변경·삭제하는 기능을 제공
- 데이터 조작어(DML)
- 테이블에 새 데이터를 삽입하거나, 테이블에 저장된 데이터를 수정·삭제·검색하는 기능을 제공
- 데이터 제어어(DCL)
- 보안을 위해 데이터에 대한 접근 및 사용 권한을 사용자별로 부여하거나 취소하는 기능을 제공. 데이터베이스 관리자가 주로 사용.
- 데이터 정의어(DDL)
SQL을 이용한 데이터 정의
- SQL의 데이터 정의 기능
- 테이블 생성, 테이블 구조의 변경, 테이블 삭제
- 테이블 생성: CREATE TABLE 문
- []은 생략 가능
- SQL 문은 세미콜론(;)으로 문장의 끝을 표시
- SQL 문은 대소문자를 구분하지 않음
- 속성의 정의
- 테이블을 구성하는 각 속성의 데이터 타입을 선택한 후에 널 값 허용 여부와 기본 값 필요 여부를 결정
- NOT NULL
- 속성이 널 값을 허용하지 않음을 의미하는 키워드
예시: 고객아이디 VARCHAR(20) NOT NULL
- DEFAULT
- 속성의 기본 값을 지정하는 키워드
예시: 적립금 INT DEFAULT 0
예시: 담당자 VARCHAR(10) DEFAULT '아야노'
- 참고사항
- 오라클은 VARCHAR보다 개선된 VARCHAR2를 더 많이 사용한다
- 오라클을 NUMERIC과 DECIMAL 대신 NUMBER 데이터 타입을 지원하며 정수도 NUMVER 타입으로 많이 표현한다
- 오라클은 DATETIME 타입을 지원하지 않고 DATE 타입으로 날짜와 시간을 함께 표현할 수 있다
- 키의 정의
- PRIMARY KEY
- 기본키를 지정하는 키워드. 기본키가 없어도 테이블을 정의할 수 있다.
- 모든 테이블에서 기본키는 반드시 하나만 지정할 수 있다.
예시: PRIMARY KEY(고객아이디), PRIMARY KEY(주문고객, 주문제품)
- UNIQUE
- 대체키를 지정하는 키워드
- 대체키로 지정된 속성의 값은 유일성을 가지며 기본키와 달리 널 값이 허용됨
예시: UNIQUE(고객이름)
- FOREIGN KEY
- 외래키를 지정하는 키워드
- 외래키가 어떤 테이블의 무슨 속성을 참조하는지, REFERENCES 키워드 다음에 제시
- 참조 무결성 제약조건 유지를 위해 참조되는 테이블에서 투플 삭제시 처리 방법을 지정하는 옵션
- ON DELETE NO ACTION: 투플을 삭제하지 못하게 함
- ON DELETE CASCADE: 관련 투플을 함께 삭제함
- ON DELETE SET NULL: 관련 투플의 외래키 값을 NULL로 변경함
- ON DELETE SET DEFAULT: 관련 투플의 외래키 값을 미리 지정한 기본 값으로 변경함
예시: FOREIGN KEY(소속부서) REFERENCES 부서(부서번호)
예시: FOREIGN KEY(소속부서) REFERENCES 부서(부서번호)
예시: ON DELETE CASCADE ON UPDATE CASCADE
- PRIMARY KEY
- 데이터 무결성 제약조건의 정의
- CHECK
- 테이블에 정확하고 유효한 데이터를 유지하기 위해 특정 속성에 대한 제약조건을 지정
예시: CHECK(재고량 >= 0 AND 재고량 <= 10000)
(모든 제품의 재고량은 항상 0개 이상, 10000개 이하로 유지되어야 한다는 데이터 무결성 제약조건
- CONSTRAINT 키워드와 함께 고유의 이름을 부여할 수도 있음
예시: CONSTRAINT CHK_CPY CHECK(제조업체 = '나나모리제과')
모든 제품의 제조업체로 한빛제과만 허용한다는 데이터 무결성 제약조건에 CHK_CPY라는 고유 이름을 부여함. 다른 테 이블에 같은 아름을 사용할 수 없음
- CHECK
CREATE TABLE 테이블_이름(
속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값]
[PRIMARY KEY (속성_리스트)]
[UNIQUE (속성_리스트)]
[FOREIGN KEY (속성_리스트) REFERENCES 테이블_이름(속성_리스트)]
[ON DELETE 옵션] [ON UPDATE 옵션]
[CONSTRAINT 이름] [CHECK(조건)]
)
데이터 타입 | 의미 |
---|---|
INT 또는 INTEGER | 정수 |
SMALLINT | INT보다 작은 정수 |
CHAT(n) 또는 CHARACTER(n) | 길이가 n인 고정 길이의 문자열 |
VARCHAR(n) 또는 CHARACTER VARYING | 최대 길이가 n인 가변 길이의 문자열 |
NUMERIC(p, s) 또는 DECIMAL(p, s) | 고정 소수점 실수 p는 소수점을 제외한 전체 숫자의 길이 s는 소수점 이하의 숫자의 길이 |
FLOAT(n) | 길이가 n인 부동 소수점 실수 |
REAL | 부동 소수점 실수 |
DATE | 연, 월, 일로 표현되는 날짜 |
TIME | 시, 분, 초로 표현되는 시간 |
DATETIME | 날짜와 시간 |
속성의 데이터 타입
- 테이블 변경: ALTER TABLE 문
- 새로운 속성 추가
- 기존 속성 삭제
- 만약, 삭제할 속성과 관련된 제약조건이나 참조하는 다른 속성이 존재한다면?
- 속성 삭제가 수행되지 않음
- 관련된 제약조건이나 참조하는 다른 속성을 먼저 삭제해야 함
- 만약, 삭제할 속성과 관련된 제약조건이나 참조하는 다른 속성이 존재한다면?
- 새로운 제약 조건의 추가
- 기존 제약 조건의 삭제
속성추가
ALTER TABLE 테이블_이름
ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값];
속성 삭제
ALTER TABLE 테이블_이름 DROP COLUMN 속성_이름;
ALTER TABLE 테이블_이름 ADD CONSTRAINT 제약조건_이름 제약조건_내용;
ALTER TABLE 테이블_이름 DROP CONSTRAINT 제약조건_이름;
- 테이블 삭제: DROP TABLE 문
- 만약, 삭제할 테이블을 참조하는 테이블이 있다면?
- 테이블 삭제가 수행되지 않음
- 관련된 외래키 제약조건을 먼저 삭제해야 함
DROP TABLE 테이블_이름;
- 만약, 삭제할 테이블을 참조하는 테이블이 있다면?
SQL을 이용한 데이터 조작
- SQL의 데이터 조작 기능
- 데이터 검색(SELECT), 새로운 데이터 삽입(INSERT), 데이터 수정(UPDATE), 데이터 삭제(DELETE)
- 데이터 검색: SELECT 문
- 기본 검색
- SELECT 키워드와 함께 검색하고 싶은 속성의 이름을 나열
- FROM 키워드와 함께 검색하고 싶은 속성이 있는 테이블의 이름을 나열
- 검색 결과는 테이블 형태로 반환됨
- ALL
- 결과 테이블이 투플의 중복을 허용하도록 지정, 생략 가능
- DISTINCT
- 결과 테이블이 투플의 중복을 허용하지 않도록 지정
- 기본 검색
- AS 키워드를 이용해서 결과 테이블에서 속성의 이름을 바꾸어 출력 가능
- 새로운 이름에 공백이 포함되면 큰 따옴표나 작은 따옴표로 묶어주어야 함
- 오라클에서는 큰 따옴표, MS SQL 서버에서는 작은 따옴표 사용
- AS 키워드는 생략 가능
- 산술식을 이용한 검색
- SELECT 키워드와 함께 산술식 제시
- 산술식: 속성의 이름과 + - * \/ 등의 산술 연산자와 상수로 구성
- 결과 테이블에서만 계산된 결과 값이 출력됨
- 속성의 값이 실제로 변경되는 것은 아님
- SELECT 키워드와 함께 산술식 제시
- 조건 검색
- 조건을 만족하는 데이터만 검색
- WHERE 키워드와 함께 비교 연산자와 논리 연산자를 이용한 검색 조건 제시
- 숫자 뿐 아니라 문자와 날짜 값을 비교하는 것도 가능
- 조건에서 문자나 날짜 값은 작은 따옴표로 묶어서 표현
- LIKE를 이용한 검색
- LIKE 키워드를 이용해 부분적으로 일치하는 데이터 검색
- 문자열을 이용하는 조건에만 LIKE 키워드 사용 가능
- NULL을 이용한 검색
- IS NULL 키워드를 이용해 특정 속성의 값이 널 값인지를 비료
- IS NOT NULL 키워드를 이용해 특정 속성의 값이 널 값이 아닌지를 비교
- 검색 조건에서 널 값은 다른 값과 비교하면 결과가 모두 거짓이 됨
- 정렬 검색
- ORDER BY 키워드를 이용해 결과 테이블 내용을 사용자가 원하는 순서로 출력
- ORDER BY 키워드와 함께 정렬 기준이 되는 속성과 정렬 방식을 지정
- 오름차순(기본): ASC / 내림차순: DESC
- 널 값은 오름차순에서는 맨 마지막에 출력되고, 내림차순에서는 맨 먼저 출력됨
- 여러 기준에 따라 정렬하려면 정렬 기준이 되는 속성들을 차례
- 집계 함수를 이용한 검색
- 특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용
- 집계 함수(aggregate function)
- 열 함수(column function) 라고도 함
- 개수, 합계, 평균, 최댓값, 최솟값의 계산 기능 제공
- 집계 함수(aggregate function)
- 집계 함수 사용 시 주의 사항
- 집계 함수는 널인 속성 값은 제외하고 계산함
- 집계 함수는 WHERE 절에서는 사용할 수 없고, SELECT 절이나 HAVING 절에서만 사용 가능
- 특정 속성 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용
- 기본 검색
SELECT [ALL|DISTINCT] 속성_리스트
FROM 테이블_리스트;
고객 테이블에서 고객아이디, 고객이름, 등급속성을 검색해보자
SELECT 고객아이디, 고객이름, 등급
FROM 고객;
고객 테이블에 존재하는 모든 속성을 검색해보자
SELECT 고객아이디, 고객이름, 나이, 등급, 직업, 적립금
FROM 고객;
모든 속성을 검색할 때 이름을 전부 쓸 필요 없이 *를 써도 됨
SELECT *
FROM 고객;
제품 테이블에서 제조업체를 검색해보자. 그러면 제조업체가 중복되어 결과가 뜸.
SELECT 제조업체
FROM 제품;
제품 테이블에서 제조업체를 검색하되, ALL 키워드를 사용해보자
SELECT ALL 제조업체
FROM 제품;
제품 테이블에서 제조업체 속성을 중복 없이 검색해보자
SELECT DIXTINCT 제조업체
FROM 제품;
제품 테이블에서 제품명과 단가를 검색하되, 단가를 가격이라는 새 이름으로 출력하자
SELECT 제품명, 단가 AS 가격
FROM 제품;
제품 테이블에서 제품명과 단가 속성을 검색하되, 단가에 500원을 더해 '조정 단가'라는 새 이름으로 출력해보자.
SELECT 제품명, 단가 + 500 AS "조정 단가"
FROM 제품;
제품 테이블에서 나나모리제과가 제조한 제품의 제품명, 재고량, 단가를 검색해보자
SELECT 제품명, 재고량, 단가
FROM 제품
WHERE 제조업체 = '나나모리제과';
주문 테이블에서 apple 고객이 15개 이상 주문한 주문제품, 수량, 주문일자를 검색해보자
SELECT 주문제품, 수량, 주문일자
FROM 주문
WHERE 주문고객 = 'apple' AND 수량 >= 15;
제품 테이블에서 단가가 2,000원 이상이면서 3,000원 이하인 제품의 제품명, 단가, 제조업체를 검색해보자
SELECT 제품명, 단가, 제조업체
FROM 제품
WHERE 단가 >= 2000 AND 단가 <= 3000;
고객 테이블에서 성이 김씨인 고객의 고객이름, 나이, 등급, 적립금을 검색해보자
SELECT 고객이름, 나이, 등급, 적립금
FROM 고객
WHERE 고객이름 LIKE '김%';
고객 테이블에서 고객아이디가 5자인 고객의 고객아이디, 고객이름, 등급을 검색해보자
SELECT 고객아이디, 고객이름, 등급
FROM 고객
WHERE 고객아이디 LIKE '_ _ _ _ _';
고객 테이블에서 나이가 아직 입력되지 않은 고객의 고객이름을 검색해보자
SELECT 고객이름
FROM 고객
WHERE 나이 IS NULL;
고객 테이블에서 나이가 이미 입력된 고객의 고객이름을 검색해보자
SELECT 고객이름
FROM 고객
WHERE 나이 IS NOT NULL;
고객 테이블에서 고객이름, 등급, 나이를 검색하되, 나이를 기준으로 내림차순 정렬해보자
SELECT 고객이름, 등급, 나이
FROM 고객
ORDER BY 나이 DESC;
주문 테이블에서 수량이 10개 이상인 주문의 주문고객, 주문제품, 수량, 주문일자를 검색해보자. 단 주문제품을 기준으로 오름차순 정렬하고, 동일 제품은 수량을 기준으로 내림차순 정렬해보자.
SELECT 주문고객, 주문제품, 수량, 주문일자
FROM 주문
WHERE 수량 >= 10
ORDER BY 주문제품 ASC, 수량 DESC;
제품 테이블에서 모든 제품의 단가 평균을 검색해보자
SELECT AVG(단가)
FROM 제품;
나나모리제과에서 제조한 제품의 재고량 합계를 제품 테이블에서 검색해보자
SELECT SUM(재고량) AS "재고량 합계"
FROM 제품
WHERE 제조업체 = '나나모리제과';
고객아이디 속성을 이용해 계산하는 경우
SELECT COUNT(고객아이디) AS 고객수
FROM 고객;
나이 속성을 이용해 계산하는 경우
SELECT COUNT(나이) AS 고객수
FROM 고객;
*를 이용해 계산하는 경우
SELECT COUNT(*) AS 고객수
FROM 고객;
제품 테이블에서 제조업체의 수를 검색해보자
SELECT COUNT(DISTINCT 제조업체) AS "제조업체 수"
FROM 제품;
비교 연산자 | 의미 | 논리 연산자 | 의미 |
---|---|---|---|
= | 같다 | AND | 모든 조건을 만족해야 검색한다 |
< > | 다르다 | OR | 여러 조건 중 한 가지만 만족해도 검색한다 |
< | 작다 | NOT | 조건을 만족하지 않는 것만 검색한다 |
> | 크다 | LIKE 키워드 기호 | 설명 |
$\leq$, <= | 작거나 같다 | % | 0개 이상의 문자(문자의 내용과 개수는 상관 없음) |
$\geq$, >= | 크거나 같다 | - | 1개의 문자(문자의 내용은 상관 없음) |
LIKE 키워드 | 사용 예 | 예시 | 설명 |
LIKE ‘데이터%’ | 데이터로 시작하는 문자열, 길이 상관 없음 | ||
LIKE ‘%데이터’ | 데이터로 끝나는 문자열, 길이 상관 없음 | ||
LIKE ‘%데이터%’ | 데이터가 포함된 문자열 | ||
LIKE ‘데이터_ _’ | 데이터로 시작하는 5자 길이의 문자열 | ||
LIKE ‘_ _한’ | 세 번째 글자가 ‘한’인 문자열 |
SELECT 문 | ||
---|---|---|
함수 | 의미 | 사용 가능한 속성의 타입 |
COUNT | 속성 값의 개수 | 모든 데이터 |
MAX | 속성 값의 최대값 | 모든 데이터 |
MIN | 속성 값의 최솟값 | 모든 데이터 |
SUM | 속성 값의 합계 | 숫자 데이터 |
AVG | 속성 값의 평균 | 숫자 데이터 |