본문 바로가기
Programming/PHP+MySQL(Database)

관계형 데이터 모델_DBMS (2)

by 어깨 :) 2023. 4. 3.
728x90

1. 릴레이션

1) 릴레이션(relation) 

릴레이션은 데이터베이스에서 테이블(Table)이라고도 불리는 데이터 구조입니다. 릴레이션은 행과 열의 모양을 가지며, 각 열은 특정 유형의 데이터를 포함하고, 각 행은 해당 열에 대한 데이터의 값입니다. 릴레이션은 데이터베이스 관리 시스템(DBMS)의 중요한 요소이며, SQL(Structured Query Language)과 같은 쿼리 언어를 사용하여 데이터를 조작하고 검색하는 데 사용됩니다. 예를 들어, 고객 정보를 저장하는 릴레이션의 경우, 각 행은 고객의 정보를 나타내고, 각 열은 고객의 이름, 주소, 전화번호 등과 같은 특정 유형의 정보를 나타냅니다.

 

 

 


▪ 릴레이션의 구성요소 : 기본 구조는 릴레이션(relation)
▪ 릴레이션은 튜플(tuple : 혹은 행)과 속성(attribute : 혹은 열)들로 구성되는 2차원. 테이블(table)
▪ 튜플은 ER 설계도서의 엔티티(entity) 혹은 관계 (relationship)를 표현
▪ 튜플과 속성은 각각 파일에서는 레코드와 필드와 표현
▪ 릴레이션은 2차원 구조라는 면에서 외형적으로 파일 구조와 유사

 

 

2) 릴레이션 특성
✓  튜플들의 유일성 : 릴레이션은 튜플들의 집합이다. 집합에는 중복되는 동일한 값들은 허용하지 않음.
✓  튜플들의 순서 : 한 릴레이션에서 튜플들의 순서는 의미가 없다. 그러나 파일에서는 레코드들이 디스크에 물리적으로 저장되므로 그 순서의 의미가 있음
✓  속성의 원자값 : 각 속성이 갖는 값은 “논리적으로 더 이상 쪼개질 수 없는 단 하나의 값인 원자값(atomic value)”으로만 표현된다. 이러한 릴레이션을 제1 정규형이라고 함
✓  속성의 널값 : 속성 값에는 널(null)이라는 값은 허용. 널 값은 그 속성에 대한 값이 현재 알려지지 않은 값이거나, 그 속성에 적용될 수 없는 값을 나타낼 때 사용되는 특수한 값

 

 

 

2. Key의 종류

  • 슈퍼 키(Super Key): 유일성을 만족하는 키. 예를 들면, {학번 + 이름}, {주민등록번호 + 학번}
  • 복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키.
  • 후보 키(Candidate key): 유일성 최소성을 만족하는 키. 기본키가 될 수 있는 후보이기 때문에 후보키라고 불린다. 예를 들면, 주민등록번호, 학번 등
  • 기본 키(Primary key): 후보 키에서 선택된 키. NULL값이 들어갈 수 없으며, 기본키로 선택된 속성(Attribute)은 동일한 값이 들어갈 수가 없다.
  • 대체 키(Surrogate key): 후보 키 중에 기본 키로 선택되지 않은 키.
  • 외래 키(Foreign Key): 어떤 테이블(Relation) 간의 기본 키(Primary key)를 참조하는 속성이다. 테이블(Relation)들 간의 관계를 나타내기 위해서 사용된다.

 

슈퍼키(Super Key)

- 7조라는 팀에 팀원은 4명이 있다. 이 4명을 구분할 수 있는 것은 절대 겹치지 않는 학번 일수도 있고, 주민번호일 수도 있다.

- 이름과 나이를 묶어서 하나의 속성으로 만드는 것도 가능하다. 이름과 나이를 합쳐서 7 조안에서 중복만 되지 않으면 가능하기 때문이다. 이름과 나이를 합쳐서 4명을 구분할 수 있으면 슈퍼키가 될 수 있다.

- 학번과 주민번호를 묶어서 슈퍼키로 만들 수도 있고, 학번과 주민번호과 이름을 합쳐서 슈퍼키로도 만들 수 있고, 학번과 주민번호과 이름과 나이를 합쳐서 슈퍼키를 만들 수도 있다. 어떤 속성끼리 묶던 중복값이 안 나오고 서로 구별만 할 수 있으면 된다.


 

후보키(Candidate Key)

- 위에서 말했듯이 4명을 구분하는 슈퍼 키들이 모여 있는데, 슈퍼 키들 중에서 속성은 최소한의 개수로 4명을 구분할 수 있어야 후보키가 될 수 있다.

