테이블 간의 관계
데이터베이스 설계 시 테이블 간의 관계를 정확히 파악하는 것은 매우 중요합니다. 일반적으로 다음과 같은 세 가지 주요 관계 유형이 존재합니다.
- 일대다(N:1): 직원과 부서의 예시에서 여러 명의 직원이 하나의 부서에 속할 수 있습니다. 외래키는 항상 '다' 측에 위치해야 합니다.
- 다대다(N:M): 책과 저자의 관계처럼 한 권의 책에 여러 저자가 참여할 수 있고, 한 저자가 여러 책을 집필할 수도 있습니다. 이 경우 두 테이블의 ID를 외래키로 갖는 별도의 연결 테이블이 필요합니다.
- 일대일(1:1): 고객과 학생 정보처럼 한 고객이 등록 후 한 명의 학생 데이터만 생성되는 경우입니다. 외래키 설정 후 UNIQUE 제약 조건을 추가하여 관계를 보장합니다.
관계 분석 절차
-- 관계 분석 방법:
-- 1. 왼쪽 테이블 기준으로 오른쪽 테이블의 레코드와 매칭 가능성 확인
-- 2. 오른쪽 테이블 기준으로 왼쪽 테이블의 레코드와 매칭 가능성 확인
-- 3. 결과에 따라 관계 유형 판단
테이블 구조 수정
프로젝트 초기 설계 단계나 운영 중에도 테이블 구조 변경이 필요할 수 있습니다. ALTER TABLE 문을 사용하여 다양한 방식으로 테이블을 수정할 수 있습니다.
기본 문법 예제
-- 테이블 이름 변경
ALTER TABLE old_table_name RENAME TO new_table_name;
-- 컬럼 추가
ALTER TABLE users ADD COLUMN email VARCHAR(50) UNIQUE AFTER username;
-- 컬럼 삭제
ALTER TABLE users DROP COLUMN temp_field;
-- 컬럼 타입 및 제약조건 변경
ALTER TABLE users MODIFY COLUMN age TINYINT UNSIGNED NOT NULL;
-- 컬럼 이름 및 속성 동시 변경
ALTER TABLE users CHANGE COLUMN full_name user_fullname VARCHAR(100) NOT NULL;
-- 컬럼 순서 조정
ALTER TABLE products MODIFY COLUMN price DECIMAL(10,2) FIRST;
ALTER TABLE orders MODIFY COLUMN status VARCHAR(20) AFTER order_date;
-- NOT NULL 제약 해제
ALTER TABLE members MODIFY COLUMN nickname VARCHAR(30) NULL;
-- UNIQUE 제약 추가
ALTER TABLE categories MODIFY COLUMN category_code VARCHAR(10) UNIQUE;
-- 인덱스 제거 (UNIQUE 제약 해제)
ALTER TABLE items DROP INDEX item_sku;
-- 테이블 전체 삭제
DROP TABLE IF EXISTS temporary_data;
위의 명령어들을 통해 테이블의 필드명, 데이터 타입, 제약 조건, 필드 순서 등을 유연하게 조절할 수 있으며, 실제 운영 환경에서도 안정적인 스키마 변경이 가능합니다.