Joslynn의 하루

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -20일차 노트 필기_데이터베이스 정의, 데이터 타입, 테이블 만들기, Primary Key_220818 본문

MSA Full-Stack 개발자 양성과정/데이터베이스(Oracle)

대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -20일차 노트 필기_데이터베이스 정의, 데이터 타입, 테이블 만들기, Primary Key_220818

Joslynn 2022. 8. 18. 22:32

데이터베이스(DB)

: 데이터를 저장하는 공간

: 관계형 데이터베이스 이론에 맞춰 데이터를 저장

  - 정규화라는 과정을 통해 데이터의 중복을 최소화시켜 저장을 한다.

  - 데이터를 저장할 때 테이블이라는 형태로 데이터를 저장하게 된다.

 


 

** 실질적인 DB에 테이블을 저장하기 위해 <데이터베이스 모델링>이라는 과정을 걸친다.

  1) 개념적 설계

  2) 논리적 설계

  3) 물리적 설계

 

**학습 종류

1) 개발자 측면

: 데이터를 조작하는 방법들

 

1. DDL(Data Definition Language)

: 데이터정의어, 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들

: create view, create table, create index, create sequence...

2. DNL (Data Manipulation Language)

: 데이터 조작어, 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함. 

: Insert, Update, Delete

3. DCL (Data Contorl Language)

: 데이터 제어어, 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함.

: Grant, Revoke

4. DQL (Data Query Language)

: 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어

: Select

 

 

2) DB 관리자 측면(DBA)

 


 

Database 종류

(1) Oracle

      version: 8i, 9i, 11g, 12c, 18c, 19c, 21c...

      무료버전: Express Edition

      유료버전: Enterprise Edition

(2) Ms_Sql

(3) My_Sql

 


 

데이터 저장

table형태로 존재(행과 열)

ex> 학생 정보 관리

primary key 이름 나이 외모 연락처 주소
1 송중기 30 A 111 서울
2 삼순이 25 A 222 여수

→ schema(스키마):  하나의 테이블이 가질 수 있는 구조(속성)를 정의해둔 문서

**primary key: not null, 중복 불가 // 해당 데이터를 유일하게 만들어주는 것

→ 레코드 = 튜플

: 하나의 table은 여러 개의 튜플이 모여서 구성이 된다.

: 전체 튜플이 모여 인스턴스가 됨

: 한 셀안에 들어있는 값: Domain

 

1. dataType의 종류

: 각각 항목들에 대한 데이터 타입을 지정해야 함

: ex> 이름(문자)

 

2. Create 문자

: 제약조건의 종류(Pk, Fk, Ck, u, d)

 ex) 외모의 경우 모호한 측면이 있음, ABC 조건을 주어 관리할 수 있음

 

**DML 문장

: insert문장 → 레코드 추가

: update 문장  특정 셀의 값을 수정

: delete 문장  특정 레코드 삭제

: 위의 문장을 하나로 묶어서 모두 다 성공했을 때 커밋, otherwise, 롤백 (정합성의 문제를 방지)

: transaction의 개념 중요

 

: select 문장 많은 양의 레코드 중에서 원하는 데이터를 추출

 

CRUD 작업: creat, insert, update, delete, select

+ 다양한 함수

+ join

: 테이블이 분리가 되면서 각각의 테이블들은 서로 관계를 가짐

: 하나의 테이블만으로는 원하는 정보를 얻기 어려움

: join: 여러개의 테이블을 하나로 합쳐서 정보를 전달

: view

: sequence

: index

: subQuery


쿼리 작성

쿼리 작성을 위해서는 cmd 창을 열고 sqlplus를 입력한다.

계정명/비밀번호 입력

 SQL> 이부분에 명령어를 입력해서 문장을 실행한다.
   
  * cmd의 기반의 코드작성이 불편하기 하기때문에.
    GUI기반으로 코드작성을 할수 있는 tool을 사용한다.
         : sqlDeveloper를 다운로드 

  * cmd창에서 새로운 계정으로 접속

 conn 계정명/비밀번호;


  * 현재 계정을 검색

 show user;

*계정  만들기

create user 계정명 identified by 비밀번호;

*만든 계정 lock 풀기

alter user 계정명 account unlock; 
ALTER USER 계정명 IDENTIFIED BY 비밀번호 ACCOUNT UNLOCK;

* 권한 부여 (기본 권한 설정 create table / insert/ update/ delete /select)

GRANT RESOURCE TO 계정명;

* 권한 주기(특정 권한 부여)

grant create session, create table, create view,
 create sequence, create procedure to 계정명;

* 접근 가능한 table 목록

select * from tab;

* 특정테이블의 컬럼에 대한 정보

desc table이름;

 


--쿼리문은 대소문자를 가리지 않음, 실질적으로 물리적 공간 안에 만들어질 때는 다 대문자로 만들어짐

