티스토리 뷰
✔️ 5가지 정보가 필요
IP주소 -> 포트번호(Oracle: 1521, MySQL: 3306, WAS: 80) -> DB Name -> account, password
✔️ 계정과 비밀번호가 결정되면 -> 데이터베이스가 결정된다.
✔️ 계정별로 테이블 스페이스가 따로 주어진다. 그래서 계정별로 테이블 공유가 되지 않는다.
- Primary
- Unique
- Foreign
- * == not null
▶RDB(Relationship Data Base) : 관계형 데이터베이스
▶RDBMS : RDB를 관리하는 시스템이자 소프트웨어이다. RDBMS의 종류는 Oracle, MySQL, MSSql, Sybase
※ SQL : Structured Query Language (구조적 질의 언어)
▶ DQL (Data Query Lanuage)
- select문
▶ DML (Data Manipulation Lanuage)
- insert, update, delete 문
▶ DDL (Data Definition Lanuage)
- create, alter, drop문
▶ TCL (Transaction Control Lanuage)
- commit, rollback문
▶ DCL (Data Control Lanuage)
- grant, revoke문
+
PL/SQL (프로그래밍 요소)
- 함수
- 프로시저
✔️ 함수와 프로시저의 차이점
: 프로시저는 프로세스를 절차적으로 기술한 것이다. 함수는 각 프로세스를 수행하기 위한 기능이다.
[Data Types]
✔️VARCHAR vs VARCHAR2
: 오라클9 이후부터는 같은 의미이다. 둘 다 max-size 4000bytes이다.
그 전에 오라클 8까지는 varchar의 max-size는 2000bytes
varchar2의 max size는 4000bytes였다.
✔️ VARCHAR vs NVARCHAR - 가변길이
N-> Unicode 인코딩을 의미한다. -> UTF-16
▶ varchar는 비유니코드 지원이므로 영문이나 숫자등은 1바이트, 한글이나 한자 같은 것들은 2바이트로 저장을 한다.
반면에 nvarchar의 경우는 유니코드지원이므로 어떤문자든 2바이트로 저장을 한다.
이것의 차이는 varchar는 length를 byte기준으로 잡고 nvarchar는 문자열길이로 잡는다
예시로 varchar(3)은 3byte라 '테스트'라는 문자열이 있을 시 6byte므로 '테'만 입력되게 되고
nvarchar(3)은 문자열로 계산하여 '테스트' 문자열이 정상적으로 모두 입력된다.
▶ 유니코드란, 숫자와 글자, 즉 키와 값이 1:1로 매핑된 형태의 코드 인것이다.
다시말해 아스키코드로 0x41 = A 로 매핑된 것 처럼, 아스키코드로 표현할 수 없는 문자들을 유니코드라는 이름 아래
전 세계의 모든 문자를 특정 숫자(키)와 1:1로 매핑한 것이다.
[문자셋]
1. ISO-8859-1 = ASC|| = 특수, 숫자, 알파벳 (모두 1byte)
2. EUC-KR = MS949 = ISO-8859-1 + 한글지원(2byte)
3. UTF-8 = ISO-8859-1(1byte) + 한글(3byte) + 세계 모든 나라 언어 포함
4. UTF-16 = ISO-8859-1(2byte) + 모든 언어 (2byte)
✔️ CHAR
: 고정 길이 문자
✔️ NUMBER - 최대 38자
number
number(10)
number(10, 2) : 소수 이하 자리가 2자리, 전체는 10자리
✔️ LONG
문자임
✔️ TIMESTAMP
✔️ CLOB - 가변 길이
: 4G(기가)까지 저장가능하다. 매우 큰 문자들을 저장하고 싶을 때 사용
✔️ BLOB
: 4G(기가)까지 저장가능하다. binary data, 이미지 파일저장할 때
UNIQUE
1) 값이 중복이 되어서는 안된다.
2) 테이블에 여러 컬럼에 생성할 수 있다.
실선의 의미는 pk가 없으면 fk도 없다.
점선의 의미는 fk값이 널이어도 된다.
※ 데이터 모델링
1. 요구 분석 (화면 설계한 것으로 대체)
2. 객체(엔티티) 도출 및 속성 정의 (개념적 설계)
3. 객체간 관계 정의 (개념적 설계)
4. E-R 다이어그램 (논리적 설계)
5. 스키마 작성 (물리적 설계) - SQL Developer Modeler를 활용 ★★★
1) 테이블을 정의
2) 컬럼 정의
3) 테이블의 제약 조건(PK, not null, unique, check)
4) 테이블의 관계(FK)
※ 제 3 정규화를 따르는 스키마 작성 방법
1. 테이블 설계
1) 객체의 이름은 테이블 이름으로 해라. 가능하면 복수의 의미를 가지는 것이 좋다. (ex- user말고 users, products, orders)
2) 객체의 속성 중에서 객체를 식별하는 속성을 기본키(Primary Key)로 설정해라.
3) 객체의 속성은 하나의 컬럼으로 정의해라.
4) 컬럼의 값이 복합값으로 구성되어 있을 경우. 검색 조건에 따라서 여러 컬럼으로 분리시켜라.
예: 서울시 송파구 가락동 IT 벤처타워 12층 KOSA
=> 컬럼: 하나의 주소 컬럼을 만들지 말고, 시 구 동 상세 컬럼을 분리시켜라.
예: 주민번호 123456-1234567
=> 하나의 SSN 컬럼으로 만들지 않고, 첫 6자리, 뒤 7자리를 따로 저장하는 컬럼으로 분리
5) 4에서 컬럼으로 분리했을 경우, 두 개 이상의 컬럼이 하나의 행을 식별해야 한다면, 복합 Primary Key로 생성해라.
6) 다중값을 갖는 컬럼은 새로운 테이블로 생성하고, FK를 생성한다.
▶ users table
-------------------------------
userid(PK). userhobby
-------------------------------
winter. 영화, 게임, 여행
▶ hobbys
--------------------------
userid(FK). userhobby
--------------------------
winter. 영화
winter. 게임
winter. 여행
2. 테이블간 관계 설정
1) 1:1관계
- 1:1 관계의 테이블은 한쪽의 PK를 다른쪽의 FK로 생성해라.
예 : 남자회원, 여자회원 테이블, 가족 관계는 1:1 관계
Males. Female
----------- ----------------------
maleid(PK). femaleid(PK). maleid(FK)
2) 1:N관계
- 1쪽 테이블의 PK를 N쪽 테이블의 FK로 생성해라
예 : 회원은 게시물을 여러 개 작성할 수 있다.
회원(1) -------- 게시물(N)
users. boards
----------- ----------------------
maleid(PK). femaleid(PK). maleid(FK)
3) N:N 관계
- 새로운 관계 테이블을 생성하고 양쪽 테이블과 1:N 관계를 맺는다.
예: 상품은 여러 주문에 포함될 수 있다. 한 주문에는 여러 상품이 포함될 수 있다.
상품(N) -------- 주문(N)
상품(1) -------- 주문상품(N) -------- 주문(1)
Products orderproducts orders
----------- ----------------- ------------
pid(PK). pid(FK). ono(FK) ono(PK)
주의점 : 관계에 따른 새로운 속성이 생길 수 있다. 이 속성은 관계 테이블의 속성으로 생성한다.
ex ) 주문량은 orderproducts 테이블의 컬럼으로 생성해야 한다.
각각의 관계에 따른 속성은 새로운 관계 테이블의 컬럼으로 생성하고,
한 쪽에만 있는 속성(orders - 주문번호, 배송지, 주문자)은 해당 테이블의 컬럼으로 생성해야 한다.
'Computer Science > DataBase' 카테고리의 다른 글
[Postgresql] concat 과 || 차이점 알아보기 (0) | 2021.10.26 |
---|
- Total
- Today
- Yesterday
- os
- yarn start
- 자바빌드도구
- 클래스와객체
- es6모듈
- 생성자필드메소드
- ES6
- 메이븐 저장소
- 자바스레드
- jdk
- 사용자정의예외클래스
- sequelize.fn
- 익명자식객체
- 자바스크립트Call-back
- @functools.singledispatch
- 정적멤버
- 인스턴스멤버
- 백준2206 파이썬 풀이
- Git
- java
- 백준
- jre
- 객체지향개념
- 자바스크립트Promise
- method와 function
- nunjucks
- @functools.lru_cache
- nodejs
- dynamic-project
- @functools.wraps
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |