: 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(Thing)
1.1.2.2.1. 유무형에 따른 분류
1.1.2.2.2. 발생 시점에 따른 분류
: 업무에서 필요로 하고 의미상 더 이상 분리되지 않는 Entity를 설명하는 인스턴스의 구성요소.
1.1.3.2.1. 특성에 따라
1.1.3.2.2. Entity 구성 방식에 따라
1.1.3.2.3. 세부 의미를 쪼갤 수 있는지에 따라
1.1.3.2.4. 동일한 성질의 값의 갯수에 따라
: 속성에 대한 데이터타입, 크기, 제약사항 지정
: Entity의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태, Relationship Paring의 집합
Paring: 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것
Relationship Paring: 엔터티내에 인스턴스와 인스턴스사이에 관계를 가지는 것
UML에서의 관계
Unified Modeling Language
관계명(Mambership)
관계차수(Cardinality)
- 1:1
- 1:M
- M:N
관계 선택 사양 (Optionality)
- 필수관계
- 선택관계
대표성 여부
Entity 내에서 스스로 생성?
속성의 수
대체 여부
DB: 데이터를 일정한 형태로 저장해 놓은 것
DBMS(DataBase Management System): 데이터의 효율적인 관리 및 손상 예방, 복구 등의 기능을 수행하는 시스템
:관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제어를 하기 위해 사용하는 언어
: DB 기본 단위. 데이터를 저장하는 Object
정규화(Normalization)
: 테이블을 분할하여 데이터의 불필요한 중복을 줄이는 것
※ 데이터의 정합성 확보와 데이터 입력/수정/삭제시 발생할 수 있는 이상현상(Anomaly)을 방지하기 위해 정규화는 관계형 데이터베이스 모델링에서 매우 중요한 프로세스
: Data Definition Language
#### NUMBER ####
#P: 소수점 이하를 포함한 전체 자릿수
#S: 소수점 자릿수
NUMBER(P, S) #가변숫자
# P: [1,38], default: 38
#S [-84, 127], default=0
#최대 22byte
FLOAT(P)
# P: [1, 128], default = 128
# 최대 22byte
BINARY_FLOAT
# 32bit 부동 소수점 수
BINARY_DOUBLE
# 64bit 부동 소수점 수
#### STRING ####
CHAR(n) #길이 n개 고정. (n개에서 빈 만큼 공백으로 다 채워버림)
VARCHAR2(n) #길이 n개 까지의 가변 길이
#### DATE ####
DATE
# year, month, day, hour, minute, second 까지
# BC 4712-01-01 ~ 9999-12-31
# 더 많이 씀
TIMESTAMP
# year, month, day, hour, minute, second, milisecond
#### Number ####
BIT
TINYINT #1byte
SMALLINT #2byte
INT #4byte
BIGINT #8byte
FLOAT(n)
# if 1<=n<=24 n= 24; else if 25<=n<=53, n=53
REAl
# FLOAT(24)랑 같음
DECIMAL(P, S) #Oracle의 NUMBER(P, S)랑 비슷
NUMERIC(P, S) #위와 동일
#### STRING ####
CHAR(n) #고정길이 (n) 문자형
VARCHAR(n) #가변길이(<=n) 문자형
#### DATETIME ####
DATETIME
SMALLDATETIME
CREATE TABLE table_name (
column_name1 data_type [constraint],
column_name2 data_type,
CONSTRAINT constraint_name contraint_type(columns)
);
(1) table_name
(2) column_name
(3) 제약조건(Constraint)
#add column
ALTER TABLE table ADD(new_column_name data_type); #oracle
ALTER TABLE table ADD new_column_name data_type; #mssql
#delete column
ALTER TABLE table DROP COLUMN column;
#change constraint, data type
## oracle
ALTER TABLE table MODIFY (column data_type constraint, ...);
## mssql
ALTER TABLE table ALTER (column data_type constraint, ...);
/*
주의점
- 칼럼의 범위를 늘릴 수 있지만 줄일 수는 없음
- 예외: row가 없거나 field값이 null만 있을 경우
- null값만 가지고 있으면 data type 변경 가능
- default값을 변경하면 그 이후에 발생하는 row만 적용
- 해당 column에 null이 있으면 NOT NULL 불가
*/
#change column name
## Oracle
ALTER TABLE table RENAME COLUMN column TO new_name;
## mssql
SP_RENAME column, new_name, 'COLUMN';
SP_RENAME table.column, new_name;
#delete contrains
ALTER TABLE table DROP CONSTRAINT constraint_name
#add constraint (if column haven't constraint)
ALTER TABLE table ADD CONSTRAINT constraint_name
RENAME TABLE table_name TO new_name;
SP_RENAME table_name, new_name;
#table 삭제
DROP TABLE table
#table record 삭제
TRUNCATE TABLE table;
: Data Manipulation Language; table의 data를 입력, 수정, 삭제, 조회하는 명령어
#row 추가. 각 column에 해당하는 value가 들어간다.
INSERT INTO table (columns) VALUES (values);
#condition에 해당하는 record의 field값이 value로 변경 ※ condtion이 없으면 다 변경
UPDATE table SET column=value WHERE condition;
# condition에 해당하는 record를 제거한다.
DELETE [FROM] table WHERE condtion;
어떤 목차보다 자신있어서 설명 안함 어짜피 시험 끝나면 이 포스트 삭제할거임 ㅋ
Wildcard
*, % : all
_ : one
Concat
'str1 ' || 'str2 ' || 'str3' #oracle
'str1 ' + 'str2 ' + 'str3' #mssql
#>>> 'str1 str2 str3'
: Transaction Control Language
: 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작
(대충 내가 이해한 대로 말해보자면 DML을 통해서 데이터를 편집하면 바로 적용이 되는게 아니라 따로 저장이 되는데 그 따로 저장되는 걸 말하는 거 같음. git인데 한번 COMMIT하면 그 전 버전들은 모두 날라가는거 생각하면 편할 듯. 아니면 save 눌러야 저장할 수 있는 게임은 save안누르고 종료하면 그냥 데이터 날라가는데 이 때 아직 save 안한 게 Transaction이라 생각해도 될듯)
특성
원자성(atomicity): Transaction에 있는 연산이 모두 성공적으로 실행되던지 다 안되던지
일관성(consistency): Transaction 실행 전에 데이터에 이상이 없다면 실행 후에도 없어야 함.
고립성(isolation): Transaction 실행 도중에 다른 Transaction의 영향을 받아 잘못된 결과 만드면 안됨
지속성(durability): Transaction이 성공적으로 수행되면
Oracle
AUTO COMMIT이 옵션이다.
mssql
기본적으로 AUTO COMMIT이라 명령어를 Transaction에 넣으려면
BEGIN TRAN ~ ;
BEGIN TRANSACTION ~
를 적고 MDL을 실행해야 한다.
DML을 통해 편집된 data들에 문제가 발생하지 않는다고 판단했을 때 확정짓는 명령어.
확정하면 그 이전 데이터로 돌아갈 수 없음
COMMIT [TRANSACTION]
※ mssql은 AUTO COMMIT이라 명령어가 성공하면 COMMIT되고 실패하면 ROLLBACK함
: Transaction 없애기
게임으로 치면 save 안하고 그냥 종료하기 같은거
ROLLBACK [TRANSACTION]
: 이미 COMMIT 된 부분부터 Transaction부분 중에서 ROLLBACK 했을 때 돌아갈 지점 정하는거
※ 일부 tool에서는 지원 X
SAVEPOINT save_point_name; #Oracle
SAVE TRANSACTION save_point; #mssql
SAVE TRAN save_point; #mssql
#ROLLBACK할 떄
ROLLBACK TO save_point; #oracle
ROLLBACK TRANSACTION save_point; #mssql
ROLLBACK TRAN save_point; #mssql
※ COMMIT 하기 전에 DDL 실행하면 Transaction 전으로 자동 COMMIT
※ ''는 Oracle과 mssql이 같다는 것
분류 | Oracle | mssql | 의미 or 예시 |
---|---|---|---|
STRING | LOWER(str) | '' | 대문자->소문자 |
UPPER(str) | '' | 소문자->대문자 | |
ASCII(str) | '' | 문자->ASCII code | |
CHR(ASCII code) | CHAR(ASCII code) | ASCII code -> 문자 | |
CONCAT(str1, str2) | '' | 문자열 붙이기 | |
SUBSTR(str, n, m) | SUBSTRING(str, n, m) | str n번째 문자부터 m글자 추출(m 생략시 끝까지) | |
LENGTH(str) | LEN(str) | 문자열 길이 | |
LTRIM(str[, c]) | '' | 왼쪽부터 연속되는 c(default=' ') 제거 | |
RTRIM(str[, c]) | '' | LTRIM 반대 방향으로 | |
TRIM(str |
EQUI JOIN
SELECT table1.columns, table2.columns FROM table1, table2 WHERE table1.fk=table.pk
NONEQUI JOIN
pk fk가 아니라 범위나 부등식으로 조건 따져서 JOIN하는거
: Data Control Language
https://dataonair.or.kr/db-tech-reference/d-guide/sql/
https://selgii.tistory.com/44