[DataBase] DataBase and its Component

먹보·2023년 2월 15일
1

MUK_BO's DataBase

목록 보기
1/6

✍ 데이터베이스 (Database, DB)

데이터베이스란 일정한 규칙 또는 규약을 통해 구조화되어 저장되는 데이터의 모음이며, 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS라고 한다. 구조화 방식에 따라 크게 RDMBS과 NoSQL로 나뉘며 정의된 쿼리 언어(Query Language)를 통해 데이터가의 삽입, 삭제, 수정, 조회등을 할 수 있다.

실제 웹서비스 상에서는 위와 같이 서비스가 구성되어 있으며, User가 클라이언트에서 특정 행위를 했을 경우, API가 작동하여 DBMS에 접근하면 DBMS에 들어오는 요청의 쿼리 언어에 따라 DB에서 정보를 CRUD(Create, Read, Update, Delete) 해온다.

✍ 데이터베이스의 구성요소 (Components)

📝 엔터디 또는 엔티티(Entity)

필자는 엔티티라고 발음하지만 실질적으로는 두 개가 같다고 보면 된다 (발음의 차이)

엔티티는 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미한다.

=> 예를 들어 설명하자면, 집이라는 엔티티에는 거실, 안방, 주방, 화장실, 등의 속성을 가지고 있다라고 표현할 수 있다.

실제 서비스에서는 표현이 약간 다를 수 있지만, 보통 ORM(프로그래밍 언어를 쿼리언어로 바꿔주는 프로그램)에서는 Entity라고 하면 하나의 큰 테이블이라고 보면 된다.

엔티티에도 종속 관계에 따라 강/약이 나눠지게 되는데

✏️ 강한 엔티티

무엇에도 종속되지 않고 독자적으로 남아 있는 엔티티

✏️ 약한 엔티티

다른 엔티티에 종속되어야지만 쓰일 수 있는 엔티티

📝 릴레이션 (Relation)

릴레이션은 데이터베이스에서 정볼르 구분하여 저장하는 기본 단위이다.

하나의 엔티티 내에서 데이터가 표현되는 방식이라고 알고 있으면 편하다.

관계형 데이터베이스(RDBMS)에서는 엔티티 내부에서 릴레이션이 테이블방식이며, NoSQL 데이터베이스에서는 엔티티 내부가 컬렉션으로 표현된다.

=> 예를 들어, RDBMS의 대표격인 MySQL에서는 레코드-테이블-데이터베이스 형식으로 데이터가 관리되며, NoSQL의 대표격인 MongoDB에서는 Document-컬렉션-데이터베이스로 데이터가 관리된다고 볼 수 있다.

📝 속성 (Attribute)

릴레이션에서 관리하는 구체적이며 고유한 이름을 가지고 있는 정보

=> 예를 들어, 1학년 1반이라는 엔티티가 있으면 그 안의 속성으로는 번호, 이름, 성별, 키, 등이 속성으로 있을 수 있다.

📝 도메인 (Domain)

쉽게 말해, 각 속성이 가질 수 있는 데이터 값의 집합이다.

=> 학급의 성별은 남과 여 밖에 없으니, 성별의 도메인은 남과 여라고 볼 수 있다.

📝 필드(field) & 레코드 or 튜플 (Record)

실제로 엔터티를 구성하고 있는 테이블(MySQL)을 보면 다음과 같다.

=> 테이블 플러스라는 MySQL의 GUI를 사용하여 클론 프로젝트의 제품(엔티티)를 가져와 봤다.

상기 엔티티를 기준으로 간략하게 설명할 예정이다.

✏️ 필드 (Field)

필드란 하나의 엔티티 내의 속성 하나 하나를 필드라고 말하며, 위의 표에서는 name, capacity_ml, description등이 필드라고 할 수 있다.

