[DB] 데이터베이스 기본 용어

HSRyuuu dev blog·2023년 4월 15일
0

DBMS(database management systems)

  • 사용자에게 DB를 정의하고, 만들고, 관리하는 기능을 제공하는 SW 시스템

metadata

  • database를 정의하거나 기술하는 데이터
  • catalog라고도 부른다
  • ex) 데이터 유형, 구조, 제약조건, 보안, 저장, 인덱스 등

database system

  • database + DBMS + 연관된 application
    -> 줄여서 그냥 database라고도 부른다.

SQL이란?

SQL : Structured Query Language

현업에서 쓰이는 relational DBMS의 표준 언어이다.

DDL, DML, VDL의 기능을 모두 다루는 종합적인 database 언어이다.

SQL에서 relation은 중복된 tuple을 허용한다. (multiset of tuples)

SQL relation 용어

  [ SQL <-> relational data model ]

  • table <-> relation
  • column <-> attribute
  • row <-> tuple
  • domain <-> domain

data models

  • DB의 구조를 기술하는데 사용될 수 있는 개념들이 모인 집합이다.
    data model은 DB 구조를 추상화해서 표현할 수 있는 수단을 제공한다.
  • 추상화 수준과 DB 구조화 방식이 조금씩 다르다.
  • DB에서 읽고 쓰기위한 기본적인 동작들도 포함된다.

data models 분류

  • conceptual (high-level) data models
  • logical (representational) data models
  • physical (low - level) data models

1. conceptual data models

개발자가 아닌 일반 사용자들도 쉽게 이해할 수 있는 개념들로 이뤄진 모델이다.
추상화 수준이 가장 높기 때문에, 비즈니스 요구사항을 추상화하여 기술할 때 사용한다.

2. logical data models

이해하기 어렵지 않으면서 디테일하게 DB를 구조화 할 수 있는 개념들을 제공한다.
데이터가 컴퓨터에 저장될 때의 구조와 크게 다르지 않게 DB 구조화를 가능하게 한다.
특정 DBMS나 storage에 종속되지 않는 수준에서 DB를 구조화 할 수 있는 모델이다.

  • relational data model을 가장 많이 사용된다. ( 테이블 형식 )

3. physical data model

컴퓨터에 데이터가 어떻게 파일형태로 저장되는지를 기술할수 있는 수단을 제공한다.
데이터가 실제로 저장장치에 저장되는 것과 밀접하게 모델링 할 수 있다. (index 등)


relational data model


Member 객체의 정보가 담긴 테이블이다.

1. 용어

  • relation : 하나의 테이블을 relation이라고 한다.
  • relation name : 테이블 명 (Member)
  • attribute : 속성 (memberId, name, loginId, password)
  • tuple : 하나의 객체 (테이블에서 하나의 row)

( tuple들의 집합을 relation 또는 relation state 라고 부르기도 한다. )

2. relation schema

  • relation의 구조를 나타낸다.
  • relation 이름과 attributes 리스트로 표기된다.
  • ex) MEMBER(memberId, name, loginId, password)
  • attribute와 관련된 constraints도 포함된다.

3. degree of a relation

  • relation schema에서 attributes의 수
  • MEMBER(memberId, name, loginId, password) -> degree 4

4. relational database

  • relational database는 relational data model에 기반하여 구조화된 DB를 말한다.
  • relational database는 여러개의 relation들로 구성된다.

Keys

1. superkey

  • relation에서 tuple들을 unique하게 식별할 수 있는 attributes set
  • attributes의 부분집합이라고 보면 된다.

ex) {memberId, name, loginId, password} , {memberId, name} , {memberId, password}

만약 Id가 중복이 안된다고 가정하면,
이름은 동명이인이 있을 수 있고, pw도 다른 member와 같을 수 있기 때문에
{name, password}super key가 아니다.

2. candidate key

  • super key 중, 하나의 attribute라도 제거하면 unique하게 tuples를 식별할 수 없는 key

ex) {loginId, password}, {name, loginId}, {name, loginId,password}
-> 세가지 모두 loginId제거시 tuple을 식별할 수 없다.

위에서 {name, password}는 superkey가 아니라고 했으니,
{memberId, name, password}candidate key가 아니다.

3. primary key

  • relation에서 tuple들을 unique하게 식별하기 위해 선택된 candidate key
  • Map 자료구조에서 map에서 값을 꺼내오기 위한 key처럼 생각하면 될것 같다.

4. unique key (alternate key)

  • primary key가 아닌 candidate key

5. foreign key

  • 다른 relation의 primary key를 참조하는 attributes set

만약, member의 loginId를 참조하는 다른 relation이 있다면,
그 relation에서 loginId는 foreigh key 이다.


Constraints

relational database의 relation들이 항상 지켜줘야 하는 제약 사항

1. implicit constraints

relational data model 자체가 가지는 constraints 이다.

  • relation은 중복되는 tuple을 가질 수 없다.
  • relation 내에서는 같은 이름의 attribute를 가질 수 없다.

2. schema-based constraints( = explicit constraints)

DDL을 통해 schemad에 직접 명시할 수 있는 constraints이다.

1) domain constraint

  • attribute의 value는 해당 attribute의 domain에 속한 value이어야 한다.

name이라는 attribute에 특수문자가 들어갈 수 없으므로, name에 "kim!^^"와 같은 값은 들어갈 수 없다.

또, 사람의 나이를 나타내는 age라는 attribute가 있는데, 여기에 500은 들어갈 수 없다.

2) key constraint

  • 서로 다른 tuples는 같은 value의 key를 가질 수 없다.

3) NULL value constraints

  • 어떤 attribute가 NOT NULL로 명시됐다면 null 값을 가질 수 없다.

4) entity integrity constraint

  • primary key는 null 값을 가질 수 없다.

5) referential integrity constraints

  • foreign keyprimary key의 도메인이 같아야 한다.
  • primary key에 없는 values를 foreign key가 값으로 가질 수 없다.

(참고) 쉬운코드 데이터베이스 강의
https://www.inflearn.com/course/%EB%B0%B1%EC%97%94%EB%93%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EB%A1%A0/dashboard

profile
Exciting dev life / 댓글, 피드백, 질문 환영합니다 !!!

0개의 댓글