PostgreSQL 제약조건 실습 — NOT NULL, DEFAULT, CHECK, PK, FK
이번 실습에서는 제약조건을 이해한 후에 실제로 테이블에 제약조건을 설정했을 때, 그 조건이 잘 수반되는지 실습해보는 시간이다.
대상 제약조건 노트를 읽었고, PostgreSQL 기본 문법(CREATE TABLE, INSERT, SELECT)을 아는 학생
목표 도메인, 체크, 엔티티, 관계 제약을 PostgreSQL 에서 순서대로 적용하고 에러 메시지를 확인한다
완성물
categories_N,menus_N테이블에 모든 제약을 적용하고, 유효/무효 데이터로 검증한 뒤 테이블을 삭제한 상태
주의 ) 현재 DBMS PostgreSQL 하나의 인스턴스에 여러명이 접속해서 사용하는 경우, 실습을 위해 생성하는 테이블 이름에 각자 다른 일련번호(예: 1, 2, 3)를 붙여서 생성해야 한다. 아래 예제에서는 테이블명_1 은 각자의 식별 변호라고 가정한다.
STEP 1 / 13제약 없는 테이블 생성과 기본 데이터 입력
0개 완료 · 13개 남음
가장 먼저 아무 제약도 없는 테이블을 만들고 데이터를 넣는다. 이 상태가 "문제 발견"의 기준선이 된다.
1-1. categories_1 테이블 생성
파일:
sql/01_create_categories.sqlCREATE TABLE categories_1 ( id INTEGER, name VARCHAR(50), slug VARCHAR(50), created_at TIMESTAMP );1-2. menus_1 테이블 생성
파일:
sql/02_create_menus.sqlCREATE TABLE menus_1 ( id INTEGER, name VARCHAR(50), price INTEGER, status VARCHAR(10), category_id INTEGER, created_at TIMESTAMP );1-3. 초기 데이터 입력
파일:
sql/03_insert_initial.sqlINSERT INTO categories_1 (id, name, slug, created_at) VALUES (1, 'Coffee', 'coffee', NOW()), (2, 'Tea', 'tea', NOW()); INSERT INTO menus_1 (id, name, price, status, category_id, created_at) VALUES (1, 'Americano', 4000, 'on', 1, NOW()), (2, 'Green Tea', 3000, 'on', 2, NOW());1-4. 데이터 확인
파일:
sql/04_select_initial.sqlSELECT * FROM categories_1; SELECT * FROM menus_1;✅ 확인
categories_1에 2행,menus_1에 2행이 보인다.- 모든 컬럼에 값이 들어 있다.
🎓 newlec 쌤의 코멘트
이 단계의 테이블은 "빈 캔버스"다. 아직 어떤 규칙도 없다. 다음 단계에서 이 빈 캔버스에 문제를 의도적으로 만들어 본다. 실무에서는 이렇게 제약 없는 테이블을 만들지 않지만, 학습을 위해 "제약이 없으면 무엇이 깨지는가"를 먼저 보여주는 것이 중요하다.
❌ 자주 하는 실수
증상 원인 해결 relation "categories_1" already exists이전 실행 잔재 DROP TABLE IF EXISTS categories_1, menus_1;후 재시도📝 이 단계의 핵심
- 제약 없는 테이블은 모든 값, NULL 포함, 허용한다.
NOW()는 현재 시각을 반환하는 PostgreSQL 함수다.