[SQL] 관계 데이터베이스
관계 데이터 모델
- Relation Database란
- 관계형 데이터베이스는 현재 가장 많이 사용하고 있는 데이터베이스의 종류 중 하나이다.
- 관계형 데이터베이스는 테이블로 이루어져 있고, 이 테이블은 키(key)와 값(value)의 관계로 나타낸다.
- 데이터의 종속성을 관계로 표현하는 것이 관계형 데이터베이스의 특징이다.
* 용어정리
- 열(column) : 필드라고 부르면, 항목의 속성(명칭)을 나타낸다. 필드마다 char, integer 처럼 데이터 유형을 정할 수 있다.
- 행(row) : 레코드(record)라고 부르며, 각 데이터 항목을 저장한다.
- 스키마(schema) : 필드는 데이터 유형 뿐만 아니라 제약사항도 지정할 수 있는데 , 이러한 제약사항을 스키마라고 부른다. 필드는 중복 값을 해당 행에 저장할 수 없다거나, 반드시 값을 가져야한다는 등의 조건을 걸 수 있다.
SQL은 관계형 데이터베이스에 있는 데이터를 분석하는 언어이고, 관계형 데이터베이스는 테이블이 관계를 맺과 모여있는 집합체를 의미한다.
릴레이션 개념
- 릴레이션 : 두 개 이상의 집합이 주어질 때, 각 집합을 구성하는 원소들의 순서쌍에 대한 집합
--> 테이블을 릴레이션이라고 한다.
Table-oriented | Record-oriented | set - oriented |
table | file | relation |
row | record | tuple |
column | field | attribute |
- 속성(attribute) = 필드(field) = 열 (column)
- 튜플(tuple) = 레코드(record) = 행(row)
- 도메인 : 각 필드에 입력 가능한 값들의 범휘, 즉 필드가 가질 수 있는 모든 값들의 집합이다.
- 널(NULL) : 특정 필드에 대한 값을 알지 못하거나 아직 정해지지 않아, 입력하지 못한 경우를 의미
릴레이션 특성
- 한 애트리뷰트 내의 값들은 모두 같은 유형이다.
- 애트리뷰트들의 순서들은 중요하지 않다.
- 투플들의 순서는 중요하지 않다.
- 동일한 투플이 두개 이상 존재하지 않는다.
=> 키 가 존재한다.
- 한 투플의 각 애트리뷰트는 원자 값을 가진다. (= 더이상 쪼갤 수 없음을 의미한다.)
데이터베이스 키
- 릴레이션의 키 : 각 투플을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임
- 수퍼 키(Super Key)
- 한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
- 투플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있다.
- 후보 키(Candidate key)
- 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임
- 유인성(uniqueness), 최소성(minimality) 2가지 특성을 모두 만족해야한다.
- 모든 릴레이션에는 최소 한 개 이사으이 후보키가 있다.
- 후보 키도 두 개 이상의 복합 애트리뷰트로 이뤄질 수 있다.
- 기본 키(Primary key)
- 속성이 항상 고유한 값을 가져야한다.
- 기본 키로 지정된 애트리뷰트들은 모든 튜플에 대해 어느 때고 널 값을 가질 수 없다.
- Unique + Minmal + Not null
- 대체 키(Alternate key)
- 기본 키가 아닌 후보 키
- 하나의 후보 키가 기본 키로 선택되면 다른 후보 키들은 대체키가 된다.
- 외래 키(Foreign key)
- 어떤 다른 릴레이션의 기본 키를 참조하는 애트리뷰트를 의미
- 관계 데이터베이스에서 릴레이션들 간의 관계를 나타내기 위해서 사용된다.
- 외래 키 애트리뷰트는 참조되는 릴레이션의 기본 키와 동일한 도메인을 가져야한다.
- 자신이 속한 릴레이션의 기본 키의 구성요소가 되거나 되지 않을 수 있다.
SQL 데이터 조작문
데이터 조작어는 데이터를 삽입, 조회, 수정, 삭제할 때 사용하는 명령어이다.
- 데이터 삽입
Can insert a single tuple using
EX) INSERT INTO Students(sid, login, age, gpa)
VALUES (53688, 'Smith', 'smith@ee', 18, 3.2)
- 데이터 삭제
- Can delete all tuples satisfying some condition
EX) DELETE
FROM Students S
WHERE S.name = 'Smith'
- 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하게 해제하려면
EX) TRUNCATE TABLE Students
- 데이터 갱신
- Can update all tuples satisfying some condition
- 실습
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
create database Practice; /*데이터베이스 생성*/
use Practice; /*데이터베이스 사용*/
/*테이블 생성(CREATE)*/
create table 회원테이블(
회원번호 INT PRIMARY KEY,
이름 varchar(20),
가입일자 DATE NOT NULL,
수신동의 BIT
);
/*데이터 삽입*/
insert into 회원테이블 values (1001, '홍길동', '2020-01-02', 1);
insert into 회원테이블 values (1002, '이순신', '2020-01-03', 0);
insert into 회원테이블 values (1003, '장영실', '2020-01-04', 1);
insert into 회원테이블 values (1004, '유관순', '2020-01-05', 0);
/*회원 테이블 조회 */
select * from 회원테이블;
/*조건 위반*/
/*primary key 제약 조건 위반 */
insert into 회원테이블 values (1004,'장보고','2020-01-06',0);
/*not null 제약 조건 위반*/
insert into 회원테이블 values (1005,'장보고',NULL,0);
/*데이터 타입조건 위반*/
insert into 회원테이블 values (1005,'장보고',1,0);
/*데이터 조회*/
/*모든 열 조회 */
select * from 회원테이블;
/*특정 열 조회 */
select 회원번호, 이름 from 회원테이블;
/*특정 열 이름 변경한 후 조회 */
select 회원번호,
이름 AS 성명
from 회원테이블;
/* 데이터 수정 */
update 회원테이블
set 수신동의 = 0;
/*회원 테이블 조회*/
select * from 회원테이블;
/*특정 조건 데이터 수정 */
update 회원테이블
set 수신동의 = 1
where 이름 = '홍길동';
/*데이터 삭제*/
/*특정 데이터 삭제*/
delete
from 회원테이블
where 이름 = '홍길동';
/*회원 테이블 조회*/
select * from 회원테이블;
/*모든 데이터 삭제 */
delete from 회원테이블;
/*회원 테이블 조회*/
select * from 회원테이블;
|
cs |
개체 무결성
- 기본 테이블의 기본 키를 구성하는 어떤 속성도 NULL 값을 가질수없다.
참조 무결성
- 외래 키 값은 NULL 이거나, 참조 릴레이션의 기본 키 값과 동일해야한다.
- 릴레이션은 참조할 수 없는 외래 키 값을 가질 수 없다.
- 외래 키(Foreign key) : Set of fields in one relation that is used to 'refer' to a tuple in another relation.