정규화
08/28
프로세스, 스레드
- 프로세스: 독자적 실행 가능
- 스레드: 독자적 존재 불가
용어
튜플, row, record, 행 (행과 행이 구별이 되야)
attribute - column, field, 속성, 열
카디널리티: 행의개수, 두개의테이블에서: 서로 대응되는 수
논리적모델: 물리적모델과 개념적모델중간, 개발자와 사용자 둘다 이해 가능
개념적모델: 사용자가 이해가능
정규화
- 함수적 종속: 어떤 컬럼으로 다른컬럼을 특정할 수 있는 것
- 부분함수적 종속: 기본키가 두개 이상의 컬럼으로 구성된 경우 어느 하나만으로 다른컬럼을 구분해 낼 때
- 이행적함수적 종속: A가 B 종속하고 B가 C 종속 시 A가 C 종속
- shared lock, exclusive lock
복원/복구
- 로그기록: 작업내역 기록 (부분적 복구 가능) 복원느림
- 스냅샷기록: 값을 기록, 여러값 기억 필요, 부분 복구 느림 ex)통장
자료형
CHAR: char(10)일 때 5글자 할당 시 나머지 5칸 그대로 유지 ex)자주 바뀌는 변수
VARCHAR: varchar(10)일때 5글자 할당 시 나머지 5글자 반납, 비효율적, 5글자로 줄었을 때 수정 시 다시 할당해야 -> row migration 가능성
ex) 자주 바꾸지 않는 변수, ID, 휴대폰번호char 불러올 때 trim 필요
blob, text는 인덱스 설정 불가
배열 만들 시 비교 가능한 원소
table구조변경: ALTER
- 컬럼추가
ALTER TABLE 테이블이름 ADD 컬럼이름 자료형 제약조건;
- 컬럼삭제
ALTER TABLE 테이블이름 DROP 컬럼이름;
컬럼의 이름과 자료형 변경 ALTER TABLE 테이블이름 CHANGE 컬럼이름 새로운컬럼이름 자료형;
컬럼의 자료형 변경 ALTER TABLE 테이블이름 MODIFY 컬럼이름 자료형;
컬럼의 위치 변경 ALTER TABLE 테이블이름 MODIFY COLUMN 컬럼이름 자료형 FIRST(AFTER 다른컬럼이름);
테이블 이름 수정 ALTER TABLE 기존테이블이름 rename 새로운이름;
확인: 테이블의 구조를 확인하는 desc 명령
contact 테이블에 age 칼럼을 정수로 추가
alter table contact add age int;
테이블 삭제
DROP TABLE 테이블이름;
- 테이블의 데이터삭제
TRUNCATE TABLE 테이블이름;
테이블의 구조는 남음
테이블을 삭제할 때는 문법에 맞게 작성하고 테이블이 존재해도 실패하는 경우.
외래키가 설정된 테이블을 삭제할 때 외래키 옵션이 없는 경우
이런 경우에는 부모테이블을 삭제하고 자식 테이블을 삭제
외래키를 설정할 때 되도록이면 삭제에 관련된 옵션은 설정을 하는 것이 좋음
테이블을 압축해서 생성
- CREATE TABLE을 수행할 때 마지막에 ROW_FORMAT=COMPRESSED 옵션을 추가
제약조건 설정
1. 종류: NOT NULL 필수입력
UNIQUE: 중복된 값X
PRIMARY KEY: NOT NULL하고 UNIQUE인데 테이블에 1개만 설정 가능
CHECK제약 조건: 값의 범위나 종류를 설정
FOREIGN KEY: 외래키 설정
제약조건은 아니지만 컬럼을 설정할 때 사용할 수 있는 옵션
DEFAULT : 기본값 설정
AUTO_INCREMENT: 1번만 설정가능
DB에서 NULL이 가능한 경우 1바이트를 추가 할당해서 NULL여부 표현
name char(10) -> 11바이트
name char(10) NOT NULL
ASCII코드0이 NULL
컬럼제약조건과 테이블제약조건
- 컬럼제약조건은 컬럼을 만들 때 제약 조건을 설정하는 것이고
- 테이블 제약 조건은 컬럼을 만들어두고 제약 조건을 설정하는 것
컬럼이름 자료형 [constraint 이름] 제약조건
...
[constraint 이름] 제약조건(컬럼이름)
- NOT NULL은 컬럼 제약조건으로만 가능