[Database] 관계형 데이터베이스 설계

Gogh·2023년 1월 2일
0

Database

목록 보기
3/3

🎯 목표 : 관계형 데이터 베이스의 Schema & Query Design의 개념과 설계 학습

📒 관계형 데이터베이스

엑셀 시트와 유사하게 생겼으며. 하나의 CSV파일이나 엑셀 시트를 한개의 테이블로 저장할수 있다.

한번에 여러개의 테이블을 가질수 있기 때문에 SQL을 활용해 데이터를 불러오기 용이하다.

  • 데이터(Data) : 각 항목에 저장되는 값.
  • 테이블(Table) : 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축척됨.
  • 컬럼(Column) : 데이블의 하나의 열
  • 레코드(Record) : 테이블의 하나의 행에 저장된 데이터.
  • 키(Key) : 테이블의 각 레코드를 구분할수 있는 값. 레코드마다 고유한 값을 가지며 Primary key, Foreign Key등이 있다.
  • 스키마(Schema) : 데이터베이스를 구성하는 레코드의 크기, 키 의 정의, 레코드와 레코드의 관계, 검색방법등을 정의한 것.
  • 엔티티(Entity) : 스키마에 대한 데이터를 보유하고 있는 하나의 객체

📒 관계의 종류

📌 1:1 관계

  • 1:1 관계는 하나의 레코드가 다른 테이블의 레코드 한개와 연결된 경우다.
  • 1:1 관계로 나타낼수 있는 경우라면, 관계를 가진 테이블의 레코드가 고유하다는 것이며,  해당 테이블 내에 고유한 레코드 자체를 데이터로 삽입하면 되기때문에 자주 사용하지 않는다.

📌 1:N 관계

veiw

  • 하나의 레코드가 서로 다른 여러개의 레코드와 연결된 경우다.
  • 위 그림 에서 한명의 User는 여러개의 Post(게시물)을 등록할수 있다.
  • 그러나 하나의 게시물이 여러명의 User를 가질수 없는 관계다.

📌 N:M 관계

veiw

  • 여러개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우다.
  • N:M의 관계를 나타내기 위해 스키마 디자인에서 Join 테이블을 별도로 만들어 관리한다.
  • 예를 들면 인스타그램의 하나의 Post(게시물)은 여러 Hashtag를 가질수 있다.
  • 하나의 해시테그도 여러개의 게시물을 가질수 있다.
  • 이러한 관계를 표현할때는 관계가 있는 다른 두 테이블을 이어주는 새로운 테이블(Post_has_Hastag)을 만들어 두 테이블 간의 관계를 표현할수 있다.
  • 하나의 게시물이 어떤 해시테그를 가지고 있는지 하나의 해시테그에 어떤 게시물들이 속해 있는지를 표현하기 위해 Post_id 와  Hashtag_id를 필드로 가지고 있으며, Join 테이블이라도 각 레코드를 구분할수 있는 Primary Key가 있어야 한다.
  • 이렇게 별도의 Join 테이블 없이 각 테이블에서 Foreign Key를 리스트형식으로 가지는 방식으로 데이터를 관리한다면, 데이터의 크기를 가늠할수 없게되며, 리스트를 조회하는데 많은 비용이 발생하게 되고, 각 테이블의 데이터를 별도로 수정해야 되는 경우가 생기기 때문에 관리가 매우 어렵다.

📌 자기 참조 관계(Self Referencing Relationship)

view

  • 하나의 테이블 내에서의 관계를 말한다.
  • 회원과 추천회원의 관계로 예를 들수 있다,
  • 한명의 회원은 한명의 추천인을 가질수 있고, 여러명의 회원이 한명의 회원을 추천인으로 등록할수 있다.
  • 1:N의 관계와 유사하지만, 일반적인 관계는 서로 다른 테이블의 관계를 나타낼때 표현하기 때문에 자기 참조 관계라고 표현한다.
  • 회원은 User , 추천회원은 recommendUser_id로 구분한다.
profile
컴퓨터가 할일은 컴퓨터가

0개의 댓글