새벽코딩

[PostgresDB-2] 8-2. Relationship ( 1:N) 실습 본문

Programming/Postgres DB

[PostgresDB-2] 8-2. Relationship ( 1:N) 실습

midnightcoder 2022. 12. 15. 15:12

여기서는 3 종류의 Table을 만들어서, 관계를 형성한다

user, photos, comments 3가지 table을 만들 예정 (instargram 컨셉)

 

 

users 테이블 생성 및 데이터 추가

위와 같은 Table 생성

-- users 테이블 생성
CREATE TABLE users (
  id       SERIAL       PRIMARY KEY, -- PK 선언(SERIAL: 자동 생성 타입)
  nickname VARCHAR(50),
  email    VARCHAR(100)
);

-- users 레코드 등록
INSERT INTO
  users(nickname, email) -- nickname과 email만 넣어줌(id자동)
VALUES
  ('cloudstudying_kr', 'mail@cloudstudying.kr'),
  ('hongpark_cs',      'sehongpark@cloudstudying.kr'),
  ('haesamq',          'haesamq@naver.com')
;

 

photos 테이블 생성 및 데이터 추가

-- photos table 생성
CREATE TABLE photos(
	id			SERIAL		PRIMARY KEY,
	filename	VARCHAR(255),
	user_id		INTEGER		REFERENCES users(id) --FK: 사진 게시자의 PK로 연결
);

-- photos 레코드 등록
INSERT INTO
	photos(filename, user_id)
VALUES
	-- 1번 유저의 사진 업로드
  ('cat-on-road.jpg',           1),
  ('sunset-over-the-ocean.jpg', 1),
  ('andromeda-galaxy.jpg',      1),
  -- 2번 유저의 사진 업로드 
  ('white-tiger.jpg',        2),
  ('nero-the-black-cat.jpg', 2)
;

-- photos recode 조회
SELECT
	*
FROM
	photos
;

comments table 생성 및 데이터 추가

참고로, 노란부분 설명을 하자면 photo_id 1번인 그림에 user_id가 1번인 user가 meow라는 댓글을 달았다

-- comments 테이블 생성
CREATE TABLE comments (
  id       SERIAL         PRIMARY KEY, -- PK
  body     VARCHAR(1000),
  user_id  INTEGER        REFERENCES users(id), -- FK: 댓글 작성자
  photo_id INTEGER        REFERENCES photos(id) -- FK: 댓글이 달린 사진
);

-- comments 레코드 등록
INSERT INTO
  comments(body, user_id, photo_id)
VALUES
  -- 1번 사진의 댓글들
  ('meow',   1, 1), -- 유저#1
  ('nyaong', 2, 1), -- 유저#2
  ('냐옹',    3, 1), -- 유저#3
  -- 2번 사진의 댓글들
  ('sunset',         1, 2), -- 유저#1
  ('falling slowly', 2, 2), -- 유저#2
  -- 3번 사진의 댓글들
  ('Andromeda galaxy', 1, 3), -- 유저#1
  ('mysteriouse..!',   3, 3)  -- 유저#3
;

-- comments recode 조회
SELECT
	*
FROM
	comments
;

 

현재 table간의 관계