데이터베이스는 현실상의 객체들을 정보로 저장해 놓은 서버라고 할 수 있습니다.
이런 데이터베이스 중 저는 SQL을 공부하고 있습니다.
SQL은 Structured Query Language의 약자입니다.
SQL은 구조화된 질의 언어라고 할수 있습니다.
SQL에는 DDL, DML, DCL이 있습니다.
DDL(Data Definition Language) – 데이터 정의어
DML(Data Manipulation Language) – 데이터 조작어
DCL(Data Control Language) – 데이터 정의어
용어
Entity
(table name)
|
Attribute(column)
|
||||
번호
|
이름
|
전화번호
|
주민번호
|
주소
|
|
Tuple
(row)
|
1
|
강씨네
|
010-1111-2222
|
123456-1111111
|
서울
|
2
|
이순신
|
010-1234-5678
|
111111-1234567
|
부산
|
|
3
|
홍길동
|
010-9999-1111
|
191919-1515151
|
대구
|
이러한 표가 있다고 했을 때의 용어를 보겠습니다.
Entity(엔티티) – 데이터로 관리하고자 하는 객체 / 표 자체 / 데이터의 집합 ( =Table )
Column(칼럼) - 번호, 이름, 전화번호, 주민번호, 주소와 같은 필드, 속성 값 / 연관된 객체의 특성 ( =Attribute )
Tuple(튜플) - 테이블을 구성하는 각각의 행들 데이터의 값( =Row )
Schema(스키마) - DB메타데이터(entity, attribute, relationship 등)들의 집합
키의 종류
후보키(Candidate Key) : 테이블에서 유일성과 최소성을 만족하는 키
è 해당 표에서는 번호, 전화번호, 주민번호가 해당
기본키(Primary Key) : 후보키 중에서 선정되어 사용되는 키
è 해당 표에서 번호, 전호번호, 주민번호 중 선정
대체키(Alternate Key) : 후보키 중 기본키로 선택되지 않은 나머지 키
è 해당 표에서 번호가 후보키로 선정 되었다면 전화번호, 주민번호가 대체키가 됨
슈퍼키(Super Key) : 복합키(Composite Key) 또는 연결키
è 번호와 이름을 묶어서 선정할 경우 슈퍼키가 됨
외래키(Foreign Key) : 어떤 열이 다른 참조 테이블의 기본키
è 다른 테이블에서 참조하는 키
위의 표에서 칼럼 중 오직 한사람만 가질수 있는 유일성이 있는 데이터는 번호와 전화번호와 주민번호가 있습니다.
이름의 경우 동명이인이 있을 수 있고 주소의 경우 상세주소라 하더라도 가족의 경우 주소가 같을수 있기 때문입니다.
이러한 유일성을 가진 데이터중 최소성 즉 각각을 후보키라고 부릅니다.
이런 후보키중에서 대표로 선정된 키를 기본키라고 부릅니다.
후부키중 기본키로 선정되지 않은 키를 대체키라고 부릅니다.
슈퍼키의 경우 유일성은 만족해야하지만 최소성은 만족하지 않습니다.
번호와 이름을 묶을 경우 유일성은 만족하지만 최소성은 만족하지 않습니다. 이러한 키를 슈퍼키라고 부릅니다.
다른 테이블에서 키를 참조할시 기본키를 참조하게 됩니다. 이렇게 다른키에서 참조하는 키를 외래키라고 부릅니다.
정규화
1NF : 컬럼의 중복 값 분리
2NF : 기본키에 종속적이지 않은 컬럼 분리
3NF : 기본키를 제외한 나머지 컬럼들 간의 종속 불가
BCNF : 기본키가 여러 개 존재할 경우, 복합키로
4NF : 다치종속 제거. (컬럼 A->B+C : A->B / A->C)
5NF : 조인 종속성 이용. 조인이 후보키를 통해서만 성립이 되도록
(정규화는 이런게 있다라고만 알아두시고 나중에 조금더 자세하게 볼게요!)
트랜잭션
또한 데이터베이스에는 트랜잭션이라는 것이 있습니다.
트랜잭션은 DB를 변화시키기 위한 최소한의 작업단위를 말합니다.
트랜잭션의 특징은 다음과 같습니다.
- 원자성 : 모두 반영, 아니면 이전 상태 (all or nothing)
- 일관성 : 실행 이전과 실행 이후가 일관적이어야 한다
- 고립성 : 실행 도중 다른 트랜잭션의 영향을 받으면 안된다
- 지속성 : 성공하면 결과가 영구적 반영
트랜잭션을 은행을 이용해 제가 친구한테 돈을 빌려주는 것을 예시로 보겠습니다.
1. 원자성
만약 제가 친구한테 5000원을 빌려주기로 했습니다.
제가 은행에 5000원을 입금하고 은행에서는 5000원을 친구한테 전달을 해주어야 하며 친구는 5000원을 받아야합니다.
이 모두가 반영이 되어야 빌려준게 되겠죠?
만약 어느 하나라도 반영이 되지 않는다면 빌려주지 않게 됩니다.
만약 은행에 5000원을 입금했는데 은행에서 인출을 안해준다면??
있을수 없는 일이죠.
그래서 all or nothing이여야 합니다. 빌려주려면 다 반영하고 빌려주지 않으려면 전부다 반영이 되지 않아야합니다. 이것이 원자성입니다.
2. 일관성
또한 제가 5000원을 빌려주기 위해 5000원을 입금했는데 은행에서 4000원만 출금해주는것도 말이 안됩니다.
제가 5000원을 빌려주기 위해 5000원을 입금했다면 은행은 반드시 5000원을 출금해주어야하고 친구는 5000원을 받아야합니다.
이것을 일관성이라 합니다.
3. 고립성
또 친구 2명에게 빌려준다고 했을 때 한친구는 5000원을 빌려달라고 하고 다른 친구는 6000원을 빌려달라고했을때 기존 잔액이 10000원인 제가 친구1한테 먼저 5000원을 빌려주었다면 그 다음친구에게 6000원을 빌려 줄 수 없습니다.
둘 중 한명한테만 빌려 줄 수 있고 동시에 빌려 줄 수 없다는 이야기죠. 이러한 것을 고립성이라 합니다.
4. 지속성
만약 친구한테 5000원을 정상적으로 빌려주었습니다. 그러면 빌려준 그상태로 반영되어야 합니다. 하지만 정상적으로 반영이 되었다가 은행이 다시 돈을 뻇어갈수 없겠죠.
이러한 것을 지속성이라고합니다.
타입
|
자료형
|
설명
|
문자
|
CHAR
|
최대 길이 2000BYTE 고정 길이 문자열
|
VARCHAR2
|
최대 길이 4000BYTE 가변 길이 문자열
|
|
CLOB
|
최대 4GB 가변 길이 문자열
|
|
숫자
|
NUMBER
|
숫자형 자료형
|
날짜
|
DATE
|
YYYY-MM-DD HH24:MI:SS
|
기타
|
BLOB
|
이진 데이터 저장 자료형
|
주로 쓰는 타입은 CHAR, VARCHAR2, NUMBER입니다.
'RDB > Oracle' 카테고리의 다른 글
[ORACLE] DCL - 데이터 제어어 (0) | 2021.12.22 |
---|---|
[ORACLE] DDL - 데이터 정의어 (0) | 2021.12.21 |
[ORACLE] DML - 데이터 조작어 (0) | 2021.12.20 |
[ORACLE] 계정 생성 (0) | 2021.12.18 |
[ORACLE] 오라클(ORACLE) 데이터베이스(DB)설치 (0) | 2021.12.17 |