- 학번 슈퍼키와 주민번호 슈퍼키는 속성들이 각 1개씩 이루어져 있다. 하지만 이름+나이 슈퍼키는 이름과 나이를 묶어서 2개의 속성으로 되어 있다. 이름+나이 슈퍼키는 2개 이므로 각 1개의 속성인 주민번호와 학번 슈퍼키가 최소성을 만족한다고 할 수 있다.

- 따라서 이름+나이 슈퍼키는 개수가 다른 것보다 많기 때문에 최소성을 만족하지 못해서 후보키가 될 수 없다.


 

기본키(Primary Key)

- 후보 키들 하는 속성이다.

- 테이블에서 기본키는 오직 1개만 지정할 수 있다.

- 기본키는 NULL 값을 절대 가질 수 없고, 중복된 값을 가질 수 없다.


 

대체키(Alternate Key)

- 후보키가 두 개 이상일 경우 그중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라 한다.

- 후보키로 학번과 주민번호가 뽑혔고, 둘 중에서 기본키 학번이 되었다. 학번이 기본키가 되고 남은 후보키인 주민번호 대체키가 될 수 있다. 학번 기본키가 없어지게 되면 주민번호는 없어진 기본키를 대체할 수 있게 된다.

 


 

외래키(Foreign Key)

- 참조될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야 한다.

- 이때, 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야 한다.

- 외래키는 참조되는 테이블의 기본키와 동일한 키 속성을 가진다.

- 참조되는 부모테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야 된다.

- 부모 테이블 먼저 삭제될 수 없다. 왜냐하면 부모테이블을 참조하는데 부모테이블이 삭제되면 자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 생긴다. 따라서 외래키 관계에서 부모테이블을 삭제하려면 자식테이블 먼저 삭제한 후 부모테이블을 삭제해야 한다.

 

- 아래 사진을 보자. 부모 테이블은 학생 테이블이고, 자식 테이블은 수강 테이블이다.

- 학생테이블은 학번이 기본키이자 참조되는 참조키이다.

- 수강테이블은 학번이 참조하는 키이자 외래키이다.

 

 

https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%ED%82%A4KEY-%EC%A2%85%EB%A5%98-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC

 

[DB] 📚 데이터베이스 키(KEY) 종류 🕵️ 정리

Key의 종류 슈퍼 키(Super Key): 유일성을 만족하는 키. 예를 들면, {학번 + 이름}, {주민등록번호 + 학번} 복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키. 후보 키(Candidate key): 유일성과 최소

inpa.tistory.com

 

3. 무결성 제약 조건

 

1) 무결성 제약조건 : 데이터의 무결성을 보장하고 일관된 상태로 유지하기 위한 규칙
▪   개체 무결성 제약조건
✓  기본키 제약(primary key constraint)이라고도 함
✓  기본키는 NULL 값을 가져서는 안 되며 릴레이션 내에 오직 하나의 값만 존재해야 한다는 조건


▪    참조 무결성 제약조건
✓  외래키 제약(foreign key constraint)이라고도 함
✓  자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 함
✓  자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받음

 

 

 

 

 

2) 무결성 제약조건 검증
▪  개체의 무결성, 참조 무결성은 모든 릴레이션들이 반드시 준수해야 하는 기본 규칙은 
로 이를 위반할 때에는 데이터베이스의 상태가 일관성이 없는 상태가 됨


삽입 연산
• 새로운 튜플을 삽입했을 시 이 튜플의 키 값이 이미 이 릴레이션의 다른 튜플에 존재한다면, 이는 키 무결성을 위반
• 참조하는 릴레이션에 참조되는 릴레이션의 주키에 없는 외래키 값을 갖는 튜플을 삽입하면 참조 무결성을 위반


삭제 연산

• 참조되는 릴레이션에서 튜플을 삭제하는 것으로 인해 참조 무결성을 위반


갱신 연산
• 참조되는 릴레이션에서 튜플에서 주키 값을 경신하는 것으로 인해 참조 무결성을 위반

 

4. 관계형 대수

 

-정의 : 질의(query)를 만족하는 튜플들을 검색하기 위해 필요한 연산자들의 모임
-질의 : 사용자가 릴레이션에서 원하는 정보를 얻기 위해 작성하는 명령문

-연산자들 : 관계형 질의어인 SQL을 구현하기 위해 필요. 집합 연산자와 특수 연산자로 구분

 

 

 

 

1) 집합연산자

▪  피연산자로서 두 개의 릴레이션들을 필요로 함.
▪  여기서 프로덕트를 제외하고는 집합 연산을 하기 위한 조건은 각 릴레이션이 갖는 속성들의 
개수가 같아야 하며 각 속성별로 데이터 타입이 같아야 함.

 


