Database TIL 08

2021년 9월 1일에 작성된 문서 2번 입니다.
데이터 베이스 배운 내용을 정리했습니다.



ORM

Object-Relational Mapping

이 때, object는 객체, Relational Database는 mySQL을 생각하면 된다. 이 둘 사이의 통역사 역할이 ORM.

  • ORM을 이용하면 관계형 데이터베이스의 entitiy, 레코드 등에 대해서 마치 자바스크립트에 있는 객체나 클래스를 다루듯이 취급이 가능하다.
  • SQL문 없이 데이터베이스에 접근이 가능하다.

class Person (...) {
  ...
}

const person = new Person(...);
//데이터베이스 세계에서 엔티티 정의를 가지고 
//하나의 레코드를 만드는 것과 동일하다. => 새로운 레코드 생성

//레코드를 출력
console.log(person.name); // "John"
console.log(person.phone);//배열로 묶여 조회 가능
// ["010-1234-5678", 
//  "+82-02-123-4567", ...]



Sequelize

  • 프로미스를 지원하는 Node.js ORM이다.
  • 지원하는 RDBMS :
    • Postgres
    • MySQL
    • MariaDB
    • SQLite
    • Microsoft SQL Server



ORM 예시 코드

var Sequelize = require('sequelize'); 
//sql의 sequelize 모듈을 가져온다.
var db = new Sequelize('chatter', 'root', '');
//db로 연결고리를 만든다. 
//chatter는 데이터베이스 이름, root는 유저 이름.
//공백 부분은 비밀번호 부분이다.

var User = db.define('User', {//엔티티를 기술하는 코드
//db.define은 스키마를 작성하는 부분이다.
  username: Sequelize.STRING
  //username은 필드 이름.
  //Sequelize.STRING 요런식으로 필드 타입을 입력.
  //RDBMS사이의 다양한 필드 타입의 호환성을 유지하기 위해
  //Sequelize에서 타입을 만든것임. 
});

var Message = db.define('Message', {
  userid: Sequelize.INTEGER,
  text: Sequelize.STRING,
  roomname: Sequelize.STRING
}); //마치 클래스처럼 사용할 수 있게 만든다.

User.sync()//객체지향 코드와 데이터 베이스를 싱크
//코드와 스키마를 일치 시켜준다.
//프로미스 형태니까 then을 쓰지!
  .then(function() {
    return User.create({username: 'Jean Valjean'});//해당 값은 객체로 채워 넣는다.
    //User.create 하나의 새로운 레코드를 만드는 과정
    //SQL에서 insert into ~ values ~ 와 동일
  })
  .then(function() {
    return User.findAll({ where: {username: 'Jean Valjean'} });
  })//SQL에서 select all~ where~ 과 동일
  .then(function(users) {
    users.forEach(function(user) {
      console.log(user.username + ' exists');
    });
    db.close();
  })
  .catch(function(err) {
    console.error(err);
    db.close();
  });



Written with StackEdit.

좋은 웹페이지 즐겨찾기