티스토리 뷰
1️⃣ 제약조건
테이블에 잘못된 데이터가 입력되는 것을 방지하기 위한 규칙
→ 제약 조건을 통해 무결성을 지킬 수 있다.
NOT NULL, UNIQUE, DEFAULT, CHECK, PRIMARY KEY, FOREIGN KEY 등
NOT NULL
널(NULL) 값 비허용
- 데이터를 입력하지 않으면 에러가 발생한다.
- 아무것도 명시하지 않는 경우 기본 값은 NULL값을 허용한다.
CREATE TABLE customer(
id VARCHAR(10),
name VARCHAR(10) NOT NULL
);
INSERT INTO customer (id, name) VALUES('kmax6', '김민준');
INSERT INTO customer (name) VALUES('이서연');
-- 에러 발생
-- INSERT INTO customer (id) VALUES('kmax6);
UNIQUE
중복되는 값 비허용
- 똑같은 값이 있으면 에러가 발생한다.
- NULL 값은 비교가 불가능하여 중복되어도 에러가 발생하지 않는다.
CREATE TABLE customer(
id VARCHAR(10) UNIQUE,
name VARCHAR(10) NOT NULL
);
INSERT INTO customer (id, name) VALUES('kmax6', '김민준');
INSERT INTO customer (name) VALUES('최지훈');
INSERT INTO customer (name) VALUES('이민호');
-- 에러 발생
INSERT INTO customer (id, name) VALUES('kmax6', '이서연');
DEFAULT
기본값 설정
- 아무런 값을 지정하지 않으면 DEFAULT 값으로 설정된다.
CREATE TABLE customer(
id VARCHAR(10) UNIQUE,
name VARCHAR(10) NOT NULL,
address VARCHAR(30) DEFAULT 'No Address'
);
-- address가 'No Address'로 설정된다.
INSERT INTO customer (id, name) VALUES('kmax6', '김민준');
-- address가 '서울시 동작구 대방동'으로 설정된다.
INSERT INTO customer VALUES('flykite', '이서연', '서울시 동작구 대방동');
CHECK
값의 범위를 제한하여 특정 값만 허용
- 제한한 값이 아닌 경우 에러가 발생한다.
CREATE TABLE customer(
id VARCHAR(10) UNIQUE,
name VARCHAR(10) NOT NULL,
address VARCHAR(30) DEFAULT 'No Address',
age INT CHECK (age >= 19)
);
제약 조건 정의(CONSTRAINT)
CREATE TABLE customer(
id VARCHAR(10),
age INT,
CONSTRAINT id_unique UNIQUE (id),
CONSTRAINT age_check CHECK (age >= 19)
);
제약 조건 이름 정의하기
CONSTRAINT 제약조건이름 제약조건[UNIQUE, CHECK, ...] (적용할 속성);
💡 단, NOT NULL과 DEFAULT는 CONSTRAINT를 사용하여 정의할 수 없다.
생성된 제약 조건 확인하기
SELECT * FROM information_schema.table_constraints;
제약 조건 추가
ALTER TABLE customer
ADD CONSTRAINT address_unique UNIQUE (address);
ALTER TABLE customer
ADD CONSTRAINT customer_chk_2 CHECK (age >= 19 AND name='김민준');
ALTER TABLE customer
ALTER address SET DEFAULT '주소없음';
제약 조건 추가하기
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건이름 제약조건(속성);
DEFAULT 제약 조건 수정하기
ALTER TABLE 테이블명 ALTER 속성 SET DEFAULT 기본값;
제약 조건 삭제
ALTER TABLE customer DROP CONSTRAINT customer_chk_2;
ALTER TABLE customer
ALTER address DROP DEFAULT;
제약 조건 삭제하기
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;
DEFAULT 제약 조건 삭제하기
ALTER TABLE 테이블명 ALTER 속성 DROP DEFAULT
2️⃣ 키 (Key)
조건에 만족하는 튜플을 찾거나, 정렬할 때 기준이 되는 속성
- key의 종류 : 기본키, 외래키, 후보키, 대체키, 슈퍼키
기본키 (Primary Key)
서로 다른 튜플을 유일하게 식별할 수 있는 기준이 되는 속성
- 중복되는 값을 가질 수 없다.
- 널(null) 값을 가질 수 없다.
- 테이블 당 1개만 설정 가능하다. (속성 2개를 묶어서 기본키로 설정도 가능)
외래키 (Foreign Key)
다른 테이블의 기본키를 참조하는 속성
- 테이블의 관계를 정의한다.
- 참조되는 테이블의 기본키에 없는 값은 지정할 수 없다.
슈퍼키
: 튜플을 식별할 수 있는 유일성은 만족하지만 최소성은 만족하지 않는 키
후보키
: 기본키가 될 수 있는 키로 유일성과 최소성을 만족 (기본키 ⊂ 후보키)
대체키
: 후보키 중에 기본키가 아닌 키 (대체키⊂ 후보키)
💡 무결성 제약 조건
- 개체 무결성 : 기본키는 널 값과 중복된 값을 가질 수 없다. (NOT NULL + UNIQUE)
- 참조 무결성 : 외래키는 널이거나 참조되는 릴레이션의 기본키 값과 동일하다.
- 도메인 무결성 : 특정 속성값은 그 속성이 정의된 도메인에 속한 값이어야 한다.
- NULL 무결성 : 특정 속성값은 널 값을 가질 수 없다.
- 고유 무결성 : 각 튜플이 가지는 속성값들은 서로 달라야 한다.
- 키 무결성 : 테이블에 최소 한 개 이상의 키 존재한다.
3️⃣ 데이터 모델링
현실 세계에 존재하는 데이터를 데이터베이스화하는 과정
데이터 모델
현실 세계의 데이터를 단순화, 추상화하여 표현한 모델
- 데이터 모델의 구성요소는 개체, 속성, 관계
개체(Entity)
: 데이터로 표현하고자 하는 현실 세계의 개념이나 정보의 단위
ex) 킥보드, 회원
속성(Attribute)
: 개체에 대한 정보
ex) 킥보드의 브랜드/이용 가격, 회원의 아이디/이름
관계(Relationship)
: 개체 간의 연관성
ex) 고객은 킥보드를 대여한다
데이터 모델링 과정
- 개념적 설계 : 현실 세계를 추상적 개념으로 표현하는 과정 → 도식화
- 논리적 설계 : DBMS가 처리할 수 있는 데이터 구조(스키마)를 설계
- 물리적 설계 : DBMS에 테이블을 저장할 구조를 설계
4️⃣ ERD, Entity-Relationship Diagram (개체-관계 다이어그램)
현실 세계의 데이터를 개체와 관계 형태의 다이어그램으로 나타내는 것
- 대표적인 표기법으로는 Peter Chen 표기법, IE 표기법이 있다.
1. Peter Chen 표기법
기호 | 의미 |
개체 | |
속성 | |
관계 | |
개체와 속성의 연결 | |
기본키 |
관계 추가하기
- 하나의 데이터가 다른 테이블의 몇 개의 데이터와 관계를 가지는지 나타낸다.
- N : M 관계는 테이블로 표기하며 각 개체의 기본키를 외래키로 가진다.
기호 | 의미 |
1 : 1 관계 | |
1 : N 관계 | |
N : M 관계 |
2. IE 표기법 (Information Engineering)
- 표 형태로 표기하여 가장 상단의 테이블명을 표기한다.
- 키를 나타내며 데이터 타입과 제약 조건도 표기한다.
- 관계를 세부적으로 나타낸다.
까마귀발 표기법 (관계표현)
기호 | 의미 |
0 또는 1 | |
정확히 1 | |
0 이상 | |
1 이상 |
이 글은 엘리스의 AI트랙 5기 강의를 들으며 정리한 내용입니다.
'개발공부 > 🧺 DBMS' 카테고리의 다른 글
[DB] 데이터 모델링 (0) | 2022.09.19 |
---|---|
[DB] 데이터베이스란 무엇인가? (0) | 2022.09.16 |
프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그