DBMS: Relational Model(관계 모델)
INTRO 🙌
저번 시간에는 ER Diagram 설계 방법에 대해 알아보았다.
이번 시간에는 관계 모델에 대하여 알아보자.
Relational Model(관계 모델) 🧿
- 가장 널리 사용되는 모델
- Object-oriented 모델(i.e., UniSQL, Oracle, etc.)의 경쟁 모델
Relational Database(관계 데이터베이스): A set of relations
Relation
Relation은 Row 집합 혹은 Tuple 집합이다.
Instance와 Schema로 구성된다.
Instance
Row(= Cardinality, Tuple)과 Column(= Degree, Attribute)으로 이루어진 테이블이다.
[Instance(Cardinality=3, Degree=5)]
Schema
Relation의 이름, 각 Column 타입(= Domain) 및 이름을 정의한다.
Domain
- Each attribute has a type
- Must be atomic type
- i.e., Integer, String, Real, …
non-atomic
Relational Query Languages(관계 질의 언어)
- 관계 모델의 가장 큰 장점은 데이터에 관한 간단하면서 강력한 Query를 제공한다는 것이다.
- Query는 직관적으로 작성 가능하다.
- DBMS는 효율적인 평가를 담당한다.
- 최적화를 통해 광범위한 재배치 이후, 질의 응답(결과)은 여전히 변하지 않는다.
SQL Query Language(SQL 질의 언어)
- Devloped by IBM in the 1970s
- 많은 기업에서 사용하기 때문에 표준이 필요하고, 현재 표준은 SQL-99이다.
Querying Relation(릴레이션 질의)
[18살 학생들 검색]
상기 테이블에서 18살 학생들의 이름 및 로그인 정보만을 검색하기를 원할 경우:
SELECT S.name, S.login
Querying Multiple Relation(여러개의 릴레이션 질의)
SELECT S.name, E.cid
FROM Students S, Enrolled E
WHERE S.sid=E.sid AND E.grade="A"
[Output]
Creating Relation(릴레이션 생성)
CREATE TABLE Students(
sid: CHAR(20),
name: CHAR(20),
login: CHAR(10),
age: INTEGER,
gpa: REAL)
)
Destroying Relation(릴레이션 삭제)
DROP TABLE Students
Students Relation 삭제시, Schema 정보 및 Tuple이 모두 삭제된다.
Altering Relation(릴레이션 수정)
ALTER TABLE Students
ADD COLUMN firstYear:integer
새로운 field인 firstYear에 대하여 현재 인스턴스 안의 튜플들은 NULL값을 갖는다.
Adding Tuple(튜플 추가)
INSERT INTO Students(sid, name, login, age, gpa)
VALUES(53688, 'Smith', 'smith@ee', 18, 3.2)
Deleting Tuple(튜플 삭제)
DELETE
FROM Students S
WHERE S.name= 'Smith'
무결성 제약조건(Integrity Constraints) 🤞
- 데이터베이스 안의 어떠한 Instance에 대해서도 참이어야 하는 조건
- 무결성 제약조건은 Schema가 정의될때 명시됨
- Relation의 적합한 Instance는 모든 무결성 제약조건을 만족한다
- Instance만 봐서는 무결성 제약조건이 참인지 거짓인지 추론 불가능
- Key(키)와 Foreign Key(외래 키)의 무결성 제약조건이 가장 일반적임
Key(키)
Tuple을 유일하게 식별할 수 있는 Attribute 집합이다.
Composite Key
- 복합 키(Composite Key)는 두 개 이상의 컬럼을 Key로 지정하는 것을 말한다.
- PK(Primary Key, 기본키)는 한 테이블에 한 개만 존재할 수 있다.
- 하지만 꼭 한 테이블에 한 컬럼만 기본키로 지정할 수 있는 것은 아니다.
Candidate Key(후보 키)
- 후보키는 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들을 말한다.
- 하나의 릴레이션내에서는 중복된 튜플들이 있을 수 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재한다.
- 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 한다.
유일성: 하나의 키값으로 하나의 튜플만을 유일하게 식별 가능
최소성: 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성만으로 구성
Primary Key(기본 키)
- 기본키는 후보키 중에서 선택한 주키(Main Key)이다.
- 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
- Null값을 가질 수 없다.
- 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없다.
Alternate Key(대체 키, 보조 키)
- 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들을 말한다.
Super Key(슈퍼 키)
- 1개의 Candidate Key와 추가적인 다른 Attribute들로 이루어진 Attribute의 집합
- 슈퍼키는 릴레이션을 구성하는 모든 튜플에 대해 유일성을 만족시키지만, 최소성은 만족시키지 못한다.
직관
아래 예시를 통하여 슈퍼 키에 대해 직관적으로 이해해보자.
학번 + 주민번호를 사용하여 슈퍼키를 만들면 다른 튜플(= 행)들과 구분할 수 있는 유일성은 만족한다.
하지만, 학번이나 주민번호 둘 중 어느 하나만 가지고도 다른 튜플들을 구분할 수 있으므로 최소성은 만족시키지 못한다.
다르게 말하면, 최소성을 만족하기 위해 필요한 최소한의 속성은 하나일 수도 있다; 학번 혹은 주민번호.
Foreign Key(외래 키)
한 부모 테이블의 필드(attribute)로부터 다른 자식 테이블의 행(row)을 식별할 수 있는 키
두 개의 테이블(부모 ~ 자식)을 연결해주는 연결 다리 역할이다.
자식 테이블: 외래키가 포함된 테이블, 참조하는 테이블
부모 테이블: 외래키 값을 제공하는 테이블, 참조되는 테이블
규칙
CREATE TABLE `parent` (
`id1` INT(11) NOT NULL,
`id2` INT(11) NOT NULL,
`id3` INT(11) NOT NULL,
`uk1` INT(11) NOT NULL,
`uk2` INT(11) NOT NULL,
`uk3` INT(11) NOT NULL,
PRIMARY KEY (`id1`, `id2`, `id3`),
UNIQUE KEY (`uk1`, `uk2`, `uk3`)
);
- 외래키 값은 NULL이거나 부모 테이블의 기본키, 고유키 값과 동일 (참조 무결성 제약조건)
- 부모 테이블의 기본키, 고유키를 외래키로 지정 가능
- 부모 테이블의 기본키가 여러개의 컬럼으로 이루어져 있다면 부모가 가진 기본키, 고유키 컬럼을 원하는 개수만큼 묶어서 외래키로 지정 가능
- 외래키로 지정할 두 테이블의 필드는 같은 데이터 타입이다
직관
아래 예시를 통해, 외래 키에 대해 직관적으로 이해해보자.
[사용자 정보 테이블 (부모 테이블)]
[사용자 주문 내역 테이블 (자식 테이블)]
우리는 서로 다른 두 테이블, 사용자 정보 테이블과 주문 테이블을 하나로 묶어서 관리하고 싶다.
누가 어떤 주문을 만들었는지 모르기 때문에, 사용자 주문 테이블에 user_id 속성을 추가해서 부모 테이블과 연결 고리를 만들어주자.
이때, 자식 테이블에 생성된 user_id가 바로 외래 키이다.
Referential Integrity(참조 무결성)
Relation은 참조할 수 없는 Foreign Key 값을 가질 수 없다.
Default
행의 delete(삭제)나 update(변경)을 거부
CASCADE
삭제하거나 변경하는 행을 참조하는 다른 Relation의 내용도 삭제하거나 변경한다.
SET NULL / SET DEFAULT
삭제하거나 변경하는 행을 참조하는 다른 Relation의 내용 또한 NULL로 설정 / 미리 설정해놓은 DEFAULT 값으로 설정
View(뷰)
- Relation의 일종(한 개 이상의 기본 테이블이나 다른 뷰를 이용)으로, Tuple의 집합보다는 Definition(정의)를 저장
- 뷰는 가상 테이블이라서 디스크에 저장 공간이 할당되지 않는다
- 기존에 생성된 테이블 또는 다른 뷰에서 접근할 수 있는 전체 데이터 중에서 일부만 접근(= 필요한 정보)할 수 있도록 제한하기 위한 기법
Creating Views
CREATE VIEW YoungActiveStudents (name, grade)
AS SELECT S.name, E.grade
FROM Students S, Enrolled E
WHERE S.sid = E.sid and S.age<21
Deropping Views
DROP VIEW 명령어를 사용하여 삭제할 수 있음
DROP VIEW YoungActiveStudents
Summary of Relational Model(관계 모델)
- Relational Model(관계 모델)은 데이터 표를 표현한다
- Relational Model(관계 모델)은 단순하고 직관적이며 현재 가장 널리 사용됨
- Integrity Constaint(무결성 제약조건)
- 어플리케이션 의미론을 기반으로 하여 DBA에 의해 명시될 수 있음
- DBMS는 Integrity Constaint(무결성 제약조건)을 위반하는지 확인함
- Primary Key(기본 키), Foreign Key(외래키) 제약조건이 가장 중요함
- 강력하고 자연스러운 Query Language(질의 언어)가 존재함
다음 시간에는 ER(Entity-Relationship)을 Relational Model로 변환하는 규칙에 대해 알아보자.
Reference
Database Management Systems by Raghu Ramakrishnan and Johannes Gehrke
댓글남기기