[SQL] 데이터 분석, 활용 _ 일대일, 다대다 관계

강지영·2023년 2월 21일
0

📚 One-to-One(1:1)

일대일로 연결된 것ex) 하나의 나라는 하나의 수도를 갖고, 하나의 수도는 하나의 수도를 가짐
📌 범위가 더 작거나 사용빈도가 더 적은 쪽에 FK를 줌!

📚 Many-to-Many(M:N)

다대다 관계는 두 데이터 연결이 다수와 다수로 이어지는 것 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
;
profile
Hello World!

0개의 댓글