- 1 : N Relationship(has_many)
- 하나의 데이터가 여러 데이터를 포함하(가지)는 관계
ex) 장바구니에 담긴 상품 목록, 기사에 적힌 댓글들 ***
💡 1 : N / N : 1 관계는 실제 DB에서 대표값인 PK와 이를 가리키는 FK간의 연결을 통해 형성된다.
-- Postgres
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- Column Name, Auto Generated Value
...
);
-- MySQL
CREATE TABLE users (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
...
);
-- Oracle
CREATE TABLE users (
id INTEGER GENERATED ALWAYS AS IDENTITY,
...
);
CREATE TABLE phtos (
...
user_id INTEGER PERFERENCES users(id), -- Column Name, Column Type, Setting Foreign Key(Target PK)
);
-- 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),
uesr_id INTEGER REFERENCES users(id) --FK : 사진 게시자의 PK로 연결
);
-- 잘못된 컬럼명 변경
alter table photos
rename column uesr_id to user_id;
select * from photos;
-- 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');
-- comments 테이블 생성
CREATE TABLE comments(
id SERIAL PRIMARY KEY, -- PK
body VARCHAR(1000),
uesr_id INTEGER REFERENCES users(id), -- FK : 댓글 작성자
photo_id INTEGER REFERENCES photos(id) -- FK : 댓글이 달린 사진
);
-- 잘못된 컬럼명 변경
alter table COMMENTs
rename column uesr_id to user_id;
SELECT * FROM COMMENTS;
-- 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번 유저