inblog logo
|
하쎄의 기술 일기장
    TeamProject

    [Travel] SQL 테이블 외래 키 설정

    테이블 설계 SQL 외래 키 설정
    하세연's avatar
    하세연
    Sep 29, 2024
    [Travel] SQL 테이블 외래 키 설정
    • 수정 후
    MySQL 용 -- 1. area_tb (지역 테이블) CREATE TABLE area_tb ( code VARCHAR(255) PRIMARY KEY, -- 지역 코드 name VARCHAR(255) NOT NULL -- 지역 이름 ); -- 2. sigungu_tb (시군구 테이블) CREATE TABLE sigungu_tb ( id INT AUTO_INCREMENT PRIMARY KEY, -- 시군구 ID code VARCHAR(255), -- 시군구 코드 name VARCHAR(255), -- 시군구 이름 area_code VARCHAR(255), -- 지역 코드 (외래 키) CONSTRAINT fk_sigungu_area FOREIGN KEY (area_code) REFERENCES area_tb(code) ); -- 3. content_tb (컨텐츠 테이블) CREATE TABLE content_tb ( content_id VARCHAR(255) PRIMARY KEY, -- 컨텐츠 ID addr1 VARCHAR(255), -- 주소 1 addr2 VARCHAR(255), -- 주소 2 area_code VARCHAR(255), -- 지역 코드 booktour VARCHAR(255), -- 북투어 cat1 VARCHAR(255), -- 카테고리 1 cat2 VARCHAR(255), -- 카테고리 2 cat3 VARCHAR(255), -- 카테고리 3 content_type_id VARCHAR(255), -- 컨텐츠 유형 ID created_time VARCHAR(255), -- 생성 시간 first_image VARCHAR(255), -- 첫번째 이미지 URL first_image2 VARCHAR(255), -- 두번째 이미지 URL cpyrht_div_cd VARCHAR(255), -- 저작권 코드 map_x VARCHAR(255), -- 지도 X좌표 map_y VARCHAR(255), -- 지도 Y좌표 mlevel VARCHAR(255), -- 지도 확대 레벨 modified_time VARCHAR(255), -- 수정 시간 sigungu_code VARCHAR(255), -- 시군구 코드 tel VARCHAR(255), -- 전화번호 title VARCHAR(255), -- 제목 zipcode VARCHAR(255), -- 우편번호 view_count VARCHAR(255), -- 조회수 like_count VARCHAR(255) -- 좋아요 수 ); -- 4. count_info_tb (조회수 및 좋아요 수 테이블) CREATE TABLE count_info_tb ( content_id VARCHAR(255) PRIMARY KEY, -- 컨텐츠 ID (외래 키) view_count VARCHAR(255), -- 조회수 like_count VARCHAR(255), -- 좋아요 수, CONSTRAINT fk_count_info_content FOREIGN KEY (content_id) REFERENCES content_tb(content_id) ); -- 5. festivalinfo_tb (축제 정보 테이블) CREATE TABLE festivalinfo_tb ( content_id VARCHAR(255) PRIMARY KEY, -- 컨텐츠 ID (외래 키) content_type_id VARCHAR(255), -- 컨텐츠 유형 ID sponsor1 VARCHAR(255), -- 후원자 1 sponsor1_tel VARCHAR(255), -- 후원자 1 전화번호 sponsor2 VARCHAR(255), -- 후원자 2 sponsor2_tel VARCHAR(255), -- 후원자 2 전화번호 event_end_date VARCHAR(255), -- 이벤트 종료일 play_time VARCHAR(255), -- 공연 시간 event_place VARCHAR(255), -- 이벤트 장소 event_homepage VARCHAR(255), -- 이벤트 홈페이지 age_limit VARCHAR(255), -- 연령 제한 booking_place VARCHAR(255), -- 예약 장소 place_info VARCHAR(255), -- 장소 정보 sub_event VARCHAR(255), -- 서브 이벤트 program VARCHAR(255), -- 프로그램 event_start_date VARCHAR(255), -- 이벤트 시작일 use_time_festival VARCHAR(255), -- 축제 이용 시간 discount_info_festival VARCHAR(255), -- 축제 할인 정보 spend_time_festival VARCHAR(255), -- 축제 소요 시간 festival_grade VARCHAR(255), -- 축제 등급 serial_num VARCHAR(255), -- 시리얼 넘버 info_name VARCHAR(255), -- 정보 이름 fldgubun VARCHAR(255), -- 구분 origin_img_url VARCHAR(255), -- 원본 이미지 URL img_name VARCHAR(255), -- 이미지 이름 small_image_url VARCHAR(255), -- 작은 이미지 URL cpyrht_div_cd VARCHAR(255), -- 저작권 코드 view_count VARCHAR(255), -- 조회수 like_count VARCHAR(255) -- 좋아요 수 ); -- 6. restaurantinfo_tb (레스토랑 정보 테이블) CREATE TABLE restaurantinfo_tb ( content_id VARCHAR(255) PRIMARY KEY, -- 컨텐츠 ID (외래 키) content_type_id VARCHAR(255), -- 컨텐츠 유형 ID title VARCHAR(255), -- 제목 created_time VARCHAR(255), -- 생성 시간 modified_time VARCHAR(255), -- 수정 시간 tel VARCHAR(255), -- 전화번호 tel_name VARCHAR(255), -- 전화번호 이름 home_page VARCHAR(255), -- 홈페이지 book_tour VARCHAR(255), -- 북투어 first_image VARCHAR(255), -- 첫번째 이미지 URL first_image2 VARCHAR(255), -- 두번째 이미지 URL cpyrht_div_cd VARCHAR(255), -- 저작권 코드 area_code VARCHAR(255), -- 지역 코드 sigungu_code VARCHAR(255), -- 시군구 코드 cat1 VARCHAR(255), -- 카테고리 1 cat2 VARCHAR(255), -- 카테고리 2 cat3 VARCHAR(255), -- 카테고리 3 addr1 VARCHAR(255), -- 주소 1 addr2 VARCHAR(255), -- 주소 2 zipcode VARCHAR(255), -- 우편번호 map_x VARCHAR(255), -- 지도 X좌표 map_y VARCHAR(255), -- 지도 Y좌표 mlevel VARCHAR(255), -- 지도 확대 레벨 over_view TEXT, -- 개요 seat VARCHAR(255), -- 좌석 정보 kids_facility VARCHAR(255), -- 어린이 시설 first_menu VARCHAR(255), -- 대표 메뉴 treat_menu VARCHAR(255), -- 취급 메뉴 smoking VARCHAR(255), -- 흡연 여부 packing VARCHAR(255), -- 포장 여부 info_center_food VARCHAR(255), -- 음식 정보 센터 scale_food VARCHAR(255), -- 음식 규모 parking_food VARCHAR(255), -- 주차 시설 open_date_food VARCHAR(255), -- 오픈 날짜 open_time_food VARCHAR(255), -- 오픈 시간 rest_date_food VARCHAR(255), -- 휴무일 discount_info_food VARCHAR(255), -- 할인 정보 chk_credit_card_food VARCHAR(255), -- 신용카드 가능 여부 reservation_food VARCHAR(255), -- 예약 가능 여부 lcns_no VARCHAR(255), -- 라이센스 번호 origin_img_url VARCHAR(255), -- 원본 이미지 URL img_name VARCHAR(255), -- 이미지 이름 small_image_url VARCHAR(255), -- 작은 이미지 URL serial_num VARCHAR(255), -- 시리얼 넘버 view_count VARCHAR(255), -- 조회수 like_count VARCHAR(255) -- 좋아요 수 ); -- 7. tourism_info_tb (관광 정보 테이블) CREATE TABLE tourisminfo_tb ( content_id VARCHAR(255) PRIMARY KEY, -- 컨텐츠 ID (외래 키) serial_num VARCHAR(255), -- 시리얼 넘버 title VARCHAR(255), -- 제목 created_time VARCHAR(255), -- 생성 시간 modified_time VARCHAR(255), -- 수정 시간 home_page VARCHAR(255), -- 홈페이지 first_image VARCHAR(255), -- 첫번째 이미지 URL first_image2 VARCHAR(255), -- 두번째 이미지 URL addr1 VARCHAR(255), -- 주소 1 map_x VARCHAR(255), -- 지도 X좌표 map_y VARCHAR(255), -- 지도 Y좌표 overview TEXT, -- 개요 origin_img_url VARCHAR(255), -- 원본 이미지 URL img_name VARCHAR(255), -- 이미지 이름 small_image_url VARCHAR(255), -- 작은 이미지 URL cpyrht_div_cd VARCHAR(255), -- 저작권 코드 info_center VARCHAR(255), -- 정보 센터 open_date VARCHAR(255), -- 개장 날짜 rest_date VARCHAR(255), -- 휴무일 exp_guide VARCHAR(255), -- 체험 가이드 exp_age_range VARCHAR(255), -- 체험 연령대 accom_count VARCHAR(255), -- 수용 인원 use_season VARCHAR(255), -- 이용 계절 use_time VARCHAR(255), -- 이용 시간 parking VARCHAR(255), -- 주차 시설 chk_baby_carriage VARCHAR(255), -- 유모차 가능 여부 chk_pet VARCHAR(255), -- 애완동물 가능 여부 chk_credit_card VARCHAR(255), -- 신용카드 가능 여부 info_name VARCHAR(255), -- 정보 이름 info_text TEXT, -- 정보 내용 view_count VARCHAR(255), -- 조회수 like_count VARCHAR(255) -- 좋아요 수 ); -- 8. review_tb (리뷰 테이블) CREATE TABLE review_tb ( id INT AUTO_INCREMENT PRIMARY KEY, -- 리뷰 ID context TEXT, -- 리뷰 내용 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 생성 시간 rating DOUBLE, -- 별점 is_deleted BOOLEAN, -- 삭제 여부 content_id VARCHAR(255), -- 컨텐츠 ID (외래 키) user_id INT, -- 사용자 ID (외래 키) festival_info_id VARCHAR(255), -- 축제 정보 ID (외래 키) tourism_info_id VARCHAR(255), -- 관광 정보 ID (외래 키) restaurant_info_id VARCHAR(255), -- 레스토랑 정보 ID (외래 키) CONSTRAINT fk_review_content FOREIGN KEY (content_id) REFERENCES content_tb(content_id), CONSTRAINT fk_review_user FOREIGN KEY (user_id) REFERENCES user_tb(id), CONSTRAINT fk_review_festival FOREIGN KEY (festival_info_id) REFERENCES festivalinfo_tb(content_id), CONSTRAINT fk_review_tourism FOREIGN KEY (tourism_info_id) REFERENCES tourisminfo_tb(content_id), CONSTRAINT fk_review_restaurant FOREIGN KEY (restaurant_info_id) REFERENCES restaurantinfo_tb(content_id) ); -- 9. scrap_tb (스크랩 테이블) CREATE TABLE scrap_tb ( id INT AUTO_INCREMENT PRIMARY KEY, -- 스크랩 ID user_id INT, -- 사용자 ID (외래 키) content_id VARCHAR(255), -- 컨텐츠 ID (외래 키) is_scrap BOOLEAN, -- 스크랩 여부 CONSTRAINT fk_scrap_user FOREIGN KEY (user_id) REFERENCES user_tb(id), CONSTRAINT fk_scrap_content FOREIGN KEY (content_id) REFERENCES content_tb(content_id) ); -- 10. user_tb (사용자 테이블) CREATE TABLE user_tb ( id INT AUTO_INCREMENT PRIMARY KEY, -- 사용자 ID login_id VARCHAR(20) UNIQUE NOT NULL, -- 로그인 ID password VARCHAR(255) NOT NULL, -- 패스워드 profile VARCHAR(255), -- 프로필 사진 URL nickname VARCHAR(255) UNIQUE NOT NULL, -- 닉네임 email VARCHAR(255), -- 이메일 phone VARCHAR(13) -- 전화번호 );
    💡
    review_tb 테이블에서 사용된 외래 키(FOREIGN KEY)는 다른 테이블과의 관계를 정의합니다. 각 외래 키가 어떤 테이블을 참조하는지 설명드리겠습니다.
    1. content_id (CONSTRAINT fk_review_content FOREIGN KEY (content_id) REFERENCES content_tb(content_id)):
        • content_tb 테이블의 content_id 컬럼을 참조합니다.
        • 리뷰가 특정 컨텐츠와 연관될 때, 그 컨텐츠의 ID를 저장합니다.
    1. user_id (CONSTRAINT fk_review_user FOREIGN KEY (user_id) REFERENCES user_tb(id)):
        • user_tb 테이블의 id 컬럼을 참조합니다.
        • 리뷰를 작성한 사용자의 ID를 저장하며, 사용자의 정보와 연결됩니다.
    1. festival_info_id (CONSTRAINT fk_review_festival FOREIGN KEY (festival_info_id) REFERENCES festivalinfo_tb(content_id)):
        • festivalinfo_tb 테이블의 content_id 컬럼을 참조합니다.
        • 축제 정보에 대한 리뷰일 경우, 해당 축제의 ID를 저장합니다.
    1. tourism_info_id (CONSTRAINT fk_review_tourism FOREIGN KEY (tourism_info_id) REFERENCES tourisminfo_tb(content_id)):
        • tourisminfo_tb 테이블의 content_id 컬럼을 참조합니다.
        • 관광 정보에 대한 리뷰일 경우, 그 관광지의 ID를 저장합니다.
    1. restaurant_info_id (CONSTRAINT fk_review_restaurant FOREIGN KEY (restaurant_info_id) REFERENCES restaurantinfo_tb(content_id)):
        • restaurantinfo_tb 테이블의 content_id 컬럼을 참조합니다.
        • 레스토랑 정보에 대한 리뷰일 경우, 해당 레스토랑의 ID를 저장합니다.
    이 외래 키들은 review_tb 테이블이 각각의 관련된 테이블과 연관성을 가지며 데이터 일관성을 유지하도록 돕습니다. 예를 들어, 삭제 또는 업데이트 시 참조된 데이터의 상태도 반영될 수 있습니다.
    Share article

    하쎄의 기술 일기장

    RSS·Powered by Inblog