✓  합집합 (Union : ∪) : R ∪ S는 릴레이션 R과 S에 튜플들을 합하여 결과 릴레이션으로 생성. 단, 여기서 두 릴레이션에 공통으로 있는 튜플들은 하나만 나오게 됨.
✓  교집합 (Intersection : ∩) : R ∩ S는 릴레이션 R과 S에 있는 튜플들 중 공통되는 튜플들만을 선택하여 결과 릴레이션에 생성.
✓  차집합 (Difference : -) : R - S는 릴레이션 R에는 있지만, S에는 없는 튜플들을 결과 릴레이션에 생성

✓ 카디션 프로덕트(Cartesian Product : x) : R x S는 릴레이션 R과 S에 있는 각 튜플의 모든 조합에 대해서, 이들을 하나의 튜플로 연결(concatenate)시킨 모든 튜플들을 결과 릴레이션에 생성.

✓ 여기서 R과 S에 각각 m과 n 개의 속성들이 있다면, 결과 릴레이션에는 모두 m + n 개의 속성들이 생성
✓ R과 S에 각각 p와 q 개의 튜플들이 있다면, 결과 릴레이션에는 모두 p * q 개의 튜플들이 생성

 

 

2) 특수연산자

▪  셀렉션 (Selection : σ) : 셀렉션은 한 릴레이션에서 주어진 조건식을 만족하는 튜플들만을 선택하여 결과 릴레이션에 생성
✓  셀렉션은 기호 σ 에 선택할 조건식을 표현
✓  조건식은 <속성>, <비교연산자>, <값> 또는 <속성>으로 표현되며 비교 연산자는  {=, <, >, ≠ ≤, ≥} 
✓  조건식들을 여러 개 명시할 수 있는데 각 조건식을 AND, OR 그리고 NOT과 같은 논리 연산자로 결합시켜 표현할 수 있음
✓  셀렉션의 결과는 원래 릴레이션에 있던 속성들의 개수는 변하지 않고 단지 원하는 튜플들만을 선택하므로 수평적 검색이라 할 수 있음

 

▪   프로젝션 (Projection : π)
✓  프로젝션은 한 릴레이션에서 원하는 속성들만 해당하는 튜플들만을 결과 릴레이션에 생성
✓  어떤 릴레이션의 일부 속성들에만 관심이 있다면 이 속성들만 골라내는 연산
✓  프로젝션 연산자 π 에 명시하는 <속성 리스트>는 원래 릴레이션의 속성들의 부분 집합으로서 
결과 릴레이션의 원래 테이블의 속성들의 일부가 되기 때문에 수직적 검색이라 할 수 있음.
✓  만약 속성 리스트가 키가 아닌 속성들만 포함한다면 중복 튜플들이 결과에 나타날 수 있음.
-> 이 경우 프로젝션은 중복 튜플들을 모두 제거

 

  ▪   조인 (Join)
✓  조인은 릴레이션 R과 S에 있는 각 튜플의 모든 조합에 대해서, 조건식을  만족하는 것들 만을 
하나의 튜플로 연결(concatenate)시킨 튜플들을 결과 릴레이션에 생성
✓  즉, R과 S에 각각 m과 n 개의 속성들이 있다면, 결과 릴레이션에는 모두 m + n 개의 속성들이 생성
✓  카디션 프로덕트와의 차이점은 R과 S에 각각 p와 q 개의 튜플들이 있다면, 결과 릴레이션에는 조건식을 만족하는 튜플들만 생성
✓  조인은 R  ⋈  S로 표기되며, 조건식은 R과 S에 공통으로 있는 속성(조인 속성 : join attribute)들 사이에 비교 연산자 {=, <, >, ≠ ≤, ≥} 중 하나로 표현 가장 많이 사용하는 조인 연산은 동등(=) 비교만을 적용할 때이며, 이를 동등 조인(equi-join)이라 함

 

▪    디비전 (Division : ÷)
✓  릴레이션의 속성 값의 집합으로 연산을 수행
✓  형식 : R ÷ S

 

3)  관계형 대수의 완전 집합

▪  셀렉션(σ), 프로젝션(π), 합집합(∪), 차집합(-), 카티션 프로덕트(x)의 관계형 대수 연산자를 완전 집합(complete set)
 즉, 다른 모든 연산자는 이 집합의 연산자들의 조합으로부터 표현할 수 있음
✓  5 개의 연산자면 모든 관계형 대수 연산을 구현할 수 있음을 의미
▪   관계형 대수는 이외에도 디비전(division), 집계 함수, 그룹화 등의 여러 가지 추가 연산자들 이 제공되고 있음.

 

728x90