본문 바로가기

Django

DataBase 개념 및 쿼리 사용법

1. 데이터베이스(DB) 및 DBMS 

  •  데이터베이스(DB)

: 여러 사람이 공유하여 사용할 목적으로 체계화하여 통합, 관리하는 데이터의 집합

출처 - https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

- 사용자들 혹은 프로그램들 간에 공유되어야 하는 정보들이며,

- 하나의 통제시스템에서 데이터를 공유

 

- 데이터 유형(not exclusive)

  • 통합된 데이터(Integrated Data): 자료의 중복을 배제한 데이터의 모임
  • 저장된 데이터(Stored Data): 컴퓨터가 접근할 수 있는 저장 매체에 저장된 데이터
  • 운영 데이터(Operational Data): 조직의 고유한 업무를 수행하는 데 존재 가치가 확실하고 없어서는 안 될 반드시 필요한 데이터
  • 공유 데이터(Shared Data): 여러 응용 시스템들이 공동으로 소유하고 유지하는 데이터

- 데이터베이스의 특성

  • 실시간 접근: 사용자의 질의에 대해 실시간 처리에 의한 응답 가능
  • 계속 변화: 새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터 유지
  • 내용 기반 참조: 데이터베이스에 있는 데이터 참조 시, 데이터의 주소나 위치에 의해서가 아닌 사용자가 요구하는 데이터 내용 기반으로 참조
  • 동시 공유: 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있음

 

  • DBMS(데이터베이스 관리 시스템)

- 다수의 사용자들이 데이터베이스 내의 데이터에 접근할 수 있도록 해주는 소프트웨어 도구의 집합

  (Ex. Oracle, MySQL, MariaDB 등)

- DBMS를 통해 데이터베이스를 관리하여 응용 프로그램들이 데이터베이스를 공유하고, 사용할 수 있는 환경 제공

 

2. RDBMS vs. NoSQL

  • RDBMS(관계형 데이터베이스 관리 시스템)

- RDBMS는 RDB를 관리하는 시스템이며, RDB란 관계형 데이터 모델을 기초로 두고 있는 모든 데이터를 2차원 테이블      형태로 표현하는 데이터베이스

- 테이블간의 관계에서 외래키(foreign key)를 이용하여 테이블 간의 Join 가능

- 스키마에 맞추어 데이터를 관리함

 

  • NoSQL

- RDBMS와 달리 테이블 간의 관계 정의하지 않음. (테이블 간 Join 불가)

- 여러 대에 데이터 분산하여 저장(Scale-out) 가능

 

  • RDBMS, NoSQL 어떤 것을 사용해야 하나 ?

- 데이터 구조가 명확하고 중복된 데이터가 없어 변경이 용이하므로 관계를 맺고 있는 데이터가 자주 변경이 이루어질 경우 👉 RDBMS

- 정확하게 데이터 구조를 알 수 없고 데이터가 확장될 수 있는 경우 및 데이터 중복이 발생할 수 있으므로 수정이 많이 이루어지지 않을 경우, 막대한 데이터를 저장해야 하는 경우(Scale-out) 👉 NoSQL

 

3. DB 쿼리문

  • SQL 종류

  • DML(Data Manipulation Language, 데이터 조작어)

- SELECT(데이터 조회 또는 검색)

SELECT [ALL(중복허용)/DISTINCT(중복허용x)] attribute명 | 집계함수(attributes명)
FROM 테이블명                                                     
[WHERE 조건]                                                       
[GROUP BY attribute명 [HAVING 조건]] * 주로 집계함수랑 같이 쓰임                      
[ORDER BY attribute명 [ASC/DESC]];

 

- INSERT(데이터 삽입)

INSERT
INTO 테이블명[(attribute명)] *attribute명 지정해서 추가할 경우 나머지 attriute의 value에는 NULL
VALUES (attribute_value);

INSERT
INTO 테이블명[(attribute명)]
SELECT ...; * 서브 쿼리문

 

- UPDATE(데이터 수정)

UPDATE 테이블명
SET attribute명 = attribute_value
[WHERE 조건];

 

- DELETE(데이터 삭제)

DELETE
FROM 테이블명
[WHERE 조건];

 

4. ORM

- 쉽게 말해, "객체와 관계와의 설정"

- 테이블(Table)에 객체가 가지고 있던 정보를 입력하고, 이 테이블을 "join"과 같은 SQL 질의어를 통해 관계를 설정해주게 되는데 문제는 이 테이블과 객체 간의 이질성 발생 👉 ORM으로 해결

'Django' 카테고리의 다른 글

Django Rest Framework  (0) 2021.09.01
배포  (0) 2021.08.25
DataBase Modeling  (0) 2021.08.18