-
primary key & Foreign KeyDB/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