학습목표 학습목표 본 장은 데이터베이스를 구성하는 개체, 속성, 관계 등을 다룬다. 특별히 데이터베이스의 구조를 테이블에 기초하여 조직하는 관계 데이터 모델은 개체(entity)와 관계(relationship) 들이 테이블의 집합 형태로 되어 간단하고 이해하기 쉬우며 사용자는 개체들 간의 관계의 유형이나 관계의 방향성 등을 알 필요 없이 데이터에 접근이 용이하다. 본 장은 관계 데이터 모델에 대해 자세히 소개하고 관계 데이터 모델을 다루기 위한 관계 대수의 여러 가지 연산 등을 다루고 있다.
1. 데이터 모델 데이터 모델 개체-관계 데이터 모델(entity- relationship data model) 실존 개체 개체를 구성하는 속성 개체 들간의 관계 관계의 유형 연산 무결성 원칙 관계 데이터 모델(relational data model) 데이터베이스의 구조를 테이블에 기초 개체(entity), 관계(relationship) 모두를 테이블의 집합 형태로 표현 간단, 이해하기 쉽다. 관계의 유형, 관계의 방향성에 무관하게 데이터에 접근이 용이하다. 망 데이터 모델 표현방식에 따라 계층 데이터 모델 관계 데이터 모델
< ‘고객’ 개체 타입(type) > < ‘고객’ 개체 인스턴스(instance) 의 집합> 데이터 모델 1.1 개체(entity) 실존하거나 의미 있는 정보 단위를 말함. 하나의 개체 단위 별로 데이터베이스 내에서 관리됨. 서로 관련 있는 속성(attribute) 들로 이루어짐. 개체 타입(type) 과 개체 인스턴스(instance) 로 구성됨. 아이디 패스워드 성명 나이 생일 주소 < ‘고객’ 개체 타입(type) > 속성들 Wow W12345 이창수 37 1967-12-01 부산 남구 대연3동 115 Joyful20 J4545 김학수 44 1960-04-02 부산 영도구 봉래동 890 Tiger78 T8712 최민 24 1980-05-05 서울 강남구 보길동 rulru r6781 이정상 27 1977-09-15 전남 나주시 연희동 345 < ‘고객’ 개체 인스턴스(instance) 의 집합>
데이터 모델 1.2 관계 (relationship) 개체와 개체 사이의 상관 관계 통합 저장된 데이터베이스의 특성 상 관계 또한 하나의 중요한 정보로 취급 아이디 성명 전화 주소 Wow 이창수 123-4567 부산 남구 대연3동 115 Joyful20 김학수 123-5555 부산 영도구 봉래동 890 Tiger78 최민 888-8888 서울 강남구 보길동 rulru 이정상 431-4321 전남 나주시 연희동 345 <고객-> 개체> <주문-> 관계> 상품코드 품명 가격 P1 바지 55000 P2 점퍼 58000 P3 니트 53000 P4 셔츠 30000 아이디 상품코드 Tiger78 P1 Wow P2 <상품-> 개체>
부모 자녀1 1 : N 자녀2 자녀n 남편 아내 1 : 1 과목1 N : M 과목2 과목n 학생1 학생2 학생n 데이터 모델 1.3 관계의 유형 관계의 유형 종류 일 대 일 (1 : 1) ex) 남편과 아내 일 대 다 (1 : N) ex) 부모와 자녀들 다 대 다 (N : M) ex) 학생과 교과목 부모 자녀1 1 : N 자녀2 자녀n 남편 아내 1 : 1 과목1 N : M 과목2 과목n 학생1 학생2 학생n E-R Diagram 개체, 속성, 관계 등의 정보를 표현하는 시각적 도구
2. 관계 데이터 모델과 릴레이션 릴레이션 2.1 릴레이션의 개념 릴레이션은 관계 데이터 모델에서 데이터 집합을 의미함. 릴레이션은 테이블의 형태로 표현됨. 테이블은 행(row) 과 열(column) 로 구성됨. <용어 비교> 릴레이션은 릴레이션 스키마(구조)와 릴레이션 인스턴스(data set)로 구성 도메인은 어트리뷰트가 가질 수 있는 값을 말함. 구분 의미 용어 파일 시스템 행 레코드 열 필드 릴레이션 투플 어트리뷰트
<<릴레이션에서 사용되는 용어>>
릴레이션 2.2 릴레이션의 특성 릴레이션은 테이블과는 다른 특징이 있으며 집합의 개념으로 해석 릴레이션에 포함된 모든 투플은 유일하게 식별 가능하다. 같은 릴레이션 내의 투플들의 순서는 의미가 없다. 같은 릴레이션 내의 어트리뷰트의 순서는 의미가 없다. 어트리뷰트의 값은 원자 값이다.
릴레이션 2.3 릴레이션의 제약조건 도메인 제약 조건 : 릴레이션의 어트리뷰트는 지정된 도메인에 의한 값만을 가진다. 개체 무결성 : 기본 키에 속하는 어트리뷰트는 널(NULL) 값을 가질 수 없다. 참조 무결성 : 릴레이션의 외래키는 참조 할 수 없는 값을 가질 수 없다. <용어> 기본키 : 릴레이션에서 투플들을 유일하게 식별할 수 있는 어트리뷰트 들 중에 선택된 하나. 외래키 : 개체와 개체 사이를 연결해 주는 어트리뷰트
<<기본 키, 외래 키, 후보 키>> 릴레이션 <<기본 키, 외래 키, 후보 키>> <고객-> 개체> 아이디 성명 전화 주소 Wow 이창수 123- **** 부산 남구 대연3동 115 Joyful20 이학수 458- **** 부산 영도구 봉래동 890 Tiger78 최민 888- **** 서울 강남구 보길동 rulru 이정상 431- **** 전남 나주시 연희동 345 <상품-> 개체> <주문-> 관계> 상품코드 품명 가격 P1 바지 55000 P2 점퍼 58000 P3 니트 P4 셔츠 30000 아이디 상품코드 Tiger78 P1 Wow P2 기본키 외래키 외래키
<<제약조건 위배 사례>> 릴레이션 <<제약조건 위배 사례>> <도메인 제약 조건 위배> 예)전화는 char(15) 인데 가질 수 없는 값(문자 15자 이상)이 입력됨. 아이디 성명 전화 주소 Wow 이창수 (82)051-323- **** -23 부산 남구 대연3동 115 Joyful20 이학수 458- **** 부산 영도구 봉래동 890 Tiger78 최민 888- **** 서울 강남구 보길동 rulru 이정상 431- **** 전남 나주시 연희동 345 <개체 무결성 제약조건 위배> 예) 상품코드가 기본 키인데 null 임. <참조 무결성 제약조건 위배> 예) 아이디 chili77 는 고객 릴레이션에 없는 아이디이다. 상품코드 품명 가격 P1 바지 55000 점퍼 58000 P3 니트 P4 셔츠 30000 아이디 상품코드 Tiger78 P1 chili77 P2 고객 릴레이션을 참조하는 외래키 상품 릴레이션의 기본키
3. 데이터 조작을 위한 관계 대수의 연산 ⋈ 관계 대수의 연산 ⋈+ 릴레이션을 조작하기 위한 연산은 관계대수와 관계해석이 있다. 관계 대수 :상용 DBMS의 언어인 SQL의 이론적인 기초 <연산자 들의 종류와 기호> 종류 연산자 기호 비고 순수 관계 연산 실렉트(select) σ 기본연산 프로젝트(project) ∏ 조인(join) ⋈ 복합연산 디비전(division) ÷ 집합 합집합(union) ∪ 교집합(intersect) ∩ 차집합(difference) − 카티션프로덕트(cartesian product) x 확장 세미조인(semi join) ⋉ 외부조인(outer join) ⋈+ 외부합집합(outer union) ∪+
관계 대수의 연산 3.1 셀렉트(SELECT) 하나의 릴레이션에 주어진 조건에 만족하는 투플들만 걸러내는 연산 결과 릴레이션은 입력 릴레이션과 어트리뷰트 수는 같으며 투플의 수는 같거나 적게 나옴. 실습예제 : ‘고객’ 릴레이션에서 등급이 ‘silver’ 인 고객을 찾아라. 명령 : σ 등급 = ‘silver’(고객) 아이디 성명 전화 주소 등급 Wow W12345 이창수 부산 남구 대연3동 115 Silver Joyful20 J4545 김학수 부산 영도구 봉래동 890 Gold Tiger78 T8712 최민 서울 강남구 보길동 rulru r6781 이정상 전남 나주시 연희동 345 silver 아이디 성명 전화 주소 등급 Wow W12345 이창수 부산 남구 대연3동 115 Silver rulru r6781 이정상 전남 나주시 연희동 345 silver
관계 대수의 연산 3.2 프로젝트(PROJECT) 하나의 릴레이션에 원하는 어트리뷰트들만 걸러내는 연산 결과 릴레이션은 입력 릴레이션과 어트리뷰트 수는 적고 투플의 수는 같다. 실습예제 : ‘상품’ 릴레이션에서 종류와 가격을 나타내어라. 명령 : ∏ 종류, 가격(상품) 상품코드 종류 색상 가격 업체코드 P1 바지 베이지 30000 COM01 P2 불루 P3 점퍼 그린 85000 COM02 P4 종류 가격 바지 30000 점퍼 85000 (릴레이션의 특성 상 동일한 투플은 제거된다. )
⋈ ⋈N ⋈+ ⋉ 관계 대수의 연산 3.3 조인(JOIN) 두 개 이상의 릴레이션에서 원하는 투플들만 걸러내는 연산 두 릴레이션을 곱한 후 실렉트 한 것과 같다. 조인의 종류 : 세타조인, 외부조인, 자연조인, 동등조인, 세미조인 조인 종류 연산자 의미 동등조인 ⋈ ‘= ‘연산자와 같은 의미, 조인에 사용된 모든 어트리뷰트를 결과에 포함 자연조인 ⋈N 조인에 사용된 어트리뷰트 중 중복된 것은 결과에서 제거 외부조인 ⋈+ 조인에 사용되지 않은 어트리뷰트를 NULL 값을 사용해 결과에 포함. 기준 릴레이션이 왼(오른)쪽이면 LEFT(RIGHT) OUTER JOIN이라고 함. 세미조인 ⋉ 조인에 사용된 어트리뷰트만 결과에 포함 세타조인 =, >, >=, <, <=, <> 조인 조건에 관계연산자 사용한 것으로 특별히 ‘=‘ 를 사용하면 동등조인이라 함
관계 대수의 연산 3.3 조인(JOIN) - 동등조인 실습예제 : ‘상품’ 릴레이션과 ‘납품업체’ 릴레이션을 동등 조인 하라. 명령 : 상품 ⋈ 업체코드 = 업체코드 업체 상품코드 품명 가격 업체코드 P1 바지 30000 COM01 P2 점퍼 85000 P3 니트 55000 COM02 P4 셔츠 20000 업체코드 업체명 전화 COM01 ㈜ 협성실업 123-1222 COM02 에드원상사 567-5543 COM03 ㈜삼성물산 345-5454 상품코드 품명 가격 업체코드 업체명 전화 P1 바지 30000 COM01 ㈜ 협성실업 123-1222 P2 점퍼 85000 P3 니트 55000 COM02 에드원상사 567-5543 P4 셔츠 20000 <동등 조인 결과>
관계 대수의 연산 3.3 조인(JOIN)-자연조인 실습예제 : ‘상품’ 릴레이션과 ‘납품업체’ 릴레이션을 자연 조인 하라. 상품코드 품명 가격 업체코드 P1 바지 30000 COM01 P2 점퍼 85000 P3 니트 55000 COM02 P4 셔츠 20000 업체코드 업체명 전화 COM01 ㈜ 협성실업 123-1222 COM02 에드원상사 567-5543 COM03 ㈜삼성물산 345-5454 상품코드 품명 가격 업체코드 업체명 전화 P1 바지 30000 COM01 ㈜ 협성실업 123-1222 P2 점퍼 85000 P3 니트 55000 COM02 에드원상사 567-5543 P4 셔츠 20000 <자연 조인 결과>
관계 대수의 연산 3.3 조인(JOIN)-세미조인 실습예제 : ‘상품’ 릴레이션과 ‘납품업체’ 릴레이션을 세미 조인 하라. 명령 : 상품 ⋉ 업체코드 = 업체코드 업체 상품코드 품명 가격 업체코드 P1 바지 30000 COM01 P2 점퍼 85000 P3 니트 55000 COM02 P4 셔츠 20000 COM05 업체코드 업체명 전화 COM01 ㈜ 협성실업 123-1222 COM02 에드원상사 567-5543 COM03 ㈜삼성물산 345-5454 1 단계 : ∏ 업체코드(업체) 상품코드 품명 가격 업체코드 P1 바지 30000 COM01 P2 점퍼 85000 P3 니트 55000 COM02 업체코드 COM01 COM02 COM03 < 2 단계 : 세미 조인 결과>
관계 대수의 연산 3.3 조인(JOIN)-외부조인 실습예제 : ‘상품’ 릴레이션과 ‘납품업체’ 릴레이션을 외부 조인 하라. 명령 : 상품 ⋈+ 업체코드 = 업체코드 업체 상품코드 품명 가격 업체코드 P1 바지 30000 COM01 P2 점퍼 85000 P3 니트 55000 COM02 P4 셔츠 20000 COM05 업체코드 업체명 전화 COM01 ㈜ 협성실업 123-1222 COM02 에드원상사 567-5543 COM03 ㈜삼성물산 345-5454 상품코드 품명 가격 업체코드 업체명 전화 P1 바지 30000 COM01 ㈜ 협성실업 123-1222 P2 점퍼 85000 P3 니트 55000 COM02 에드원상사 567-5543 P4 셔츠 20000 COM05 √ COM03 ㈜삼성물산 345-5454 <외부 조인 결과>
관계 대수의 연산 3.4 디비전(DIVISION) 공통된 어트리뷰트를 가지는 두 릴레이션을 이용해 나누는 것 공통된 어트리뷰트를 가지는 두 릴레이션을 이용해 나누는 것 실습예제 : ‘주문’ 릴레이션을 ‘상품그룹’ 릴레이션으로 디비전 하라. 명령 : 주문 ÷ 상품 그룹 아이디 상품코드 수량 Tiger78 P1 1 Wow P2 P4 2 rulru 상품코드 P1 아이디 수량 Tiger78 1 rulru <디비전 결과>
관계 대수의 연산 3.5 합집합(UNION) 어트리뷰트의 개수와 대응되는 도메인이 같은 두 릴레이션을 합하는 것 어트리뷰트의 개수와 대응되는 도메인이 같은 두 릴레이션을 합하는 것 실습예제 : 아이디가 ‘WOW’인 고객이 주문한 상품코드와 상품명이 ‘니트’인 상품코드를 합집합(UNION)을 구하라. 명령 : ∏ 상품코드(σ 아이디= 'wow' (주문)) ∪∏ 상품코드(σ 품명= '니트' (상품)) 아이디 상품코드 수량 Tiger78 P1 1 Wow P2 P4 2 rulru 상품코드 품명 가격 업체코드 P1 바지 30000 COM01 P2 점퍼 85000 P3 니트 55000 COM02 P4 셔츠 20000 상품코드 P2 상품코드 P3 상품코드 P2 P3 <합(UNION) 결과>
<외부 합(OUTER UNION) 결과> 관계 대수의 연산 3.5 합집합-외부합집합(OUTER UNION) 어트리뷰트의 개수가 다르지만 동일한 어트리뷰트를 가지고 있는 두 릴레이션을 합하는 것 실습예제 : ‘주문’ 릴레이션과 ‘상품’ 릴레이션의 외부합집합(OUTER UNION) 을 구하라. 명령 : 주문 ∪+ 상품 아이디 상품코드 수량 Tiger78 P1 1 Wow P2 P4 2 rulru 아이디 상품코드 수량 품명 가격 Tiger78 P1 1 √ Wow P2 P4 2 rulru 바지 30000 점퍼 85000 P3 니트 55000 셔츠 20000 상품코드 품명 가격 P1 바지 30000 P2 점퍼 85000 P3 니트 55000 P4 셔츠 20000 <외부 합(OUTER UNION) 결과>
<교집합(INTERSECT) 결과> 관계 대수의 연산 3.6 교집합 (INTERSECT) 두 릴레이션의 공통 어트리뷰트를 이용하여 공통 투플만 구하는 것 실습예제 : ‘주문’ 릴레이션과 ‘상품’ 릴레이션의 교집합(INTERSECT)을 구하라. 명령 : 주문 ∩ 상품 아이디 상품코드 수량 Tiger78 P1 1 Wow P2 P4 2 rulru 상품코드 P1 P2 P4 상품코드 품명 가격 P1 바지 30000 P2 점퍼 85000 P3 니트 55000 P4 셔츠 20000 <교집합(INTERSECT) 결과>
<차집합(DIFFERENCE) 결과> 관계 대수의 연산 3.7 차집합 (DIFFERENCE) 릴레이션 A에는 속하지만 릴레이션 B에는 속하지 않는 투플을 구하는 것 실습예제 : ‘상품’ 릴레이션과 ‘주문’ 릴레이션을 이용해 주문이 하나도 없는 상품을 구하라. 명령 : 상품 - 주문 상품코드 품명 가격 P1 바지 30000 P2 점퍼 85000 P3 니트 55000 P4 셔츠 20000 아이디 상품코드 수량 Tiger78 P1 1 Wow P2 P4 2 rulru 상품코드 품명 가격 P3 니트 55000 <차집합(DIFFERENCE) 결과>
< 카티션 프로덕트 (CARTESIAN PRODUCT) 결과> 관계 대수의 연산 3.8 카티션 프로덕트 (CARTESIAN PRODUCT) 두 릴레이션의 곱을 구하는 것 결과가 두 릴레이션의 모든 어트리뷰트, 모든 투플의 집합으로 나오므로 매우 신중해야 한다. 실습예제 : ‘상품’ 릴레이션과 ‘고객’ 릴레이션의 곱을 구하라. 명령 : 상품 x 주문 상품코드 품명 P1 바지 P2 점퍼 상품코드 품명 아이디 성명 P1 바지 Tiger78 이창수 Wow 손정우 P2 점퍼 <상품 릴레이션> 아이디 성명 Tiger78 이창수 Wow 손정우 < 카티션 프로덕트 (CARTESIAN PRODUCT) 결과> <고객 릴레이션>
답: 속성(attribute), 다 대 다 답:테이블, 스키마, 인스턴스 단원 요약 단원요약 1 ★ 데이터 모델의 구성요소는 개체(entity), 개체를 구성하는 , 그리고 각 개체들 간의 관계(relationship) 이다. 또, 관계는 개체끼리 대응하는 형태에 따라 일대일, 일대다, 다대다의 형태로 구분된다. ‘학생’ 개체와 ‘교과목’ 개체 사이에는 의 관계라고 할 수 있다. ? ? 답: 속성(attribute), 다 대 다 단원요약 2 ★ 관계 데이터 모델의 릴레이션은 데이터 집합을 기초로 한 것인데 릴레이션은 행과 열을 가지는 형태로 표현된다. 릴레이션은 릴레이션의 구조를 나타내는 와 릴레이션의 데이터 값을 나타내는 로 구성된다. ? ? ? 답:테이블, 스키마, 인스턴스
답: 개체 무결성 답: 관계 대수, SQL 단원 요약 단원요약 3 ★ 관계 데이터 모델에서는 데이터의 무결성을 위해 도메인 제약 조건, 기본키에 의한 , 외래키에 의한 참조무결성이라는 제약 조건을 지원한다. ? 답: 개체 무결성 단원요약 4 ★ 관계 데이터 모델의 조작을 위해서 사용하는 연산으로 관계해석과 가 있다. 셀렉트, 프로젝트, 조인, 디비전, 카티션 프로덕트, union 등 다양한 연산이 존재한다. 이 연산들은 상용 DBMS의 언어인 의 이론적인 기초가 된다. ? ? 답: 관계 대수, SQL