일대일로 연결된 것
ex) 하나의 나라는 하나의 수도를 갖고, 하나의 수도는 하나의 수도를 가짐
📌 범위가 더 작거나 사용빈도가 더 적은 쪽에 FK를 줌!
다대다 관계는 두 데이터 연결이 다수와 다수로 이어지는 것
ex) 여러 고객은 다양한 상품을 주문할 수 있고, 다양한 상품도 다양한 고객에게 주문될 수 있음
📌 이러한 다대다 관계는 실제 구현시 중간 테이블을 놓고 여기에 FK를 둬서 양측을 연결
ex) 인스타그램으로 보면 좋아요가 중간 테이블 되고 그 양측으로 사용자와 사진이 됨
일대일 테이블이니 UNIQUE 넣어서 해당 컬럼에 중복 값이 저장되지 않도록 제한
-- settings 테이블 생성
CREATE TABLE settings(
	id SERIAL PRIMARY KEY, -- PK
	private BOOLEAN,
	adding_photos VARCHAR(15),
	user_id INTEGER UNIQUE REFERENCES users(id)-- FK: 개인 설정 유저(1:1)
);INSERT INTO
	settings(private, adding_photos, user_id)
VALUES
	(FALSE, 'MANUAL', 1), -- 유저#1
	(FALSE, 'AUTO', 2), -- 유저#1
	(TRUE, 'AUTO', 3) -- 유저#1
;🔫 여기서 user_id에 값이 있는 값을 넣을 시 에러가 난다!!

-- likes 테이블 생성(사용자와 사진을 다대다 연결)
CREATE TABLE likes (
  id       SERIAL  PRIMARY KEY,          -- PK
  user_id  INTEGER REFERENCES users(id), -- FK: 좋아요를 누른 사람(1:N 연결)
  photo_id INTEGER REFERENCES photos(id) -- FK: 좋아요된 사진(1:N 연결)
); -- likes 레코드 생성
INSERT INTO
  likes(user_id, photo_id)
VALUES
  -- 사진#1에 달린 좋아요
  (1, 1), -- 유저#1
  (2, 1), -- 유저#2
  -- 사진#2에 달린 좋아요
  (1, 2), -- 유저#1
  (2, 2), -- 유저#2
  (3, 2), -- 유저#3
  -- 사진#3에 달린 좋아요
  (1, 3), -- 유저#1
  (3, 3)  -- 유저#3
;