[Database] Schema & Query Design

tyoon225·2022년 5월 13일
0

TIL (Today I Learned)

목록 보기
37/53
post-thumbnail

PK (Primary Key)

기본키라 한다.

  • Representative
    하나의 PK는 하나의 레코드를 대표한다.
  • Unique
    유일한 값이다.
  • named 'id' (usually)
    보통 id칼럼으로 명명되고 데이터베이스에 의해 자동 생성된다. (알아서 insert된다)

MySql에서 생성

CREATE TABLE user (
  id INTEGER AUTO_INCREMENT PRIMARY KEY,
  ...
)

FK (Foreign Key)

외래키라 하며 단계 형성을 위한 컬럼이다.

MySQL에서 생성

CREATE TABLE photos (
  id SERIAL PRIMARY KEY, -- PK
  user_id INTEGER REFERENCES users(id) -- FK: users의 PK로 연결
  ...
)

일대다 관계 (one-to-many, 1:N)

한쪽 엔티티가 다른쪽 엔티티의 여러 객체를 가질 수 있다.
(서로 연결된 PK, FK가 있을 때, PK는 FK의 여러 객체를 가질 수 있다.)

일대일 관계 (one-to-one, 1:1)

두 엔티티가 양방향에서 일대일로 연결되어 있다.

  • 예시

    나라와 수도의 관계를 보면
    나라는 하나의 수도를 가지고
    수도는 하나의 나라에 속한다.

구현시 범위가 더 작거나 사용빈도가 더 적은 쪽에 FK를 준다.

MySQL에서 생성

CREATE TABLE capitals (
  id SERIAL PRIMARY KEY, -- 해당 테이블 PK
  country_id INTEGER UNIQUE REFERENCES countries(id) 
  -- countries 테이블에 연결된 FK (UNIQUE를 사용해야 일대일 관계가 된다)
  ...
)

다대다 관계 (many-to-many, M:N)

두 엔티티의 연결이 다수와 다수로 연결되어 있다.

  • 예시

    고객과 상품의 관계를 보면
    고객은 다수의 상품을 구매할 수 있고
    상품은 다수의 고객에게 주문 될 수 있다.

다대다 관계를 구현 시
중간에 새로 테이블을 두고 여기에 FK를 두어서 양측을 연결한다.

스키마 (Schema)

스키마는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다.
즉, '데이터베이스의 청사진'과 같다.

스키마 디자인

인스타그램을 예시로 스키마를 디자인 해봤다.

기능을 크게 나누면 다음과 같다.

  • user은
    post를 올릴 수 있다,
    post에 comment를 달 수 있다,
    post에 like를 달 수 있다,
    comment에 like를 달 수 있다,
    다른 유저를 follow 할 수 있다,
    다른 유저의 follower 가 될 수 있다,

  • post는
    게시한 user가 있다.
    hashtag가 달릴 수 있다.
    like가 달릴 수 있다.
    comment가 달릴 수 있다.

dbdiagram으로 작성해 보았다

hashtags와 posts는 다대다 관계이므로 사이에 posts_hashtags 테이블을 만들어 연결해 주었다.

profile
I walk slowly but I never walk backward.

0개의 댓글