버글버글
DataBase 수업 기록 (2) RDB(관계형 데이터베이스) 본문
▶ 관계형 데이터베이스(RDB)
- 데이터를 테이블(Table)에 직관적으로 간단하게 나타내는 관계형 모델 기반의 데이터베이스
- 테이블의 각 행은 키(Key)라는 고유 ID를 포함한 레코드를 의미
- 테이블의 각 열은 데이터의 속성(Attribute)가 포함
- 현재 데이터베이스 시장의 주류(Mainstream)를 이루고 있음
관계형 데이터베이스 장점 | 관계형 데이터베이스 단점 |
- 편리한 유지보수 | - 시스템 자원을 많이 차지 |
- 대용량 데이터의 관리 | - 구조가 복잡해질수록 성능 최적화가 반드시 필요 |
- 데이터 무결성의 보장 |
* 테이블(Table)
- 데이터를 체계화하여 행과 열의 집합으로 구성한 것
- 표 형태의 데이터를 의미
- RDB에서는 테이블 릴레이션(Relation)이라고도 함
* 테이블 구성
- 행 : 로우(Row), 레코드(Record), 튜플(Tuple)
- 열 : 칼럼(Column), 필드(Field), 속성(Attribute)
* 테이블 용어
- 도메인 : 한 칼럼(Column)이 가질 수 있는 값의 범위(집합)
- 차수 : Degree, 한 테이블에 있는 칼럼(Column)의 개수
- 기수 : Cardinality, 한 테이블에 있는 로우(Row)의 개수
칼럼(필드)↓ | |||
로우 → |
회원 테이블 = 회원 릴레이션
* 테이블 생성
1. 제약조건의 이름을 지정하지 않는 방법(SYS로 시작하는 임의의 제약조건이름이 지정)
2. 제약조건의 이름을 지정하는 방법
* 제약조건 생성
1. 테이블 생성할 때 함께 지정
2. 테이블 생성한 뒤 테이블 수정하면서 지정
▶ Key
- 하나의 테이블에서 각 로우(Row)를 고유(Unique)하게 식별(Identify)할 수 있는 칼럼(Column) 또는 칼럼의 조합을 의미
* 종류
- 슈퍼키(Super Key)
- 후보키(Candidate Key)
- 기본키(Primary Key)
- 대체기(Altemate Key
- 외래키(Foreign Key)
- 테이블을 생성할 때 기본기(PK)와 외래키(FK)는 명시적으로 선언해야 함
예시 테이블)
고객번호 | 아이디 | 고객명 | 직업 | 휴대폰번호 | 주민번호 |
1 | aaa | 제임스 | 자영업 | 010-1234-1234 | 851122-1111111 |
2 | bbb | 에밀리 | 개발자 | 010-8282-8282 | 951017-2222222 |
3 | ccc | 사만다 | 인턴 | 010-2580-2580 | 980608-1111111 |
4 | ddd | 제임스 | 개발자 | 010-5678-5678 | 771024-2222222 |
5 | eee | 브라운 | 공무원 | 010-9876-9876 | 771024-2222222 |
* 슈퍼키 (Super Key)
- 테이블의 각 로우(Row)들을 식별할 수 있는 칼럼(Column) 또는 칼럼의 집합
- 고객 테이블을 분석하여 슈퍼키가 될 수 있는 칼럼이나 칼럼의 집합을 선정
판단 기준 : 모든 로우(Row)가 서로 다른 값을 가질 수 있는가? 유일성(Unique)
- 선정된 슈퍼키의 예시 (고객번호, 아이디, 휴대폰번호, 주민번호, 고객명 + 직업)
* 후보키 (Candidate Key)
- 최소한의 칼럼(가장 적은 수의 칼럼)으로 구성된 슈퍼키(Super Key)만 선정한 것
- 후보키는 유일성 + 최소성의 특징을 가짐
- 선정된 후보키의 예시(고객번호, 아이디, 휴대폰번호, 주민번호)
*기본키(Primary Key)
- 후보키(Candidate Key) 중에서 DBA가 선택한 키를 의미
- 기본키(Primary Key, PK, 주키) 는 유일성 + 최소성의 특징을 가짐
- 기본키는 개체 무결성의 특징을 가짐
1) NOT NULL : 널(NULL) 값을 가질 수 없음
2) UNIQUE : 중복된 값을 가질 수 없음
- 값이 변경되거나 의미가 변경될 수 있는 칼럼은 기본키로 부적절 함
- 선정된 기본키의 예시(고객번호) (여기서 고객 번호는 인공키 이다.)
*기본키 선정
- 기본키의 종류
1) 자연키(Natural Key) : 비즈니스 모델을 통해서 추출한 키, 즉 실제로 존재하는 데이터
2) 인공키(Artificial Key) : 실제로 존재하지 않는 데이터를 인위적으로 추가한 키, 주로 AUTO INCREMENT 값을 사용함
- 고객 테이블의 기본키 선정 이유
1) 고객번호
- 인공키
- 고객이 추가될때마다 번호를 하나씩 증가시켜서 부여하므로 NON NULL + UNIQUE 모두 만족
2) 아이디
- 자연키
- 일반적으로 고객마다 서로 다른 아이디를 필수로 사용하므로 NOT NULL + UNIQUE 모두 만족
- 향후 이메일로 아이디를 대체하는 등 아이디의 의미가 변할 수 있으므로(아이디 없이 회원 가입이 가능할 수 있으므로) 기본키로 부적절함
3) 휴대폰번호
- 자연키
- 휴대폰이 없는 고객이 존재할 수 있으므로 기본키로 부적절 함
4) 주민번호
- 자연키
- 모든 고객이 서로 다른 값을 가지고 있으므로 NOT NULL + UNIQUE 모두 만족
- 회원 가입할 때 주민번호는 입력 받는 필수 요소가 아니므로 기본키로 부적절함
* 대체기(Altemate Key)
- 기본키(Primary Key) 키를 제외한 나머지 후보키(Candidate Key)를 의미함
- 보조키라고도 함
- 선정된 대체키의 예시(아이디, 휴대폰번호, 주민번호)
* 외래키(Foreign Key)
- 다른 테이블하고 연결 시켜 놓은 키
- 다른 테이블과 관계(Relationshi[)를 맻기 위해서 설정하는 키(Key)
- 외래키(Foreign Key)는 다른 테이블의 기본키(PK) 또는 유일키(Unique)와 관계를 맺을 수 있음
- 외래키는 참조 무결성의 특징을 가짐
1) 관계를 맺은 테이블의 키(기본키 또는 유일키)의 도메인(Domain)을 가져야 함
2) 관계를 맺은 테이블에 없는 데이터는 가질 수 없다는 의미
- 외래키는 중복 가능하고 NULL도 가능함
- 참조 관계에서 기본키를 가진 테이블을 부모 테이블, 외래키를 가진 테이블을 자식테이블이라고 함
예시)
PK(기본키) | ||
회원번호 | 아이디 | 이름 |
1 | a | 김 |
2 | b | 이 |
3 | c | 박 |
4 | d | 정 |
5 | e | 황 |
FK(외래키) - PK와 동일 (참조하는 PK값만 가질 것) |
||||
게시글 번호 | 제목 | 내용 | 작성자 | 작성일자 |
1 | 안녕 | 하세요 | 1 | 22/08/20 |
2 | 출첵 | 하이 | 1 | 22/08/21 |
3 | 질문 | 있어요 | 9 | 22/08/22 |
* 위의 예시에서 9번 작성자는 회원에 없으므로 실패
* 작성자와 회원번호는 PK면서 FK이다.
* 위의 예시에서 1번 회원이 탈퇴할 경우, 게시글의 작성자를 NULL로 할지, 같이 삭제를 할지는 개발자가 정함
* 각 키의 관계
▶ 데이터 타입
1. CHAR(size) : 고정 길이 문자 타입(1 ~ 2000바이트)
2. VARCHAR2(size) : 가변 길이 문자 타입(1 ~ 4000바이트)
3. NUMBER(p,s) : 정밀도(p), 스케일(s)로 표현되는 숫자 타입
- 정밀도(p) : 정수 + 소수점 모두 포함하는 전체 유효 숫자(0은 제외)
- 스케일(s) : 소수점 자리 수
예시)
NUMBER : 최대 38자리 숫자(22바이트)
NUMBER(3) : 최대 3자리 정수
NUMBER(5,2) : 전체 5자리, 소수점 2자리 실수(123.45)
NUMBER(2,2) : 1 미만의 소수점 2자리 실수(0.12)
예시)
DROP TABLE USER_TBL;
CREATE TABLE USER_TBL(
USER_ID VARCHAR2(30 BYTE) NOT NULL,
USER_PW VARCHAR2(30 BYTE) NOT NULL,
USER_NAME VARCHAR2(30 BYTE) NULL,
USER_AGE NUMBER(3) NULL,
USER_ADDR VARCHAR2(30 BYTE) NULL,
USER_TEL CHAR(13 BYTE) NULL,
USER_GEN CHAR(1 BYTE) NULL,
CONSTRAINT PK_USER_TBL PRIMARY KEY(USER_ID),
CONSTRAINT CK_USER_AGE CHECK(USER_AGE BETWEEN 0 AND 100),
CONSTRAINT UQ_USER_TEL UNIQUE(USER_TEL)
);
'Database > database 수업 기록' 카테고리의 다른 글
DataBase 수업 기록 (6) SCOTT 계정 초기화 (0) | 2022.08.30 |
---|---|
DataBase 수업 기록 (5) 모델링(Modeler) (0) | 2022.08.29 |
DataBase 수업 기록(4) 오브젝트생성 (0) | 2022.08.28 |
DataBase 수업 기록 (3) 관계모델링 (0) | 2022.08.27 |
DataBase 수업 기록 (1) 기초, 사용자 생성 및 권한 (0) | 2022.08.25 |