ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • primary key & Foreign Key
    DB/Postgresql(DB) 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를 잘다루는 개발자가 되어야 될거같다.

    'DB > Postgresql(DB)' 카테고리의 다른 글

    그룹화(Group By 와 집계 함수)  (0) 2023.11.28
    Join  (0) 2023.11.28
    시간값 필터필(타임스탬프,extract,to_char)  (1) 2023.11.27
    WHERE 절  (1) 2023.11.27
    DB 구문 기본 ( CRUD)  (1) 2023.11.27
Designed by Tistory.