거리두기 해제와 다시 해외여행이 가속화 되는 시점에 맞춰 여행 일정표 DB설계를 도전해봤다.
1. 요구 사항 분석
요구사항을 분석하는 단계에서는 데이터베이스의 사용 용도를 파악한다. 데이터베이스를 실제로 사용하는 사용자에게 필요한 데이터의 종류와 처리 방법같은 다양한 요구 사항을 수집하고 분석하여 요구 사항 명세서로 작성하는 것이 주요 작업이다.
요구 사항 분석 단계에서 사용자의 요구 사항은 이후의 설계 단계에서 중요하게 사용되며 데이터베이스의 품질의 중요한 기준이 된다.
👨👨👧👦 회원 (Users)
- 한명의 회원은 카카오톡 싱크를 통해 회원가입을 할 수 있다.
- 한명의 회원은 여러개의 일정표를 만들 수 있다.
- 한명의 회원은 제작한 일정표를 공유할 수 있다.
📄 일정표 (Schedules)
- 한개의 일정표에는 여러 개의 루트를 생성, 수정, 삭제할 수 있다.
- 한개의 일정표에는 여러 개의 체크리스트를 생성, 수정, 삭제할 수 있다.
- 한개의 일정표에는 여러 개의 가계부를 생성, 수정, 삭제할 수 있다.
- 한개의 일정표에는 여러 개의 사진을 생성, 수정, 삭제할 수 있다.
- 한개의 일정표에는 여러 명의 회원이 관리할 수 있다.
2. 개념적 설계
개념적 설계 단계는 1단계인 요구 사항 분석단계의 요구 사항 명세서를 가지고 사용자의 개념적 데이터 모델을 이용해 표현한다. 개념적 데이터 모델은 개발에 사용하는 DBMS의 종류에 독립적이면서 중요한 데이터 요소들의 관계를 표현할 때 사용된다.
일반적으로 E-R 모델을 개념적 데이터 모델로 많이 사용하는데, 중요한 데이터 요소들의 관계를 E-R 다이어그램으로 표현한다.
3. 논리적 설계
논리적 설계 단계에서는 개발에 사용되는 DBMS에 적합한 논리적 데이터 모델을 이용한다. 개념적 설계 단계에서 생성한 개념적 구조를 기반으로 논리적 구조를 설계한다.
4. 물리적 설계
물리적 설계 단계에서는 논리적 설계 단계에서 생성된 논리적 구조를 기반으로 물리적 구조를 설계한다. 데이터베이스의 물리적 구조는 데이터베이스를 저장 장치에 실제로 저장하기 위한 내부 저장 구조와 접근 경로 등을 의미한다. 그러므로 물리적 설계 단계에서는 저장 장치에 적합한 저장 레코드와 인덱스의 구조 등을 설계하고, 저장된 데이터와 인덱스에 빠르게 접근하게 할 수 있는 탐색 기법 등을 정의한다.
5. 특정 DBMS의 DDL로 데이터베이스 생성
데이터베이스 구현 단계에서는 이전 설계 단계의 결과물을 기반으로 DBMS에서 SQL로 작성한 명령문을 실행하여 데이터베이스를 실제로 생성한다. 이때 사용되는 SQL 문은 테이블이나 인덱스 등을 생성할 때 사용되는 데이터 정의어(DDL)다.
-- 회원
CREATE TABLE users (
user_id INT NOT NULL, -- 회원ID
user_kind CHAR(4) NOT NULL, -- 회원구분
login_id VARCHAR(45) NOT NULL, -- 로그인ID
name VARCHAR(50) NOT NULL, -- 이름
nick_name VARCHAR(50) NULL, -- 닉네임
email VARCHAR(40) NULL, -- 이메일
phone VARCHAR(30) NOT NULL, -- 전화번호
sex CHAR(4) NULL, -- 성별
profile_image VARCHAR(255) NULL, -- 프로필이미지
recommend_user_id INT NULL, -- 추천회원ID
join_kind CHAR(4) NOT NULL, -- 가입종류
join_date DATETIME NOT NULL, -- 가입일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 회원 기본키
CREATE UNIQUE INDEX PK_users
ON users ( -- 회원
user_id ASC -- 회원ID
);
-- 회원
ALTER TABLE users
ADD
CONSTRAINT PK_users -- 회원 기본키
PRIMARY KEY (
user_id -- 회원ID
);
-- 회원
COMMENT ON TABLE users IS '회원';
-- 회원ID
COMMENT ON COLUMN users.user_id IS '회원ID';
-- 회원구분
COMMENT ON COLUMN users.user_kind IS '회원구분';
-- 로그인ID
COMMENT ON COLUMN users.login_id IS '로그인ID';
-- 이름
COMMENT ON COLUMN users.name IS '이름';
-- 닉네임
COMMENT ON COLUMN users.nick_name IS '닉네임';
-- 이메일
COMMENT ON COLUMN users.email IS '이메일';
-- 전화번호
COMMENT ON COLUMN users.phone IS '전화번호';
-- 성별
COMMENT ON COLUMN users.sex IS '성별';
-- 프로필이미지
COMMENT ON COLUMN users.profile_image IS '프로필이미지';
-- 추천회원ID
COMMENT ON COLUMN users.recommend_user_id IS '추천회원ID';
-- 가입종류
COMMENT ON COLUMN users.join_kind IS '가입종류';
-- 가입일시
COMMENT ON COLUMN users.join_date IS '가입일시';
-- 수정일시
COMMENT ON COLUMN users.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN users.delete_date IS '삭제일시';
-- 회원 기본키
COMMENT ON INDEX PK_users IS '회원 기본키';
-- 회원 기본키
COMMENT ON CONSTRAINT users.PK_users IS '회원 기본키';
-- 검색어
CREATE TABLE search_keyword (
search_id INT NOT NULL, -- 검색키워드ID
user_id INT NOT NULL DEFAULT 0, -- 회원ID
search_keyword VARCHAR(100) NOT NULL DEFAULT '', -- 검색어
create_date DATETIME NULL, -- 등록일시
delete_date DATETIME NULL -- 삭제일시
);
-- 검색어 기본키
CREATE UNIQUE INDEX PK_search_keyword
ON search_keyword ( -- 검색어
search_id ASC -- 검색키워드ID
);
-- 검색어
ALTER TABLE search_keyword
ADD
CONSTRAINT PK_search_keyword -- 검색어 기본키
PRIMARY KEY (
search_id -- 검색키워드ID
);
-- 검색어
COMMENT ON TABLE search_keyword IS '검색어';
-- 검색키워드ID
COMMENT ON COLUMN search_keyword.search_id IS '검색키워드ID';
-- 회원ID
COMMENT ON COLUMN search_keyword.user_id IS '회원ID';
-- 검색어
COMMENT ON COLUMN search_keyword.search_keyword IS '검색어';
-- 등록일시
COMMENT ON COLUMN search_keyword.create_date IS '등록일시';
-- 삭제일시
COMMENT ON COLUMN search_keyword.delete_date IS '삭제일시';
-- 검색어 기본키
COMMENT ON INDEX PK_search_keyword IS '검색어 기본키';
-- 검색어 기본키
COMMENT ON CONSTRAINT search_keyword.PK_search_keyword IS '검색어 기본키';
-- 일정표
CREATE TABLE schedule (
schedule_id INT NOT NULL, -- 일정표ID
schedule_name VARCHAR(255) NULL, -- 일정표이름
trip_number INT NULL, -- 여행인원
departure_airport
VARCHAR(50) NULL, -- 출발공항
arrival_airport VARCHAR(50) NULL, -- 도착공항
trvl_start_date DATETIME NULL, -- 여행시작일시
trvl_end_date DATETIME NULL, -- 여행종료일시
country__name VARCHAR(50) NULL, -- 나라명
city_id INT NULL, -- 도시id
city__name VARCHAR(50) NULL, -- 도시명
main_image VARCHAR(255) NULL, -- 메인이미지
user_id INT NULL, -- 등록자ID
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 일정표 기본키
CREATE UNIQUE INDEX PK_schedule
ON schedule ( -- 일정표
schedule_id ASC -- 일정표ID
);
-- 일정표
ALTER TABLE schedule
ADD
CONSTRAINT PK_schedule -- 일정표 기본키
PRIMARY KEY (
schedule_id -- 일정표ID
);
-- 일정표
COMMENT ON TABLE schedule IS '일정표';
-- 일정표ID
COMMENT ON COLUMN schedule.schedule_id IS '일정표ID';
-- 일정표이름
COMMENT ON COLUMN schedule.schedule_name IS '일정표이름';
-- 여행인원
COMMENT ON COLUMN schedule.trip_number IS '여행인원';
-- 출발공항
COMMENT ON COLUMN schedule.departure_airport
IS '출발공항';
-- 도착공항
COMMENT ON COLUMN schedule.arrival_airport IS '도착공항';
-- 여행시작일시
COMMENT ON COLUMN schedule.trvl_start_date IS '여행시작일시';
-- 여행종료일시
COMMENT ON COLUMN schedule.trvl_end_date IS '여행종료일시';
-- 나라명
COMMENT ON COLUMN schedule.country__name IS '나라명';
-- 도시id
COMMENT ON COLUMN schedule.city_id IS '도시id';
-- 도시명
COMMENT ON COLUMN schedule.city__name IS '도시명';
-- 메인이미지
COMMENT ON COLUMN schedule.main_image IS '메인이미지';
-- 등록자ID
COMMENT ON COLUMN schedule.user_id IS '등록자ID';
-- 등록일시
COMMENT ON COLUMN schedule.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN schedule.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN schedule.delete_date IS '삭제일시';
-- 일정표 기본키
COMMENT ON INDEX PK_schedule IS '일정표 기본키';
-- 일정표 기본키
COMMENT ON CONSTRAINT schedule.PK_schedule IS '일정표 기본키';
-- 국가
CREATE TABLE country (
country_id INT NOT NULL, -- 국가id
ISO3 CHAR(3) NOT NULL, -- 국가코드
ISO2 CHAR(2) NULL, -- 국가코드2
kor_name VARCHAR(50) NULL, -- 한글명
eng_name VARCHAR(50) NULL, -- 영문명
capital VARCHAR(50) NULL, -- 수도
continent VARCHAR(50) NULL, -- 대륙
continent_code CHAR(3) NULL, -- 대륙코드
currency_code CHAR(3) NOT NULL, -- 화폐코드
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 국가 기본키
CREATE UNIQUE INDEX PK_country
ON country ( -- 국가
country_id ASC -- 국가id
);
-- 국가
ALTER TABLE country
ADD
CONSTRAINT PK_country -- 국가 기본키
PRIMARY KEY (
country_id -- 국가id
);
-- 국가
COMMENT ON TABLE country IS '국가';
-- 국가id
COMMENT ON COLUMN country.country_id IS '국가id';
-- 국가코드
COMMENT ON COLUMN country.ISO3 IS '국가코드';
-- 국가코드2
COMMENT ON COLUMN country.ISO2 IS '국가코드2';
-- 한글명
COMMENT ON COLUMN country.kor_name IS '한글명';
-- 영문명
COMMENT ON COLUMN country.eng_name IS '영문명';
-- 수도
COMMENT ON COLUMN country.capital IS '수도';
-- 대륙
COMMENT ON COLUMN country.continent IS '대륙';
-- 대륙코드
COMMENT ON COLUMN country.continent_code IS '대륙코드';
-- 화폐코드
COMMENT ON COLUMN country.currency_code IS '화폐코드';
-- 등록일시
COMMENT ON COLUMN country.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN country.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN country.delete_date IS '삭제일시';
-- 국가 기본키
COMMENT ON INDEX PK_country IS '국가 기본키';
-- 국가 기본키
COMMENT ON CONSTRAINT country.PK_country IS '국가 기본키';
-- 도시
CREATE TABLE city (
city_id INT NOT NULL, -- 도시id
country_id INT NULL, -- 국가id
city_eng_name VARCHAR(50) NULL, -- 도시영문명
city_kor_name VARCHAR(50) NULL, -- 도시한글명
city_code CHAR(3) NULL, -- 도시코드
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 도시 기본키
CREATE UNIQUE INDEX PK_city
ON city ( -- 도시
city_id ASC -- 도시id
);
-- 도시
ALTER TABLE city
ADD
CONSTRAINT PK_city -- 도시 기본키
PRIMARY KEY (
city_id -- 도시id
);
-- 도시
COMMENT ON TABLE city IS '도시';
-- 도시id
COMMENT ON COLUMN city.city_id IS '도시id';
-- 국가id
COMMENT ON COLUMN city.country_id IS '국가id';
-- 도시영문명
COMMENT ON COLUMN city.city_eng_name IS '도시영문명';
-- 도시한글명
COMMENT ON COLUMN city.city_kor_name IS '도시한글명';
-- 도시코드
COMMENT ON COLUMN city.city_code IS '도시코드';
-- 등록일시
COMMENT ON COLUMN city.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN city.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN city.delete_date IS '삭제일시';
-- 도시 기본키
COMMENT ON INDEX PK_city IS '도시 기본키';
-- 도시 기본키
COMMENT ON CONSTRAINT city.PK_city IS '도시 기본키';
-- 기본리스트
CREATE TABLE basic_list (
basic_list_id INT NOT NULL, -- 기본리스트ID
basic_list_name VARCHAR(255) NULL, -- 기본리스트명
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 기본리스트 기본키
CREATE UNIQUE INDEX PK_basic_list
ON basic_list ( -- 기본리스트
basic_list_id ASC -- 기본리스트ID
);
-- 기본리스트
ALTER TABLE basic_list
ADD
CONSTRAINT PK_basic_list -- 기본리스트 기본키
PRIMARY KEY (
basic_list_id -- 기본리스트ID
);
-- 기본리스트
COMMENT ON TABLE basic_list IS '기본리스트';
-- 기본리스트ID
COMMENT ON COLUMN basic_list.basic_list_id IS '기본리스트ID';
-- 기본리스트명
COMMENT ON COLUMN basic_list.basic_list_name IS '기본리스트명';
-- 등록일시
COMMENT ON COLUMN basic_list.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN basic_list.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN basic_list.delete_date IS '삭제일시';
-- 기본리스트 기본키
COMMENT ON INDEX PK_basic_list IS '기본리스트 기본키';
-- 기본리스트 기본키
COMMENT ON CONSTRAINT basic_list.PK_basic_list IS '기본리스트 기본키';
-- 체크리스트
CREATE TABLE basic_check_list (
check_list_id INT NOT NULL, -- 체크리스트ID
schedule_id INT NULL, -- 일정표ID
basic_list_id INT NULL, -- 기본리스트ID
check_list_name VARCHAR(255) NULL, -- 체크리스트명
checked INT NULL, -- 체크여부
user_id INT NULL, -- 등록자ID
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 체크리스트 기본키
CREATE UNIQUE INDEX PK_basic_check_list
ON basic_check_list ( -- 체크리스트
check_list_id ASC -- 체크리스트ID
);
-- 체크리스트
ALTER TABLE basic_check_list
ADD
CONSTRAINT PK_basic_check_list -- 체크리스트 기본키
PRIMARY KEY (
check_list_id -- 체크리스트ID
);
-- 체크리스트
COMMENT ON TABLE basic_check_list IS '체크리스트';
-- 체크리스트ID
COMMENT ON COLUMN basic_check_list.check_list_id IS '체크리스트ID';
-- 일정표ID
COMMENT ON COLUMN basic_check_list.schedule_id IS '일정표ID';
-- 기본리스트ID
COMMENT ON COLUMN basic_check_list.basic_list_id IS '기본리스트ID';
-- 체크리스트명
COMMENT ON COLUMN basic_check_list.check_list_name IS '체크리스트명';
-- 체크여부
COMMENT ON COLUMN basic_check_list.checked IS '체크여부';
-- 등록자ID
COMMENT ON COLUMN basic_check_list.user_id IS '등록자ID';
-- 등록일시
COMMENT ON COLUMN basic_check_list.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN basic_check_list.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN basic_check_list.delete_date IS '삭제일시';
-- 체크리스트 기본키
COMMENT ON INDEX PK_basic_check_list IS '체크리스트 기본키';
-- 체크리스트 기본키
COMMENT ON CONSTRAINT basic_check_list.PK_basic_check_list IS '체크리스트 기본키';
-- 가계부
CREATE TABLE account_book (
account_book_id INT NOT NULL, -- 가계부id
schedule_id INT NULL, -- 일정표ID
use_kind_id INT NULL, -- 사용종류ID
amount INT NULL, -- 금액
user_id INT NULL, -- 등록자ID
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 가계부 기본키
CREATE UNIQUE INDEX PK_account_book
ON account_book ( -- 가계부
account_book_id ASC -- 가계부id
);
-- 가계부
ALTER TABLE account_book
ADD
CONSTRAINT PK_account_book -- 가계부 기본키
PRIMARY KEY (
account_book_id -- 가계부id
);
-- 가계부
COMMENT ON TABLE account_book IS '가계부';
-- 가계부id
COMMENT ON COLUMN account_book.account_book_id IS '가계부id';
-- 일정표ID
COMMENT ON COLUMN account_book.schedule_id IS '일정표ID';
-- 사용종류ID
COMMENT ON COLUMN account_book.use_kind_id IS '사용종류ID';
-- 금액
COMMENT ON COLUMN account_book.amount IS '금액';
-- 등록자ID
COMMENT ON COLUMN account_book.user_id IS '등록자ID';
-- 등록일시
COMMENT ON COLUMN account_book.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN account_book.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN account_book.delete_date IS '삭제일시';
-- 가계부 기본키
COMMENT ON INDEX PK_account_book IS '가계부 기본키';
-- 가계부 기본키
COMMENT ON CONSTRAINT account_book.PK_account_book IS '가계부 기본키';
-- 공통코드
CREATE TABLE common_code (
sys_se VARCHAR(255) NULL, -- 시스템구분
code_grp VARCHAR(255) NULL, -- 코드그룹
code_grp_nm VARCHAR(255) NULL, -- 코드그룹명
code INT NULL, -- 코드
code_nm VARCHAR(255) NULL, -- 코드명
cd_dtl VARCHAR(100) NULL, -- 코드상세
etc VARCHAR(2000) NULL -- 비고
);
-- 공통코드
COMMENT ON TABLE common_code IS '공통코드';
-- 시스템구분
COMMENT ON COLUMN common_code.sys_se IS '시스템구분';
-- 코드그룹
COMMENT ON COLUMN common_code.code_grp IS '코드그룹';
-- 코드그룹명
COMMENT ON COLUMN common_code.code_grp_nm IS '코드그룹명';
-- 코드
COMMENT ON COLUMN common_code.code IS '코드';
-- 코드명
COMMENT ON COLUMN common_code.code_nm IS '코드명';
-- 코드상세
COMMENT ON COLUMN common_code.cd_dtl IS '코드상세';
-- 비고
COMMENT ON COLUMN common_code.etc IS '비고';
-- 약관
CREATE TABLE terms (
terms_id INT NOT NULL, -- 약관ID
user_id INT NULL, -- 회원ID
required_at CHAR(4) NULL, -- 필수여부
title VARCHAR(255) NULL, -- 약관제목
contents TEXT NULL, -- 약관내용
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 약관 기본키
CREATE UNIQUE INDEX PK_terms
ON terms ( -- 약관
terms_id ASC -- 약관ID
);
-- 약관
ALTER TABLE terms
ADD
CONSTRAINT PK_terms -- 약관 기본키
PRIMARY KEY (
terms_id -- 약관ID
);
-- 약관
COMMENT ON TABLE terms IS '약관';
-- 약관ID
COMMENT ON COLUMN terms.terms_id IS '약관ID';
-- 회원ID
COMMENT ON COLUMN terms.user_id IS '회원ID';
-- 필수여부
COMMENT ON COLUMN terms.required_at IS '필수여부';
-- 약관제목
COMMENT ON COLUMN terms.title IS '약관제목';
-- 약관내용
COMMENT ON COLUMN terms.contents IS '약관내용';
-- 등록일시
COMMENT ON COLUMN terms.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN terms.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN terms.delete_date IS '삭제일시';
-- 약관 기본키
COMMENT ON INDEX PK_terms IS '약관 기본키';
-- 약관 기본키
COMMENT ON CONSTRAINT terms.PK_terms IS '약관 기본키';
-- 사용종류
CREATE TABLE use_kind (
use_kind_id INT NOT NULL, -- 사용종류ID
account_kind CHAR(4) NULL, -- 예산종류
use_kind_name VARCHAR(50) NULL, -- 사용종류명
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 사용종류 기본키
CREATE UNIQUE INDEX PK_use_kind
ON use_kind ( -- 사용종류
use_kind_id ASC -- 사용종류ID
);
-- 사용종류
ALTER TABLE use_kind
ADD
CONSTRAINT PK_use_kind -- 사용종류 기본키
PRIMARY KEY (
use_kind_id -- 사용종류ID
);
-- 사용종류
COMMENT ON TABLE use_kind IS '사용종류';
-- 사용종류ID
COMMENT ON COLUMN use_kind.use_kind_id IS '사용종류ID';
-- 예산종류
COMMENT ON COLUMN use_kind.account_kind IS '예산종류';
-- 사용종류명
COMMENT ON COLUMN use_kind.use_kind_name IS '사용종류명';
-- 등록일시
COMMENT ON COLUMN use_kind.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN use_kind.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN use_kind.delete_date IS '삭제일시';
-- 사용종류 기본키
COMMENT ON INDEX PK_use_kind IS '사용종류 기본키';
-- 사용종류 기본키
COMMENT ON CONSTRAINT use_kind.PK_use_kind IS '사용종류 기본키';
-- 세부일정표
CREATE TABLE detail_schedule (
detail_schedule_id INT NOT NULL, -- 세부일정표ID
schedule_id INT NULL, -- 일정표ID
detail_date DATE NULL, -- 세부날짜
user_id INT NULL, -- 등록자ID
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 세부일정표 기본키
CREATE UNIQUE INDEX PK_detail_schedule
ON detail_schedule ( -- 세부일정표
detail_schedule_id ASC -- 세부일정표ID
);
-- 세부일정표
ALTER TABLE detail_schedule
ADD
CONSTRAINT PK_detail_schedule -- 세부일정표 기본키
PRIMARY KEY (
detail_schedule_id -- 세부일정표ID
);
-- 세부일정표
COMMENT ON TABLE detail_schedule IS '세부일정표';
-- 세부일정표ID
COMMENT ON COLUMN detail_schedule.detail_schedule_id IS '세부일정표ID';
-- 일정표ID
COMMENT ON COLUMN detail_schedule.schedule_id IS '일정표ID';
-- 세부날짜
COMMENT ON COLUMN detail_schedule.detail_date IS '세부날짜';
-- 등록자ID
COMMENT ON COLUMN detail_schedule.user_id IS '등록자ID';
-- 등록일시
COMMENT ON COLUMN detail_schedule.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN detail_schedule.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN detail_schedule.delete_date IS '삭제일시';
-- 세부일정표 기본키
COMMENT ON INDEX PK_detail_schedule IS '세부일정표 기본키';
-- 세부일정표 기본키
COMMENT ON CONSTRAINT detail_schedule.PK_detail_schedule IS '세부일정표 기본키';
-- 메모
CREATE TABLE memo (
memo_id INT NOT NULL, -- 메모ID
detail_schedule_id INT NULL, -- 세부일정표ID
memo_title VARCHAR(255) NULL, -- 메모제목
memo_contents TEXT NULL, -- 메모내용
user_id INT NULL, -- 등록자ID
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 메모 기본키
CREATE UNIQUE INDEX PK_memo
ON memo ( -- 메모
memo_id ASC -- 메모ID
);
-- 메모
ALTER TABLE memo
ADD
CONSTRAINT PK_memo -- 메모 기본키
PRIMARY KEY (
memo_id -- 메모ID
);
-- 메모
COMMENT ON TABLE memo IS '메모';
-- 메모ID
COMMENT ON COLUMN memo.memo_id IS '메모ID';
-- 세부일정표ID
COMMENT ON COLUMN memo.detail_schedule_id IS '세부일정표ID';
-- 메모제목
COMMENT ON COLUMN memo.memo_title IS '메모제목';
-- 메모내용
COMMENT ON COLUMN memo.memo_contents IS '메모내용';
-- 등록자ID
COMMENT ON COLUMN memo.user_id IS '등록자ID';
-- 등록일시
COMMENT ON COLUMN memo.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN memo.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN memo.delete_date IS '삭제일시';
-- 메모 기본키
COMMENT ON INDEX PK_memo IS '메모 기본키';
-- 메모 기본키
COMMENT ON CONSTRAINT memo.PK_memo IS '메모 기본키';
-- 루트
CREATE TABLE route (
route_id INT NOT NULL, -- 루트ID
detail_schedule_id INT NULL, -- 세부일정표ID
order_number INT NULL, -- 순번
place_name VARCHAR(50) NULL, -- 장소명
place_eng_name VARCHAR(50) NULL, -- 영문장소명
place_kind VARCHAR(50) NULL, -- 장소분류
adress VARCHAR(255) NULL, -- 기본주소
detail_adress VARCHAR(255) NULL, -- 상세주소
latitude DECIMAL(10,7) NULL, -- 위도
longtitude DECIMAL(10,7) NULL, -- 경도
user_id INT NULL, -- 등록자ID
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 루트 기본키
CREATE UNIQUE INDEX PK_route
ON route ( -- 루트
route_id ASC -- 루트ID
);
-- 루트
ALTER TABLE route
ADD
CONSTRAINT PK_route -- 루트 기본키
PRIMARY KEY (
route_id -- 루트ID
);
-- 루트
COMMENT ON TABLE route IS '루트';
-- 루트ID
COMMENT ON COLUMN route.route_id IS '루트ID';
-- 세부일정표ID
COMMENT ON COLUMN route.detail_schedule_id IS '세부일정표ID';
-- 순번
COMMENT ON COLUMN route.order_number IS '순번';
-- 장소명
COMMENT ON COLUMN route.place_name IS '장소명';
-- 영문장소명
COMMENT ON COLUMN route.place_eng_name IS '영문장소명';
-- 장소분류
COMMENT ON COLUMN route.place_kind IS '장소분류';
-- 기본주소
COMMENT ON COLUMN route.adress IS '기본주소';
-- 상세주소
COMMENT ON COLUMN route.detail_adress IS '상세주소';
-- 위도
COMMENT ON COLUMN route.latitude IS '위도';
-- 경도
COMMENT ON COLUMN route.longtitude IS '경도';
-- 등록자ID
COMMENT ON COLUMN route.user_id IS '등록자ID';
-- 등록일시
COMMENT ON COLUMN route.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN route.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN route.delete_date IS '삭제일시';
-- 루트 기본키
COMMENT ON INDEX PK_route IS '루트 기본키';
-- 루트 기본키
COMMENT ON CONSTRAINT route.PK_route IS '루트 기본키';
-- 새 테이블
CREATE TABLE TABLE (
);
-- 새 테이블
COMMENT ON TABLE TABLE IS '새 테이블';
-- 공지사항
CREATE TABLE notice (
notice_id INT NOT NULL, -- 공지사항ID
notice_title VARCHAR(255) NOT NULL, -- 공지사항제목
notice_contents TEXT NOT NULL, -- 공지사항내용
expsr_at CHAR(4) NULL, -- 노출여부
writer_id INT NULL, -- 작성자ID
create_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP, -- 등록일시
update_date DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 수정일시
delete_date DATETIME NULL -- 삭제일시
);
-- 공지사항 기본키
CREATE UNIQUE INDEX PK_notice
ON notice ( -- 공지사항
notice_id ASC -- 공지사항ID
);
-- 공지사항
ALTER TABLE notice
ADD
CONSTRAINT PK_notice -- 공지사항 기본키
PRIMARY KEY (
notice_id -- 공지사항ID
);
-- 공지사항
COMMENT ON TABLE notice IS '공지사항';
-- 공지사항ID
COMMENT ON COLUMN notice.notice_id IS '공지사항ID';
-- 공지사항제목
COMMENT ON COLUMN notice.notice_title IS '공지사항제목';
-- 공지사항내용
COMMENT ON COLUMN notice.notice_contents IS '공지사항내용';
-- 노출여부
COMMENT ON COLUMN notice.expsr_at IS '노출여부';
-- 작성자ID
COMMENT ON COLUMN notice.writer_id IS '작성자ID';
-- 등록일시
COMMENT ON COLUMN notice.create_date IS '등록일시';
-- 수정일시
COMMENT ON COLUMN notice.update_date IS '수정일시';
-- 삭제일시
COMMENT ON COLUMN notice.delete_date IS '삭제일시';
-- 공지사항 기본키
COMMENT ON INDEX PK_notice IS '공지사항 기본키';
-- 공지사항 기본키
COMMENT ON CONSTRAINT notice.PK_notice IS '공지사항 기본키';
-- 회원
ALTER TABLE users
ADD
CONSTRAINT FK_users_TO_users -- 회원 -> 회원
FOREIGN KEY (
recommend_user_id -- 추천회원ID
)
REFERENCES users ( -- 회원
user_id -- 회원ID
);
-- 회원 -> 회원
COMMENT ON CONSTRAINT users.FK_users_TO_users IS '회원 -> 회원';
-- 검색어
ALTER TABLE search_keyword
ADD
CONSTRAINT FK_users_TO_search_keyword -- 회원 -> 검색어
FOREIGN KEY (
user_id -- 회원ID
)
REFERENCES users ( -- 회원
user_id -- 회원ID
);
-- 회원 -> 검색어
COMMENT ON CONSTRAINT search_keyword.FK_users_TO_search_keyword IS '회원 -> 검색어';
-- 일정표
ALTER TABLE schedule
ADD
CONSTRAINT FK_users_TO_schedule -- 회원 -> 일정표
FOREIGN KEY (
user_id -- 등록자ID
)
REFERENCES users ( -- 회원
user_id -- 회원ID
);
-- 회원 -> 일정표
COMMENT ON CONSTRAINT schedule.FK_users_TO_schedule IS '회원 -> 일정표';
-- 일정표
ALTER TABLE schedule
ADD
CONSTRAINT FK_city_TO_schedule -- 도시 -> 일정표
FOREIGN KEY (
city_id -- 도시id
)
REFERENCES city ( -- 도시
city_id -- 도시id
);
-- 도시 -> 일정표
COMMENT ON CONSTRAINT schedule.FK_city_TO_schedule IS '도시 -> 일정표';
-- 도시
ALTER TABLE city
ADD
CONSTRAINT FK_country_TO_city -- 국가 -> 도시
FOREIGN KEY (
country_id -- 국가id
)
REFERENCES country ( -- 국가
country_id -- 국가id
);
-- 국가 -> 도시
COMMENT ON CONSTRAINT city.FK_country_TO_city IS '국가 -> 도시';
-- 체크리스트
ALTER TABLE basic_check_list
ADD
CONSTRAINT FK_basic_list_TO_basic_check_list -- 기본리스트 -> 체크리스트
FOREIGN KEY (
basic_list_id -- 기본리스트ID
)
REFERENCES basic_list ( -- 기본리스트
basic_list_id -- 기본리스트ID
);
-- 기본리스트 -> 체크리스트
COMMENT ON CONSTRAINT basic_check_list.FK_basic_list_TO_basic_check_list IS '기본리스트 -> 체크리스트';
-- 체크리스트
ALTER TABLE basic_check_list
ADD
CONSTRAINT FK_schedule_TO_basic_check_list -- 일정표 -> 체크리스트
FOREIGN KEY (
schedule_id -- 일정표ID
)
REFERENCES schedule ( -- 일정표
schedule_id -- 일정표ID
);
-- 일정표 -> 체크리스트
COMMENT ON CONSTRAINT basic_check_list.FK_schedule_TO_basic_check_list IS '일정표 -> 체크리스트';
-- 가계부
ALTER TABLE account_book
ADD
CONSTRAINT FK_schedule_TO_account_book -- 일정표 -> 가계부
FOREIGN KEY (
schedule_id -- 일정표ID
)
REFERENCES schedule ( -- 일정표
schedule_id -- 일정표ID
);
-- 일정표 -> 가계부
COMMENT ON CONSTRAINT account_book.FK_schedule_TO_account_book IS '일정표 -> 가계부';
-- 가계부
ALTER TABLE account_book
ADD
CONSTRAINT FK_use_kind_TO_account_book -- 사용종류 -> 가계부
FOREIGN KEY (
use_kind_id -- 사용종류ID
)
REFERENCES use_kind ( -- 사용종류
use_kind_id -- 사용종류ID
);
-- 사용종류 -> 가계부
COMMENT ON CONSTRAINT account_book.FK_use_kind_TO_account_book IS '사용종류 -> 가계부';
-- 약관
ALTER TABLE terms
ADD
CONSTRAINT FK_users_TO_terms -- 회원 -> 약관
FOREIGN KEY (
user_id -- 회원ID
)
REFERENCES users ( -- 회원
user_id -- 회원ID
);
-- 회원 -> 약관
COMMENT ON CONSTRAINT terms.FK_users_TO_terms IS '회원 -> 약관';
-- 세부일정표
ALTER TABLE detail_schedule
ADD
CONSTRAINT FK_schedule_TO_detail_schedule -- 일정표 -> 세부일정표
FOREIGN KEY (
schedule_id -- 일정표ID
)
REFERENCES schedule ( -- 일정표
schedule_id -- 일정표ID
);
-- 일정표 -> 세부일정표
COMMENT ON CONSTRAINT detail_schedule.FK_schedule_TO_detail_schedule IS '일정표 -> 세부일정표';
-- 메모
ALTER TABLE memo
ADD
CONSTRAINT FK_detail_schedule_TO_memo -- 세부일정표 -> 메모
FOREIGN KEY (
detail_schedule_id -- 세부일정표ID
)
REFERENCES detail_schedule ( -- 세부일정표
detail_schedule_id -- 세부일정표ID
);
-- 세부일정표 -> 메모
COMMENT ON CONSTRAINT memo.FK_detail_schedule_TO_memo IS '세부일정표 -> 메모';
-- 루트
ALTER TABLE route
ADD
CONSTRAINT FK_detail_schedule_TO_route -- 세부일정표 -> 루트
FOREIGN KEY (
detail_schedule_id -- 세부일정표ID
)
REFERENCES detail_schedule ( -- 세부일정표
detail_schedule_id -- 세부일정표ID
);
-- 세부일정표 -> 루트
COMMENT ON CONSTRAINT route.FK_detail_schedule_TO_route IS '세부일정표 -> 루트';
-- 공지사항
ALTER TABLE notice
ADD
CONSTRAINT FK_users_TO_notice -- 회원 -> 공지사항
FOREIGN KEY (
writer_id -- 작성자ID
)
REFERENCES users ( -- 회원
user_id -- 회원ID
);
-- 회원 -> 공지사항
COMMENT ON CONSTRAINT notice.FK_users_TO_notice IS '회원 -> 공지사항';
'DB > DB설계' 카테고리의 다른 글
[DB설계] 스튜디오메이트 (0) | 2022.04.01 |
---|---|
[DB설계] 에어비앤비 (0) | 2022.04.01 |
[DB설계] 인스타그램 (0) | 2022.04.01 |