기본키라 한다.
MySql에서 생성
CREATE TABLE user ( id INTEGER AUTO_INCREMENT PRIMARY KEY, ... )
외래키라 하며 단계 형성을 위한 컬럼이다.
MySQL에서 생성
CREATE TABLE photos ( id SERIAL PRIMARY KEY, -- PK user_id INTEGER REFERENCES users(id) -- FK: users의 PK로 연결 ... )
![]()
한쪽 엔티티가 다른쪽 엔티티의 여러 객체를 가질 수 있다.
(서로 연결된 PK, FK가 있을 때, PK는 FK의 여러 객체를 가질 수 있다.)
두 엔티티가 양방향에서 일대일로 연결되어 있다.
나라와 수도의 관계를 보면
나라는 하나의 수도를 가지고
수도는 하나의 나라에 속한다.
구현시 범위가 더 작거나 사용빈도가 더 적은 쪽에 FK를 준다.
MySQL에서 생성
CREATE TABLE capitals ( id SERIAL PRIMARY KEY, -- 해당 테이블 PK country_id INTEGER UNIQUE REFERENCES countries(id) -- countries 테이블에 연결된 FK (UNIQUE를 사용해야 일대일 관계가 된다) ... )
두 엔티티의 연결이 다수와 다수로 연결되어 있다.
고객과 상품의 관계를 보면
고객은 다수의 상품을 구매할 수 있고
상품은 다수의 고객에게 주문 될 수 있다.
다대다 관계를 구현 시
중간에 새로 테이블을 두고 여기에 FK를 두어서 양측을 연결한다.
스키마는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다.
즉, '데이터베이스의 청사진'과 같다.
인스타그램을 예시로 스키마를 디자인 해봤다.
기능을 크게 나누면 다음과 같다.
user은
post를 올릴 수 있다,
post에 comment를 달 수 있다,
post에 like를 달 수 있다,
comment에 like를 달 수 있다,
다른 유저를 follow 할 수 있다,
다른 유저의 follower 가 될 수 있다,
post는
게시한 user가 있다.
hashtag가 달릴 수 있다.
like가 달릴 수 있다.
comment가 달릴 수 있다.
dbdiagram으로 작성해 보았다
hashtags와 posts는 다대다 관계이므로 사이에 posts_hashtags 테이블을 만들어 연결해 주었다.