[SQL] 데이터 분석, 활용 _ 일대다 관계

강지영·2023년 2월 20일
0

📚 일대다 관계(One to Many)

  • 1 : N Relationship(has_many)
  • 하나의 데이터가 여러 데이터를 포함하(가지)는 관계

    ex) 장바구니에 담긴 상품 목록, 기사에 적힌 댓글들 ***

💡 1 : N / N : 1 관계는 실제 DB에서 대표값인 PK와 이를 가리키는 FK간의 연결을 통해 형성된다.

PK(Primary Key)

  • 레코드를 대표하는 값 (일종의 주민등록번호)
  • 하나의 PK는 오직 하나의 레코드를 대표
    이는 보통 id column으로 명명되고, DB에 의해 자동 생성된다.
-- 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,	
    ...
);

FK(Foreign Key)

  • 관계 형성을 위한 컬럼
CREATE TABLE phtos (
	...
    user_id INTEGER PERFERENCES users(id),	-- Column Name, Column Type, Setting Foreign Key(Target PK)
    
);

users 테이블 생성하기

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

users 레코드 등록

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

photos 테이블 생성 | 잘못된 컬럼명 변경

-- 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 레코드 등록

-- 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 테이블 생성

-- 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 레코드 등록

-- 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번 유저
profile
Hello World!

0개의 댓글