본문 바로가기
> 프로그래밍 언어/SQL

[SQL 데이터 분석, 활용!] 섹션 1. 일대다 관계

by 자몽주스 2023. 2. 13.
728x90
반응형

[개념은 호옹~, 실습 빡]

SQL 데이터 분석, 활용!

참고사이트:

SQL, 데이터 분석! | CloudStudying

일대다 관계(feat. 인스타그램)
일대다 관계 무엇?

One - to - Many

일대다관계:

하나의 데이터가

여러 데이터를 포함하는 하는 관계 

인스타그램에 여러개 사진

올릴 수 있는 것 처럼  

하나의 데이터가 여러 데이터를 포함

 One - to - Many는 거꾸로

Many의 관점으로 바라보게 되면,

다대일관계

Many - to - One 으로 볼 수 있다

 One - to - Many

Many - to - One

활용도

1번과 2번 유저가

각각 사진을 등록한다고 칠 때,

 사진이 업로드 되고,

업로드된 데이터들이

각각 photos 테이블

레코드로 등록 된다

 

photos 레코드에는

해당 사진을 등록한 유저들의

아이디가 등록되게 된다

(user_id)

 

다수가 되는 photos table 에서

사진을 등록한 유저의 아이디

가리키게 함으로써

 

 일대다관계

다대일관계가

성립하게 되는 것

 

각 레코드의 대푯값을 PK 라고 함

 

PK를 가리키는 컬럼을

FK 라고도 한다

 

PK FK 의 연결을 통해서

데이터가 형성된다

PK 와 FK 개념 

PK:

레코드를 대표하는 값

 

주민등록번호

같은 걸로 이해하면 좋음

(primary key)

 

보통 id 컬럼으로 명령되고

db에 의해 자동생성된다

PK 생성방법:

1) 먼저 column name id 로 지정

2) SERIAL 타입으로 값을 자동생성하게 하고

(SERIAL -  자동생성되는 값)

3) primary key를 추가해서

레코드의 대푯갑을 지정

용도에 따라 다르게 쓰임

(MySQL / Oracle)

FK:

관계형성을 위한 컬럼

 

컬럼타입을 적고

REFERENCES 적어준 다음

해당 컬럼이

PK를 가리키도록 설정

 

인스타그램 DB #1

primary key

table 설정

3명의 유저가 가입된 상황이라고 치면

INSERT INTO 를 사용해서

users 테이블에 넣어준다

근데 nickname 하고 email 만 넣어준다

-> primary key 는 자동생성되므로

넣어주지 않아도 알아서 insert 된다

왼쪽 표처럼 만들기 위해

값을 넣어준다

 

닉네임하고 이메일을 넣어줌

조회하면 다음과 같은

결과를 얻게됨

인스타그램 DB #2

유저들이 사진을 등록할 경우

 

idPK 로 선언해주고

user_idFK 로 선언해준다 

idPK 로 주려면

SELIAL 타입으로 선언

FK:

PK 를 가리켜서

관계를 만듦

 

user_id 는 숫자타입이니까

INTEGER

 

그리고 FK로 선언한다

(사진 게시자의 PK로 연결)

 

REFERENCES 사용해서

users 테이블PK를 가리키게 하면된다

1번 유저가 등록한 

3개의 사진과

2번 유저가 등록한

2개의 사진을 추가해보기

 

id PK니까

filename 하고 user_id만 넣어주기

VALUES

값을 넣어준다

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

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

1번 유저 사진인지

2번유저의 사진인지는

 뒤에 맞춰서 넣어줌

, 1

, 2

user_id는 FK

인스타그램 DB #3

-comment 테이블 만들기-

 

자동으로 값이 들어갈 수 있도록

id 를 primary key 처리해준다

(PK)

 

body :

댓글내용

user_id:

댓글을 누가 작성했는지 FK 설정

(댓글작성자)

(FK)

 

REFERENCES를 선언해줌

id INTEGER 타입인 걸 설정

photo_id:

댓글이 어떤 사진에 달있는지 설정

(FK)

 

photos 의 id 타입을 봤더니

INTEGER 타입.

3개의 댓글이 1번 사진에 달려있는 경우

1번 사진에 달려있는 댓글이라는 뜻,

 

1번 째 댓글은 유저 아이디 1번이 달았고

2번 댓글은 유저아이디 2번

3번은 3번이 단 상태.

- 코멘트 레코드 작성 -

primary key 인 id 만 제외하고 작성

(body, user_id, photo_id)

 

화살표 대로 연결 된다

1번 유저가 댓글을 단 것.

좌측 색칠 된 표를

우측에다가 타이핑 한 것

나머지 부분도 타이핑

일대다 관계 요약

3개의 테이블 관계 연결

각각의 id 값

PK로 선언했었음

그리고 이들의 관계를 연결 시켜주기 위해

FK를 선언

 

화살표:

1번 유저가 등록한 사진과

2번 유저가 등록한 사진

PK와 FK의 연결관계

PK:

PRIMARY KEY를 선언해주고

타입을 SERIAL로 준다

FK:

REFERENCES라는 키워드를 주고

어떤 테이블의 어떤 FK

가르키는지를 지정해준다

 

 

728x90
반응형