SQL 정리 : RDBMS

Notura·2024년 9월 10일
post-thumbnail

RDBMS 시작

1. 여러 관계 유형

  1. One-To-Many: 일대다 관계, Has Many 관계 (ex. 학교 - 학생들)
  2. Many-To-One: 다대일 관계, Has One 관계 (ex. 직원들 - 회사)
  3. One-To-One: 일대일 관계 (ex. CEO - 회사)
  4. Many-To-Many: 다대다 관계, (ex. 과제들 - 학생들)

2. 주 키(Primary key)와 외래 키(Foreign Key)

PK : 테이블에서 하나의 행을 인식할 수 있게 하는 unique 한 속성 값

PK 규칙
1. 대부분 id 라고 불린다.
2. PK의 값은 보통 정수나 UUID 값을 가진다.
3. 절대 변하지 않는다
4. 같은 테이블에서 다른 열이 이 값을 가질 수 없다(한 행에서 중복 금지)

FK : 관계가 있는 다른 테이블의 PK 값을 가지고 있는 속성 값
🎯FK는 항상 많은 쪽의 테이블에 넣어야한다!

FK 규칙
1. 한 테이블에 여러 열이 FK를 가질 수 있다
2. 이름은 달라질 수 있고, 각 회사의 관례에 따라 다르다
3. PK와 정확히 같아야 한다.
4. 관계가 바뀌면 바뀔 수 있다.

3. 관계형 테이블 생성 실습

일대다 관계 테이블(유저 - 사진들)

CREATE TABLE users (
  id SERIAL PRIMARY KEY, // 주 키 표시
  username VARCHAR(50)
);
CREATE TABLE photos (
  id SERIAL PRIMARY KEY,
  url VARCHAR(200),
  user_id INTEGER REFERENCES users(id) // FK, REFERENCES로  참조하는 컬럼 입력
);

3.5 관계형 테이블에서 제약사항

FK INSERT 제약사항

photos 테이블의 FK인 user_id에 존재하지 않는 user id의 값을 준다면?
-> Error!
그러면 FK에 어느 유저도 매핑되지 않는 값을 주려면?🤔
-> NULL 값을 줘야한다

DELETE 제약

만약 photos의 user_id의 값이 참조하고 있는 user를 DELETE 하면?
-> Error!
그럼 이 제약을 Handling 하는 방법에는 어떤 것이 있을까?🤔
1. ON DELETE CASCADE : User를 삭제하면 참조하는 FK를 들고있는 컬럼들도 함께 삭제
2. ON DELETE SET NULL : User를 삭제하면 참조하는 FK를 들고있는 컬럼들은 NULL로 설정됨
3. ON DELETE SET DEFAULT: User를 삭제하면 참조하는 FK를 들고있는 컬럼들은 설정한 Default 값으로 설정됨

  • ON DELETE CASCADE 사용 코드
CREATE TABLE photos (
  id SERIAL PRIMARY KEY,
  url VARCHAR(200),
  user_id INTEGER REFERENCES users(id) ON DELETE CASCADE
);
  • ON DELETE SET NULL 사용 코드
CREATE TABLE photos (
  id SERIAL PRIMARY KEY,
  url VARCHAR(200),
  user_id INTEGER REFERENCES users(id) ON DELETE SET NULL
);
profile
고통을 즐기자

0개의 댓글