[DB/MySQL] 다중 기본키(Multi PK) 설정 SQL Query문

2023. 3. 25. 23:48· Computer Science/Database
반응형

💋 다중 기본키가 왜 필요함?

 

오늘 이리내랑 JAVA로 만든 체스 게임을 DB에 연결하고 있었다.

체스판에서 각 위치를 A1, A2, A3,...,B1,B2,...H8라고 부르는데, 우리는 각 위치에 체스말(Piece)의 종류(King, Queen, Knight...)와 그 색깔(Black, White)을 저장하고 싶었다. 

 

아마도 두 가지 방법이 있을 것이다.

 

 

1. A,B,C...H(File)과 1,2,...8(Rank)를 다중 기본키로 설정하는 방법!

 

만약 내 코드가 이 두 가지를 Position이라는 클래스 내에서 별도로 관리중이라면 굉장히 유용할 것이다. 

이 경우 다중 기본키를 지정한 테이블을 만들어야 한다. 

 

 

💋 다중 기본키 테이블 만들기 (SQL)

 

CREATE TABLE chess_game(
        position_file VARCHAR(255) NOT NULL,
        position_rank VARCHAR(255) NOT NULL,
        piece_type VARCHAR(255),
        piece_color VARCHAR(255),
        constraint chess_game_pk primary key(position_file, position_rank)
);

 

position_file, position_rank를 다중 키로 하는 테이블을 생성했다!

 

 


 

 

 

2. 기본키를 "A1", ... "H8"같은 Position으로 지정하는 방법! 

 

이 경우에는 JAVA에서 A(File)와 1(Rank)를 별도로 관리하고 있다면 별도로 합쳐주는 메서드를 별도로 구현해야 할 것이다. 아래 코드처럼 캐싱을 하기 위해서 이미 static 메서드인 of()가 있을 경우, 이 방법이 편리할 수 있다.

* 위의 복잡한 코드는 캐싱을 위한 것이므로, of() 메서드가 file, rank를 모아서 Position을 반환하는 식으로 이미 관리하고 있다는 것만 이해해도 된다!

 

public final class Position {

    private static final Map<String, Position> CACHE = new HashMap<>();

    static {
        for (File file : File.values()) {
            for (Rank rank : Rank.values()) {
                CACHE.put(file.command() + rank.command(), new Position(file, rank));
            }
        }
    }

    private final File file;
    private final Rank rank;

    private Position(final File file, final Rank rank) {
        this.file = file;
        this.rank = rank;
    }

    public static Position of(final String file, final String rank) {
        return of(File.from(file), Rank.from(rank));
    }

    public File file() {
        return file;
    }

    public Rank rank() {
        return rank;
    }
}

 

 

아래는 의미없는 사진이고 썸네일용이다 >< 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Computer Science > Database' 카테고리의 다른 글

[DB] 데이터베이스 용어 정리: DBMS, metadata, data models, schema, state, three-schema architecture 등등  (0) 2023.12.02
[DB] Connection Pool: 개념, 등장 배경, Spring Boot에서 HikariCP 커넥션 풀 설정하기  (0) 2023.09.30
[DB] 클러스터링 인덱스: 인덱스의 개념, MySQL에서 리프 노드에 메모리 주소가 아닌 Primary Key를 저장하는 이유  (2) 2023.08.31
[DB/H2] H2 데이터베이스 버전 확인  (0) 2023.06.29
[DB/H2] H2 데이터베이스 설치부터 실행까지  (0) 2023.06.15
'Computer Science/Database' 카테고리의 다른 글
  • [DB] Connection Pool: 개념, 등장 배경, Spring Boot에서 HikariCP 커넥션 풀 설정하기
  • [DB] 클러스터링 인덱스: 인덱스의 개념, MySQL에서 리프 노드에 메모리 주소가 아닌 Primary Key를 저장하는 이유
  • [DB/H2] H2 데이터베이스 버전 확인
  • [DB/H2] H2 데이터베이스 설치부터 실행까지
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
깃짱코딩연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 아키텍처
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • 상속과조합
  • Composition
  • 람다와스트림
  • 상속
  • 함수형프로그래밍
  • 레벨로그
  • TDD
  • lamda
  • 우아한테크코스5기
  • 우테코
  • 람다
  • 컴포지션
  • 우아한테크코스
  • OOP
  • 우테코5기
  • Java
  • 스트림
  • 조합
  • Stream
  • 예외
hELLO · Designed By 정상우.v4.2.0
깃짱
[DB/MySQL] 다중 기본키(Multi PK) 설정 SQL Query문
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.