[개념은 호옹~, 실습 빡]
SQL 데이터 분석, 활용!
참고사이트:
일대다 관계(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
유저들이 사진을 등록할 경우
id 는 PK 로 선언해주고
user_id 는 FK 로 선언해준다
id 를 PK 로 주려면
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를
가르키는지를 지정해준다
'> 프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL 데이터 분석, 활용!] 섹션 4. 테이블 조인 (0) | 2023.02.14 |
---|---|
[SQL 데이터 분석, 활용!] 섹션 2. 일대다, 다대다 관계 (0) | 2023.02.13 |
[SQL 데이터 분석, 입문!] 섹션 3. 시간 값 필터링 (0) | 2023.02.10 |
[SQL 데이터 분석, 입문!] 섹션 2. 집계 함수 (0) | 2023.02.09 |
[SQL 데이터 분석, 입문!] 섹션 1. 데이터 필터링 (0) | 2023.02.09 |