필드 타입으로는 다음이 있다.

  1. 숫자 : TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
  2. 날짜 : DATE, DATETIME, TIMESTAMP
  3. 문자 : CHAR, VARCHAR, TEXT(큰 문자열), BLOB(이미지, 동영상), ENUM, SET
    => CHAR vs VARCHAR는 가장 대표적으로 비교되는 필드 타입인데, CHAR는 한 번 고정값을 넣어버리면 그 것보다 적은 양의 데이터 값을 넣더라도 고정된 값만 큼의 용량을 차지하고 VARCHAR는 고정 값을 넣더라도 들어오는 데이터의 값에 따라 유동적으로 크기를 변화한다.

✏️ 레코드 or 튜플 (Record or Tuple)

레코드 또는 튜블이란 테이블에서 여러 개의 속성에 대한 값을 하나의 행(Row) 단위로 묶어 놓은 것으로 상기 이미지를 근거로 하면, 한 줄의 데이터라고 볼 수 있다.

📝 관계 (Relationship)

관계형 데이터베이스는 관계라는 표현 답계 테이블 마다 서로의 관계를 정의할 수 있는데, 관계는 다음과 같은 유형으로 정의 될 수 있습니다.

=> 관계 이해가 어려울 때는 수학 함수로 생각하면 편하고 그것도 어려울 시에는 실제 사용 예시를 통해 생각해보면 된다.

프로젝트의 기획 단계에서 데이터베이스를 구성하는 엔티티를 만들고 그 엔티티의 필드에 타입을 부여하면서 관계들도 정립하게 되는데 그럴 때마다 말을 뱉어보면서 관계를 정립하면 된다.

다음 관계 이야기를 다룰 때, 실생활의 예제를 들어서 설명해보겠다.

✏️ 1:1 (일 대 일)

한 명의 유저가 하나의 이메일을 가지고 있듯이, 엔티티 내부의 하나의 레코드가 다른 엔티티의 단 하나의 레코드하고 만 관계를 가질 경우

✏️ 1:N (일 대 다)

한 명의 유저가 글을 여러개 쓸 수 있으면 일 대 다라고 생각하면 된다. 글 하나는 여러 명의 저자를 (특수 케이스 제외) 가질 수 없기 때문에 일 대 다가 보통 적용 된다.

✏️ N:N (다 대 다)

한 명의 유저가 여러 개의 게시글을 좋아할 수 있고 하나의 게시글은 여러명의 유저에게 좋아요를 눌림 받을 수(?) 있기 때문에 좋아요라는 기능면에서는 유저와 게시글이 다 대 다 관계를 가질 수 있다.

📝 키 (Keys)

위에서 언급하였듯이 테이블을 기획하게 되면 관계를 정립하게 되는데 이 때 관계를 조금 더 명확하게 도와 줄 수 있는 것이 바로 이다.

✏️ 기본 키 (Primary Key)

기본키(Primary Key)라고 하며 줄여서는 PK 유일성과 최소성을 가진다.

자연키

자연 키는 중복 될 수 없는 값들을 가지게 되는 필드를 뜻하며, 언젠가는 변할 수 있는 속성이 된다.

인조키

일반적으로 기본 키에 대체적으로 많이 쓰이게 되는 키 값이며 MySQL에서는 AutoIncrement로 설정 한다.

✏️ 외래 키 (Foreign Key)

다른 테이블의 기본 키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용된다.

=> 외래 키는 기본키와 다르게 중복이 가능하다.

✏️ 후보 키 (Candidate Key)

기본키와 동일하게 유일성과 최소성을 동시에 만족하며 기본키를 대체 할 수 있다.

✏️ 대체 키 (Alternate Key)

후보 키가 두 개 이상일 경우 기본키를 지정한 후 남겨진 나머지를 뜻 한다.

✏️ 슈퍼 키 (Super Key)

각 레코드 별 유일성을 갖춘 키를 뜻 한다.

오늘 알아본 것은 깊게가 아닌 데이터베이스를 공부하기 시작하면 알아야 되는 기본적인 명칭만 모아놓은 것으로 각 데이터베이스의 개념을 배우게 될 때 자주 사용하게 될 용어들이니 꼭 알아두고 넘어가자.

특히 필자는 MySQL을 주로 사용하는 백엔드 개발자이다보니 주로 거기에 나온 예제들을 통해 개념들을 다뤄볼 생각이다.

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글