ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스의 기본
    CS/데이터베이스 2022. 6. 11. 17:14
    728x90

    데이터베이스(DB, DataBase)

    • 조직의 여러 응용 시스템들이 공용하기 위해 통합저장한 운영 데이터의 집합을 의미
    • 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System)라고 한다.
    • DB 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다.
    • 실시간 접근동시 공유가 가능하다.

     

    응용 프로그램
    DBMS
    데이터베이스

     

     

    엔티티(Entity)

    • 엔티티는 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미한다.
    • 예를 들어 회원이라는 엔티티가 있다면 회원은 이름, 아이디, 주소, 전화번호의 속성을 갖는다.
    • 속성은 서비스의 요구 사항에 맞춰 속성이 정해진다.

    약한 엔티티와 강한 엔티티

    A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔티티이고 B는 강한 엔티티이다.

    방은 건물 안에만 존재하기 때문에 방은 약한 엔티티라고 할 수 있고 건물은 강한 엔티티라고 할 수 있다.

     

     

    릴레이션(relation)

    • 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
    • 데이터베이스는 엔티티에 관한 데이터를 릴레이션 하나에 담아서 관리한다.
    • 릴레이션은 관계형 데이터베이스(RDBMS)에서 '테이블'이라고 하며, NoSQL 데이터베이스에서는 '컬렉션'이라고 한다.

     

    테이블과 컬렉션

    데이터베이스는 크게 관계형 데이터베이스(RDBMS)와 NoSQL 데이터베이스로 나눌 수 있다. 대표적인 관계형 데이터베이스는 MySQL(구조: 레코드 - 테이블 - 데이터베이스)이 있고, 대표적인 NoSQL 데이터베이스는 MongoDB(구조: 도큐먼트 - 컬렉션 - 데이터베이스)가 있다. 

     

    레코드가 쌓여 테이블이 되고 테이블이 샇여 데이터베이스가 된다.

     

     

    속성(Attribute)

    속성은 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보다. 예를 들어 '차'라는 엔티티의 속성은 차 번호, 바퀴 수, 차 색깔, 차종 등이 있다. 이 중에서 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔티티의 속성이 된다.

     

     

    도메인(domain)

    릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 말한다. 예를 들어 성별이라는 속성이 있다면 도메인은 {남,여} 이다.

     

     

    필드와 레코드(Field & Record)

    member (table name)

    name ID address <- 필드(field)
    가나 gana 서울 <- 레코드(record)
    다라 dara 경기 <- 레코드(record)
    마바 maba 충청 <- 레코드(record)

    회원이란 엔티티는 member라는 테이블로 속성인 이름, 아이디, 주소 등을 가지고 있으며 name, ID, address의 필드를 가진다. 

    이 테이블에 행(row) 단위의 데이터를 레코드 또는 튜플이라고 부른다.

     

    필드 타입

    필드는 타입을 갖는다.(MySQL 기준)

     

    • 숫자

    TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 등이 있다.

    타입 용량(바이트) 최솟값(부호 있음) 최솟값(부호 없음) 최댓값(부호 없음) 최댃값(부호 있음)
    TINYINT 1 -128 0 127 255
    SMALLINT 2 -32768 0 32767 65535
    MEDIUMINT 3 -8388608 0 8388607 16777215
    INT 4 -2147483648 0 2147483647 4294967295
    BIGINT 8 -263 0 263-1 264-1

     

    • 날짜

    DATE, DATETIME, TIMESTAMP 등이 있다.

     

    - DATE(3 Bytes)

    날짜 부분은 있지만 시간 부분은 없는 값에 사용됩니다. 지원되는 범위는 1000-01-01 ~ 9999-12-31이다.

     

    - DATETIME(8 Bytes)

    날 짜 및 시간 부분을 모두 포함하는 값에 사용된다. 지원되는 범위는 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 이다.

     

    - TIMESTAMP(4 Bytes)

    날짜 및 시간 부분을 모두 포함하는 값에 사용된다. 지원되는 범위는 1970-01-01 00:00:01에서 2038-01-19 03:14:07 이다.

     

    • 문자

    CHAR, VARCHAR, TEXT, BLOB, ENUM, SET이 있다.

     

    - CHAR

    안에 수를 입력해서 몇 자까지 입력할지 정한다. 예를 들어 CHAR(30)이라면 최대 30글자까지 입력할 수 있다.

    CHAR는 테이블을 생성할 때 선언한 길이로 고정되며 길이는 0 ~ 255 사이의 값을 가진다. 레코드를 저장할 때 무조건 선언한 길이 값으로 '고정'해서 저장된다.

     

    - VARCHAR

    안에 수를 입력해서 몇 자까지 입력할지 정한다. 가변 길이 문자열이며 길이는 0 ~ 65,535 사이의 값으로 지정할 수 있다.

    입력된 데이터에 따라 용량을 가변시켜 저장한다. 예를 들어 큰 길이를 입력해도 10글자의 이메일을 저장할 경우 (10글자 해당하는 바이트 + 길이기록용 1바이트)로 저장하게 된다. 

     

    - CHAR와 VARCHAR

    지정된 형태에 따라 저장된 CHAR의 경우 검색에 유리하며, 검색을 별로하지 않고 유동적인 길이를 가진 데이터는 VARCHAR로 저장하는 것이 좋다.

     

    - TEXT

    큰 문자열을 저장할 때 쓰는 타입으로 주로 게시판의 본문을 저장할 때 쓴다.

     

    - BLOB

    이미지, 동영상 등 큰 데이터 저장에 쓴다. 그러나 보통은 아마존의 이미지 호스팅 서비스인 S3를 이용하는 등 서버에 파일을 올리고 파일에 관한 경로를 VARCHAR로 저장한다.

     

    - ENUM

    'x-small', 'small', 'medium', 'large', 'x-large' 형태로 쓰이며 이 중에서 하나만 선택하는 단일 선택만 가능하고 ENUM 리스트에 없는 잘못된 값을 삽입하면 빈문자열이 대신 삽입된다. ENUM을 이용하면 x-small 등이 x-small 등이 0, 1등으로 매핑되어 메모리를 적게 사용하는 이점을 얻는다. (최대 65,535개의 요소들을 넣을 수 있다.)

     

    - SET

    ENUM과 비슷하지만 여러 개의 데이터를 선택할 수 있고 비트 단위의 연산을 할 수 있으며 최대 64개의 요소를 집어넣을 수 있다.

     

    - ENUM과 SET

    ENUM과 SET은 공간적으로 이점을 볼 수 있지만 애플리케이션의 수정에 따라 데이터베이스의 ENUM이나 SET에서 정의한 목록을 수정해야 한다는 단점이 있다.

     

     

    관계(Relation)

    데이터베이스에는 여러 개의 테이블이 존재하고 이 테이블들은 서로 관계가 정의되어 있다.

    https://freehoon.tistory.com/60

     

    1:1 관계

    1:1 관계

    유저당 유저 이메일은 한 개씩 있으므로 1:1 관계가 된다. 1:1 관계는 테이ㅡㄹ을 두 개의 테이블로 나눠 테이블의 구조를 더 이해하기 쉽게 해준다.

     

    1:N 관계

    1:N 관계

    한 개체가 다른 많ㅇ은 개체를 포함하는 관계

     

    쇼핑몰을 운영한다고 했을 때, 한 유저당 여러 개의 상품을 장바구니에 넣을 수 있다면 이 관계는 1:N 관계가 된다. 

    만약 하나도 넣지 않는 0개의 경우도 있으니 0도 포함되는 화살표를 통해 표현해야 한다.

     

    N:M 관계

    N:M 관계

    학생과 강의의 관계를 정의한다면 학생도 강의를 많이 들을 수 있고 강의도 여러 학생들에게 선택을 받을 수 있다.

    이렇게 다수가 다수를 선택하는 관계가 N:M 관계이다.

     

    그림을 보면 학생 강의 테이블이 끼어 있는데, N:M 관계는 테이블 두 개를 직접적으로 연결해서 구축하지는 않고 1:N, 1:M 관계를 갖는 테이블 두 개로 나누어 설정한다.

     

     

    키(Key)

    키(Key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 Attribute(속성) 

     

    테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있다.

    http://wiki.hash.kr/index.php/%EB%8C%80%EC%B2%B4%ED%82%A4

     

    슈퍼키는 유일성을 가지며, 후보키는 유일성과 최소성을 갖춘 키이다.

    후보키 중에서 기본키로 선택되지 못한 키는 대체키가 된다. 유일성은 중복되는 값은 없으며, 최소성은 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것을 말한다.

     

    기본키(Primary Key)

    PK 또는 프라이머리키라고 많이 부르며, 유일성과 최소성을 만족하는 키, 테이블의 데이터 중 고유하게 존재하는 속성

     

    ID name
    A-0001 점퍼
    A-0002 바지
    A-0002 바지
    A-0003 니트

    기본키에 해당하는 데이터는 중복이 되어서는 안된다. ID라는 필드는 A-0002는 중복이 되기 때문에 기본키가 될 수 없다.

    ID name
    A-0001 점퍼
    A-0002 바지
    A-0003 바지
    A-0004 니트

    이 예시에서는 ID가 기본키가 될 수 있다. {ID, name}이라는 복합키를 기본키로 설정할 수도 있지만 최소성을 만족할 수 없다.

    기본키는 자욘키 또는 인조키 중에 골라 설정한다.

     

    - 자연키

    중복된 값들을 제외하며 중복되지 않는 것을 '자연스레' 뽑다가 나오는 키를 자연키라고 한다.

     

    예를 들어, 유저 테이블을 만든다고 가정하면 주민번호, 이름, 성별 등의 속성이 있을텐데 이 중 이름, 성별 등은 중복된 값이 들어올 수 있으므로 부적절하고 자연스레 남는 것은 주민번호이다.

     

    - 인조키

    한 테이블에 인위적으로 속성을 부여하여 고유 식별자를 생성한다. 이렇게 안위적으로 생성한 키를 인조키라고 한다. 자연키와는 대조적으로 변하지 않는다. 따라서 보통 기본키는 인조키로 설정한다.

     

     

    외래키(Foreign Key)

    FK라고도 하며, 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용한다.

     

    client table

    ID(기본키) name contact
    a_1 주홍철 112
    a_2 연제호 114

    product table

    ID user_id(외래키) name
    PDT-0001 a_2 아우디
    PDT-0002 a_2 벤츠
    PDT-0003 a_2 포르쉐

    외래키는 중복되어도 괜찮다. 앞의 그림을 보면 client 테이블의 기본키인 ID가 product 테이블의 user_id라는 외래키로 설정되어 있다.

     

    후보키(Candidate Key)

    기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키

     

    대체키(Alternate Key)

    후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키들을 말한다.

     

    슈퍼키(Super Key)

    각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키

    728x90

    'CS > 데이터베이스' 카테고리의 다른 글

    조인의 종류와 원리  (0) 2022.06.14
    제 1 정규화  (0) 2022.06.12
    RDBMS vs NoSQL  (0) 2022.04.13

    댓글

oguuk Tistory.