데이터베이스 개요
|
2. 데이터의 관계형 모델
2.1 데이터 모델 개요
- 데이터를 설명하는 표기법
- 구성 요소:
- 데이터 구조: 개념 모델 (물리 모델보다)
- 데이터 작업: 수행 가능한 제한된 작업 집합
- 쿼리: 정보를 조회하는 작업
- 수정: 데이터베이스를 변경하는 작업. 효율적이고 쉬워야 함
- 데이터 제약 조건: 데이터에 대한 제한
2.1.2 중요한 데이터 모델들
대부분의 DBMS관계형
NoSQL | 키-값 |
NoSQL | 그래프 |
NoSQL | 문서(반구조적) |
NoSQL | 컬럼-패밀리 |
기계 학습 | 배열 / 행렬 |
Obsolete | 계층형 |
구식 | 네트워크 |
2.1.3 관계형 모델 개요
- 구조: 테이블. 주 메모리에 저장되지 않고 디스크에 저장됨
- 작업: 관계 대수
- 제약 조건
2.1.4 반구조적 모델 개요 (더 유연하지만 쿼리는 느림)
- 구조: 트리 또는 그래프. 계층적으로 중첩된 태그 요소들
- 작업: 경로를 따르는 것과 관련됨
- 제약 조건: 태그와 관련된 값의 유형과 관련됨
- 키-값 모델 (더 유연하지만 쿼리가 불가능)
- 구조: 쌍. 키는 문자열이나 정수. 값은 모든 데이터 덩어리일 수 있음
- 작업: get(key), put(key, value)
- 제약 조건
2.2 관계형 모델의 기본 개념
- 속성(열, 필드): 데이터를 포함하는 이차원 테이블
- 스키마: 릴레이션 이름과 속성의 집합
- 데이터베이스 스키마: 데이터베이스의 릴레이션에 대한 스키마 집합
- 튜플(행, 레코드): 각 속성에 하나의 구성 요소를 가짐
- 도메인: 특정한 원시 유형(정수, 문자열). 배열, 집합, 리스트처럼 구성 요소로 나눌 수 있는 유형은 될 수 없음
- 릴레이션의 동등한 표현
- 릴레이션은 튜플의 집합임 (리스트가 아님)
- 스키마는 속성의 집합임 (리스트가 아님)
- → 릴레이션의 튜플이나 속성의 순서는 중요하지 않음
- 질문: 이 릴레이션을 나타내는 방법은 몇 가지가 있을까? 4개의 속성과 3개의 튜플 = 4! * 3! = 144
- 릴레이션 인스턴스
- 릴레이션은 정적이지 않음
- 튜플은 삽입, 삭제 또는 업데이트될 수 있음
- 스키마도 변경될 수 있지만 이는 비용이 많이 듦
- 인스턴스: 릴레이션의 튜플 집합
- 릴레이션은 정적이지 않음
- 릴레이션의 키: 레코드를 고유하게 식별하는 속성의 집합
- 기본 키: 중복 값 없음, 하나만 존재
- 대체 키: 둘 이상의 속성 조합
- 외래 키: 다른 릴레이션의 레코드의 키 값인 속성
2.3 SQL에서 관계 스키마 정의하기
- 선언적. 1) DDL 데이터 정의 언어를 사용한 데이터베이스 스키마 선언 2) DML 데이터 조작 언어를 사용한 데이터베이스 쿼리 및 수정 지원
- SQL의 관계
- 테이블: 수정 및 쿼리 가능
- 뷰: 계산에 의해 정의된 관계. 저장되지 않고 필요할 때 구조화됨
- 임시 테이블: 쿼리 및 수정을 위해 SQL 프로세서에 의해 생성됨. 사용 후 버려지며 저장되지 않음
- 데이터 유형
- CHAR(n), VARCHAR(n)
- BIT(n), BIT VARYING(n)
- BOOLEAN (TRUE, FALSE, UNKNOWN)
- INT, SHORTINT
- FLOAT, REAL, DOUBLE PRECISION, DECIMAL(n, d), DOUBLE(p, s): p는 소수점 양쪽의 모든 자리 수의 최대값, s는 소수점 이하 자리 수의 최대값, 선택적
- DATE, TIME
- 간단한 테이블 선언
CREATE TABLE Movies(
title CHAR(100),
year INT,
length INT,
genre CHAR(10),
studioName CHAR(30),
producer INT
);
CREATE TABLE MovieStar(
name CHAR(30),
address VARCHAR(30),
gender CHAR(1),
birthdate DATE
);
5. 관계 스키마 수정
DROP TABLE R;
ALTER TABLE MovieStar ADD phone CHAR(16);
# 기존 튜플은 phone 속성에 대해 NULL 값을 가짐
ALTER TABLE MovieStar DROP birthdate;
6. 기본 값
CREATE TABLE MovieStar(
name CHAR(30),
address VARCHAR(30),
gender CHAR(1) DEFAULT '?',
birthdate DATE DEFAULT DATE '0000-00-00'
);
ALTER TABLE MovieStar ADD phone CHAR(16) DEFAULT 'unlisted';
7. 선언
- PRIMARY KEY 기본키
# 하나의 속성을 키로 선언
CREATE TABLE MovieStar(
name CHAR(30) PRIMARY KEY,
address VARCHAR(30),
gender CHAR(1),
birthdate DATE
);
# 별도의 선언으로 여러 속성을 키로 지정
CREATE TABLE MovieStar(
name CHAR(30),
address VARCHAR(30),
gender CHAR(1),
birthdate DATE,
PRIMARY KEY(name, address)
);
2. FOREIGN KEY 외래키
CREATE TABLE Studio(
name CHAR(30) PRIMARY KEY,
address VARCHAR(255),
presidentCert INT,
FOREIGN KEY (presidentCert) REFERENCES MovieExec(cert)
);
3. INDEX 인덱스
SELECT *
FROM Movies
WHERE year=2008;
CREATE INDEX YearIndex ON Movies(year);
DROP INDEX YearIndex;
4. Tuple 튜플
#------------------------------------
# 삽입
INSERT INTO Movies(title, year, length, genre, studio)
VALUES ('Ponyo', 2008, 103, 'anime', 'Ghibli');
#------------------------------------
# 삭제
DELETE FROM Movies
WHERE year >= 2008
AND length > 100
AND genre = 'anime';
#------------------------------------
# 업데이트
UPDATE Movies
SET length = 110, Producer = 123
WHERE title = 'Ponyo'
AND year = 2008 ;
#------------------------------------
'KAIST > Database' 카테고리의 다른 글
[3] Design Theory : Functional Dependency, Rules about functional dependencies (0) | 2024.04.03 |
---|