-- 낙타 표기법이 소용 없기 때문에 단어와 단어 사이는 _로 연결

-- Domain은 대소문자를 가림


dataType의 종류

1) 문자열
    CHAR(BYTE 수) : 고정 길이 - 최대 2000BYTE - 길이 정해진 정보들
    VARCHAR2(BYTE 수) : 가변 길이 - 최대 4000BYTE - 길이를 벗어나면 안됨
                                           데이터크기가 늘었다 줄어드는 과정에서 성능 이슈 있음
    

ex)  VARCHAR2(5) : 5BYTE, VARCHAR2(5 CHAR) : 5문자 // BYTE 수와 관련 없음
    
    *유니코드 지원
    NCHAR (BYTE 수)
    NVARCAHR2(BYTE 수)
    
    : 문자열을 저장할 때 반드시 '값'형식으로 저장한다. (single quotation)
    : 최근 ORACLE에서는 utf-8을 지원하면서 한글 한 글자가 3byte 차지
    


    * 대용량 데이터를 저장하는 타입
    LOB : LARGE OBJECT의 약자, 대용량의 데이터를 저장할 수 있는 타입
        1) CLOB : 가변 길이의 아주 긴 문자열 저장할 때, 4GB
        2) BLOB : 가변 길이의 2진수 형태를 저장할 때, 4GB (IMAGE) EX)자바의 직렬화
    
   **LOB 사용보다는 파일에 대한 위치, 정보만 한 셀에 저장해서 찾아쓰도록 권장됨;
    
    
    2) 숫자
        NUMBER (정수형, 실수형 모두 표현)
            ex) NUMBER(1) - -9~9까지 표현 가능(한자릿수)
                  NUMBER(3) - -999~999까지 표현 가능
                  NUMBER (5,2) - 전체 5자리 중에 2자리가 소수점 자리 - -999.99~999.99
                  ** 자리수를 주지 않으면 32자리 
        SMALLINT
        INT

    

***NUMBER 주로 사용: SMALLINT나 INT를 선언해도 내부적으로 NUMBER로 변환
        
   3) 날짜
        DATE - 년월일 시분초 설정
        TIMESTAMP - 년월일 시분초 + MILS단위까지 정밀하게 표현
        
** 날짜는 저장할 때 '년-월-일' 형식으로 저장

** 현재 시스템의 날짜와 시간을 구하는 함수!!! - SYSDATE
    ex) SELECT SYSDATE FROM DUAL;

 


 

테이블 생성

테이블 생성 방법

create table 테이블이름(
 컬럼명 datatype [ null | not null ] [ constraint 별칭 제약조건 ] ,
 컬럼명 datatype [ null | not null ] [ constraint 별칭 제약조건 ] ,
 .....
)

 

: 테이블 이름: IDENTIFIER 규칙 적용, 대소문자 구문 없으므로 _ 언더바로 단어 조합, 숫자로 시작 불가
: [] 기호: 생략가능 // not null: 무조건 값이 있어야 함, null: 선택 정보
: constraint: 컬럼에 제약 조건을 줄 수 있음

 

 

** 제약 조건
    1) PRIMARY KEY: 대표 키로 중복 안되고 NOT NULL이다.
    2) FOREIGN KEY : 다른 테이블의 컬럼을 찾조하는 것(PK)
    3) UNIQUEL: PK와 동일하나 대표 키는 될 수 없는 것
    4) CHECK: DOMAIN에 들어갈 수 있는 값의 범위를 체크   
    5) DEFAULT: 기본값 설정 (미리 설정해두면 자동으로 기본값이 값으로 지정됨

 

 


PRIMARY KEY


    : 대표키 중복 x, 
    : PK를 설정하면 레코드들의 중복을 최소화 시키기 위한 목적으로 사용한다. (동일한 정보 중복 x)
    : 반드시 하나의 테이블에 한개의 PK 존재 (데이터베이스 모델링 과정을 거칠 경우)
    : 2개 이상의 컬럼을 하나로 묶어서 PK로 설정 가능 - 복합키
        ex) 급여 테이블 사원번호 : 월


      - 보통 복합키를 설정하면 연관관계가 있을 때 사용이 불편해서 정규화 과정을 하다보면
        대리키(보통 자연수)를 만들어서 PK설정을 하고 복합키들을 일반 속성으로 사용한다.
        ex) 주민번호를 PK로 잡았을 때, 2000년대 주민번호 체계 바뀜 -> 오류 가능성 있음
    

: 자동 INDEX 설정 - 색인 // INDEX: 검색 속도를 빠르게 해줌
        - 조건을 주어 검색할 때 PK를 대상으로 검색조건으로 사용하면 검색 속도가 가장 빠름    

Comments