버글버글

DataBase 수업 기록 (2) RDB(관계형 데이터베이스) 본문

Database/database 수업 기록

DataBase 수업 기록 (2) RDB(관계형 데이터베이스)

Bugle 2022. 8. 26. 00:00
반응형

▶ 관계형 데이터베이스(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)
);
반응형