DB/Postgresql(DB)

primary key & Foreign Key

jinpark1992 2023. 11. 27. 17:05

1. Primary Key

 

- FK

 

 

 

 - 코드 정리 

더보기

// 회원 조회
SELECT
*
FROM
USERS;

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

-- users 레코드 등록
INSERT INTO 
users(nickname,email)
VALUES
('cloudstudying_kr', 'mail@cloudstudying.kr'),
('hongpark_cs',      'sehongpark@cloudstudying.kr'),
('haesamq',          'haesamq@naver.com')
;

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

-- photos 데이터 등록 for user #1
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 조회
SELECT * FROM photos;

-- comments 테이블 생성 
CREATE TABLE comments (
 id SERIAL PRIMARY KEY, --PK
 body VARCHAR(1000),
 user_id INTEGER REFERENCES users(id), -- FK : 댓글 작성자 USERSID는 INT 타입이라 INTEGER로 선언
 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 조회 
select * from comments;

 

 

 

- 코드 요약

더보기

-- setting 테이블 생성 
CREATE TABLE settings(
 id SERIAL PRIMARY KEY,-- PK
 private Boolean, -- BOOLEAN: 참(TRUE)/거짓(FALSE)
 adding_photos VARCHAR(15),
 user_id  INTEGER UNIQUE REFERENCES users(id)-- FK: 개인설정 유저(1:1)
); -- 1:1 연결을 위해 UNIQUE 를 넣어줌 

-- settings 레코드 생성
INSERT INTO
  settings(private, adding_photos, user_id)
VALUES
  (FALSE, 'MANUAL', 1), -- 유저#1
  (FALSE, 'AUTO',   2), -- 유저#2
  (TRUE,  'AUTO',   3)  -- 유저#3
;

-- settings 조회
SELECT * FROM settings;

INSERT INTO
  settings(private, adding_photos, user_id)
 VALUES
 (TURE, 'AUTO', 3) -- 유저#3 : 1:1 UNIQUE 선언을 해줬기에 유저3번은 또 추가가 안됨
 ; 
 
-- likes 테이블 생성 
CREATE TABLE likes(
 id        SERIAL PRIMARY KEY, -- PK
 user_id   INTEGER REFERENCES users(id), -- FK: 좋아요를 누른 사용자(N:1)
 photo_id  INTEGER REFERENCES photos(id) -- FK: 좋아요가 달린 사진(N:1)
);

-- 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
;

-- likes 조회 
SELECT * FROM likes;
 

출저: 홍팍 (https://www.youtube.com/@hongpark)

이 블로그 기록은 개인 공부용 기록입니다.

 

 

개발을 하기 위해서는 ERD 파악도 참 중요한거 같다. 즉 DB를 잘다루는 개발자가 되어야 될거같다.