[DB] 데이터베이스 기본

EHOI·2023년 1월 31일
0

DB

목록 보기
1/6

데이터베이스란?

  • 데이터의 모음이다.
  • 그런데 약속된 규칙에 의해 구조화를 곁들인
  • 데이터베이스를 관리하는 시스템을 DBMS라고 한다
  • DB 종류에 따라 쿼리 언어가 달라진다
    • RDBMS(MySQL, PostgreSQL, SQL Server 등) : SQL 이용
    • NoSQL(MongoDB, Redis 등) : 쿼리 말고 함수 같은 것.. (?) 이용

엔터티

  • 예를 들어 쇼핑몰 서비스를 만들려고 한다.
  • 그러면 회원, 주문, 배송, 물품 등의 엔터티가 필요하다.
  • 서비스의 요구사항을 만족시키기 위해 필요한 것!
  • 약한 엔터티 : 강한 엔터티 = 화장실 : 집 = 화장실 : 사무실 (뭐 이쯤이려나..)

릴레이션

  • 흔히 ‘테이블’로 이해하고 있는 것으로
  • 쇼핑몰 데이터베이스 안에 회원 테이블, 주문 테이블, 배송 테이블 이렇게 있는 각각의 테이블을 릴레이션이라 한다.
  • NoSQL 데이터베이스에서는 이를 ‘컬렉션’이라고 부른다고 한다.

속성

  • 위에서 계속 예를 들고 있는 회원 엔터티로 설명하면
  • 우리 서비스의 요구사항에 따라 필요한 [아이디, 이름, 성별, 연령대, 주소, … 등]을 속성이라고 한다.

도메인

  • 속성들이 가질 수 있는 값의 집합니다.
  • 성별이라면 남 or 여
  • 연령대라면 10대, 20대, 30대 등

날짜 타입

  • 날짜만 : DATE
  • 날짜 + 시간 : DATETIME
  • 날짜 + 시간 : TIMESTAMP
    • DATETIME과 차이점은 1970-01-01 00:00:01 부터 카운트를 한 값이라고 한다.
    • 메모리적으로도 차이가 있는데 DATETIME은 8바이트, TIMESTAMP는 4바이트

문자 타입

  • CHAR, VARCHAR
    • CHAR : 고정, 4바이트로 선언해두면 어떤 길이의 값을 배정하든 무조건 4바이트다.
    • VARCHAR : 가변, 입력된 데이터에 따라 유동적으로 메모리가 변경되어 저장된다.
      • 여기서 추가적으로 안 사실 : VARCHAR는 길이 기록용 1바이트가 추가로 같이 저장된다고 한다.
  • TEXT, BLOB
    • 얘네들은 일단 큰 문자 데이터를 저장할 때 사용
    • TEXT는 게시판에 뭐 글을 쓴다거나 뭔가 과연 얼마나 글을 작성할지 가늠이 안가는 그런 곳에 사용하는 것 같다. 프로젝트에서 항상 VARCHAR로 사용했었는데 TEXT를 써야겠다, 앞으로는.
    • BLOB은 이미지, 동영상 등 큰 데이터를 저장할 때 사용하는 거라고 한다. 프로젝트 할 때 뭔가 이런 단어를 본 것 같다. 제대로 몰라서 눈에 익혀만 뒀는데. 쨌든 요즘엔 아마존 서비스 S3 같은 호스팅 서비스를 이용해서 서버에 올리고, 우리는 그 서버 링크를 VARCHAR로 DB에 저장해둬서 잘 사용하지 않는다고 한다.

관계

이 부분은 내가 프로젝트 때 사용한 ERD를 바탕으로 설명해야겠다.

  • 일대일 관계
    • 퍼스널 컬러를 진단하기 위해서 전문가 진단을 했다면 그 결과도 하나일 것이다. 그 이상일 수 없다.
  • 일대다 관계
    • 고객이 컨설팅을 하기 위한 예약은 여러 번 할 수 있다.
    • 고객이 컨설팅에 대한 후기도 여러 개 작성할 수 있다.
    • 컨설턴트의 휴무일은 여러 개 일 수 있다.
  • 다대다 관계
    • 고객은 여러 컨설턴트를 만날 수 있고, 컨설턴트도 여러 고객을 만날 수 있다.
    • 쇼핑몰에서 고객은 여러 상품을 살 수 있고, 상품도 여러 고객에 속할 수 있는 것도 있다.

  • 기본키
    • 일단 기본키부터 설명하면, Primary Key, PK 등 다양하게 부른다.
    • 여러 데이터들 중에서 이 기본키를 대면 특정 데이터 하나를 가져올 수 있다.
    • 마치 학생 때 25번! 하면 네~ 하던 것처럼
    • 이름으로 부르면 키 큰 박태이인지, 키 작은 박태이인지 처럼 중복될 수 있지만
    • 기본키로 데이터를 찾으면 무조건 유일한 데이터를 가져올 수 있다.
    • 그리고 이 키 하나로 찾아낼 수 있으므로 최소성이라는 특징도 지닌다.
      • 25번인 박태이와 26번 박태이라고 복합적으로 부르면 이 역시 특정 데이터를 찾아낼 수는 있지만 최소성을 만족하지 않는다.
    • 결론 : 유일성과 최소성을 가지는 여러 키 중에 이걸로 데이터를 찾아내겠다고 결정하면 그게 기본키다.
  • 자연키
    • 중복되는 값을 모두 제외하고 남은 값을 자연키라고 하는데
    • 주민등록번호가 대표적인 예다.
    • 하지만 지금은 유일하다고 할지라도 언젠가 변할 수 있다는 속성을 가지고 있다.
      • 1947년생과 2047년생의 구분을 위한 추후 조치가 생긴다면.. 변할 수 있다!
  • 인조키
    • 그래서 우리는 임의로 우리가 키를 만든다.
    • 그래서 자연키와 반대되는 용어로 인조키라고 명명했다.
    • 고객 테이블이라면 고객이 지정하는 id 외에 개발자가 pk용으로 인조키를 만들어서 새롭게 엔터티가 생성될 때마다 auto increment 되어 넘버링 할 수 있도록 한다.
    • 이를 pk로 사용한다.
  • 외래키
    • 다른 테이블의 pk를 그대로 참조하는 키를 foreign key 라고 한다.
    • 예를 들어 위의 erd에서 예약 테이블에 고객 테이블의 pk인 고객_id와 컨설턴트 테이블의 pk인 컨설턴트_id를 사용하는 것과 같다.
  • 후보키
    • 기본키가 될 수 있는 후보들이다.
  • 대체키
    • 기본키가 되지 못한 탈락한 키들이다.
    • 후보키 = 기본키 + 대체키 요론 느낌
profile
#성장 #단단함 #평온함

0개의 댓글