일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CS50
- til
- ERD
- 객체지향
- Computer Science
- CS기초지식
- CS 기초지식
- ssafy
- 예외처리
- edwith
- 삼성청년SW아카데미
- 기초프로그래밍
- 면접을 위한 CS 전공지식 노트
- java
- 이진법
- WebProgramming
- 부스트코스
- 알고리즘
- Compute Science
- SW
- Java Programming
- w3schools
- CS 기초
- SSAFY 9기
- 관계형 데이터베이스
- 데이터베이스 모델링
- 모두를 위한 컴퓨터 과학(CS50)
- exception
- 상속
- 모두를 위한 컴퓨터 과학
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 -20일차 노트 필기_데이터베이스 정의, 데이터 타입, 테이블 만들기, Primary Key_220818 본문
대용량 웹서비스를 위한 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를 대상으로 검색조건으로 사용하면 검색 속도가 가장 빠름