DB

    [DB] 테이블의 M:N 설계

    [DB] 테이블의 M:N 설계

    🔍 M:N 관계 두 개의 테이블에서 1 : M 관계가 양쪽에서 모두 나타날 때 이를 M : N 관계라고 한다. 이 관계는 선천적으로 테이블의 관계까 없으며, 비즈니스 로직 등으로 어떤 관계를 맺어줌으로써 관계가 형성된다. 🔍 M:N관계의 문제점 개념상으로 다음과 같이 M : N 관계를 표현하는 것이 가능하다. 하지만 이 관계를 풀어서 표현하면 다음과 같다. 즉, 학생, 과목 테이블의 PK 컬럼인 ID가 중복이 되어버린다. 따라서 M : N관계에서는 양쪽 테이블 모두에서 pk중복이 일어나기 때문에 이를 해결할 방법이 필요하다. 🔍 M:N관계 설계 이런 M:N 관계를 해결하기 위해 또 하나의 테이블을 도입할 수 있다. 위와 같은 모델에서 수강 테이블과 다른 테이블의 관계 테이블이 생성될 수 있다. 그러기 위..

    [DB] PK를 정하는 기준

    [DB] PK를 정하는 기준

    🔍 주식별자를 정하는 기준 PK를 설정하면 키에 대응하는 인덱스 테이블이 생성되기 때문에 적절한 PK를 설정하는 것은 중요하다. (인덱스 테이블은 키 값에 의해서 정렬되어 있기 때문에 빠른 값 찾기를 가능하게 한다.) 컬럼의 성격을 봤을 때 유일성이 있으면 후보키가 될 수 있다. 그러면 여러 후보키가 있을 때 어떤 컬럼을 PK로 정해야 할까? → NOT NULL이 될 수 있냐와 고객이 제공한 데이터인지 아닌지의 여부로 정할 수 있다. 위에서 PK로 적절한 컬럼은 무엇일까? -> 일단 후보로 주민번호, 폰번호, 이메일, 고객번호가 될 수 있다. 유일한 값이기 때문이다. 이제 NOT NULL의 여부를 확인해봐야 한다. 여기서 폰번호와 이메일은 null이 될 수 있기 때문에 pk후보군에서 제외된다. 그렇다면 ..

    [Real MySQL8.0] MySQL 엔진의 구조

    [Real MySQL8.0] MySQL 엔진의 구조

    MySQL 서버는 사람의 머리 역할을 담당하는 MySQL엔진과 손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다. MySQL 엔진 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저로 구성되어 있다. 1. 핸들러 API 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때는 각 스토리지 엔진에 쓰기 또는 읽기를 요청하는데, 이러한 요청을 처리하는 API를 핸들러 API라고 한다. 2. MySQL 스레딩 구조 MySQL 서버는 스레드 기반으로 작동하며, 포그라운드 스레드와 백그라운드 스레드로 구분할 수 있다. 포그라운드 스레드 -> 클라이언트가 MySQL 서버에 접속하면 서버는 클라이언트의 요청을 처리해 줄 스레드를 생성해 할당한..