(Django) 관계형 데이터베이스와 ORM

Kepler·2020년 2월 11일
1

Django

목록 보기
7/12

관계형 데이터베이스(Relational Database Management System, RDBMS)

서로 상호관련성을 가진 형태로 표현한 데이터들을 말한다. 데이터베이스들 끼리 관계를 맺고있는 형태이다.

오라클 데이터베이스, 마이크로소프트 SQL서버, MySQL 가 대표적이다.

Transaction and ACID

RDBMS는 ACID 성질, Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성) 을 가지고 있다. 이는 transaction 기능을 보장하기 위함인데, transaction은 일련의 작업들이 하나로 묶어서 취급되어, 모두 성공하거나 하나의 작업이라도 실패할 시, 모두 실패하는 것이다 (예: 계좌 이체).

정규화 (Normalization)

중복으로 입력된 데이터의 값을 없애는 작업.
<추후업데이트>

RDBMS는 SQL과 Table로 이루어진다.

SQL(Structured Query Language)

RDB에서 데이터 정의, 조작, 제어를 하기위해 사용하는 언어이다.

Table (또는 relation)

RDB의 기본단위로 데이터를 저장하는 공간이다. 파일형식이었던 Sqlite 달리, 서버이므로 통신이 가능하며, 여러개의 DB를 동시에 운영 가능하다 (하나의 Excel 파일에 sheet를 많이 만드는 개념과 비슷하다.)

2차원의 테이블을 여러게 만들어 데이터를 나누어서 관리할 수 있다.
각각의 테이블은 이름을 가지고 있으며, 열(colum)과 행(row), 그리고 거기에 대응하는 key와 value를 가진다.
한 테이블은 다른 테이블과 관계를 맺을 수 있으며, 집합체로도 이해될 수 있다.

  • 열(column)은 테이블의 vertical groups를 의미하며, 유일한 이름을 가지고 있다. 다른말로는 field, attribute이라고 불린다. 열의 수는 degree라고 부른다.

  • 행(row)은 테이블의 horizontal groups를 의미하며. 관계된 column의 묶음을 의미한다. 다른 말로는 tuple, record라고 불린다. 행의 수는 cardinality라고 부른다.

  • key: DB에서 조건에 맞는 행을 찾거나 정렬할때 사용하는 열이다.

    • candidate key: 특정 행을 식별할 때 사용하는 열들의 부분집합. 하나의 key로 하나의 행만을 유일하게 식별해 낼수 있어야 한다.(unique)
    • primary key: candidate key에서 선택되어 사용되는 main key. 고유키로써, 해당 row를 찾거나 reference함.
    • alternate key: primary key를 제외한 나머지 candidates.
    • super key:
    • foreign key: 다른 테이블의 primary key로 지정된 키로써, 이걸로 다른 테이블의 행을 식별할 수 있다. 테이블간의 연결자 역할을 한다.

관계

테이블간의 관계는 다음의 세가지로 나눌 수 있다.
Foreign key를 사용하여 이러한 관계를 나타내며, 이는 한 테이블의 키가 다른 테이블의 row를 식별할 수 있도록 도와 준다.

스키마 (Schema)

테이블을 디자인하기 위한 청사진이다. Table의 이름과 행들로 구성된다.
다음의 예제의 경우 Table = Movies, 행 = title,year,length,genre 이다.

Mysql 자주쓰는 명령어 <추후업데이트>

  • sql과 다르다는 점을 주의하자.
  • ;은 모든 명령어에 끝에 꼭 넣어줘야 실행된다. 안 넣으면 개행이 될 뿐이다.

show databases;
use <데이터베이스이름>;
show tables;
create database <name> character set <utf8mb4> collate <utf8mb4>_general_ci *Encoding타입도 이모지와 같은 문자를 지원 하기 위해필요 -> 작성을 해주어야, 연결 가능. 필수 step.

기타 다음 링크 참조 : http://g2pc1.bu.edu/~qzpeng/manual/MySQL%20Commands.htm

ORM(Object Relational Mapping), 객체-관계 매핑

객체(object)와 관계형 데이터베이스의 데이터를 자동으로 mapping(연결)해주는 것을 말한다. OOP는 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
객체 모델과 관계형 모델 간에 불일치가 존재하는데, ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
DB data <—mapping—> Object field 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.

SQL의 절차적/순차적 접근이 아닌, 데이터베이스에 객체 지향적인 방법으로 접근할 수 있으므로, 코드의 가독성이 높아지고 재사용 및 유지보수가 편리하다. (CRUD가 좀더 손쉽게 가능하다)

또한, 변경사항을 자동으로 감지하여 에러의 가능성을 줄여준다.

ORM이 적절하지 않은 경우가 있는데. 많은 수의 tuple을 자주 bulk update하는 경우, 데이터 마이닝, 순수 SQL 기반 접근이 더 효과적인 경우 등이 있다.


참고링크:

http://tcpschool.com/mysql/mysql_intro_relationalDB
https://googry.tistory.com/30
https://sexycoder.tistory.com/103
https://m.blog.naver.com/PostView.nhn?blogId=ljc8808&logNo=220461868128&proxyReferer=https%3A%2F%2Fwww.google.com%2F

참고도서:
깔끔한 파이썬 탄탄한 백엔드 (저자: 송은우)

profile
🔰

0개의 댓글