본문 바로가기

블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기

[36일차] 2021053 sequelize database 스키마 작성해보기/ JOIN

반응형

---------------------------------------------------- 또 비대면 1주일 연장~----------------------------------------------------

공지사항 : 수요일에 쉼. 비대면으로 수업 진도 늦춰진다고 한다.  이번주 - sequelize

 

 

 

 

데이터베이스도 한 객체이다라고 생각하고 만든게 orm 

 

orm 이란? 데이터를 객체로 표현한다는 것 / mapping 엑셀처럼 객체처럼 똒같이 사용한다. 

 

모든 mysql같은 dbms는 테이블형태로 생겼다 - 그래서 sequelize 사용 가능 

 

 

 

324p...   관계 정의하기 

 

만약 게시판을 만들어야 한다면 순서 

데이터베이스   - 스키마 (씨퀄라이즈 관계 정의하기와 맞닿아있음)  

 

회색 - table 명 / 흰색 - field명 

 

 

 

 

1:N

 

요렇게 있다고 가정

댓글이 있다는 건 - 게시판 안 게시판이 있다. 라고 생각 

공지사항에 들어가면 공지사항에 해당되는 댓글이 존재 

 

 

 

fk 1번만 가져와서 뿌려줘 

fk - foreign key 외래키 - 내가 참조할 idx값

 

 

 

하나의 게시판에 여러개의 게시글이 들어가는게 1대 N

 

 

1:1

id, pw, name만 받고 (자주 쓰는 field를 따로 빼놓고) ex.로그인..메인화면.. 

상세정보들은 따로 분리하는 것 (데이터적으로 쌓아놓는 부분) 

 

user라는 테이블

 

 

 

 

 

user_info 테이블

 

 

 

 

 

 

 

 

 

-----------------------------------------------------------------2교시-----------------------------------------------------------

 

 

 

 

 

N:M

ex. 인스타그램 tag A

우리가 자주사용하는 데이터가 자주 남발되는 경우? 

 

 

첫 번째 피드에 1번 내용이 있다 

tag를 단다면

 

 

 

 

 

 

태그들을 1:n으로 만든다. 

 

 

 

 

 

 

 

 

 

 

만약 게시판에 필드가 여러가 있다고 생각해보면 

 

 

 

 

 

 

 

 

 

 

->내용이 너무 반복적 -> 하나로 묶는다. 

 

 

 

 

 

 

이게 n:m

 

피드 - 여러명의 id가 사용 

 

피드 가 피드태그 창조  

 

피드태그가 태그 창조(?)

 

 

 

 

 

 

 

 

 

 

 

 

 

table row 수를 줄여줌 

키워드 중복 묶음 -> 데이터 효율

 

 

 

 

 

sequelize 사용 이유

 

 

 

 

 

 

 

 

 

 

 

 

데이터 베이스 스키마 작성해보기

 

* 스키마란 ? 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것 

 

 

 

작성 전 필요한 것 

1. 화면 정의 (기획영역 - 개발자들도 머릿속에 그려져 있어야함)

-> 이걸 보고 데이터 베이스 스키마를 어떻게 짤까? 고민해야함. 

 

기초적인 화면정의

html form tag 를 어디에 써야하는지, 

view page 로 가려면 idx값이 존재해야함. insert하게 되면 idx값 꼭 보내줘야함. 

insert id 라는 값을 사용하면 됨. 

 

 

 

오늘 - 게시판에 새로운 기능 추가 예정

그림으로 댓글... , 카테고리..., userID랑 연결해서 회원 테이블이랑 연결해서 사용해볼뤠.., 스키마도 해볼래 

그림그려서 -> 스키마 작성 -> 코드로 구현해보기 

이번주 ajax도 배울 것이야..

 

 

스키마란?

jwprogramming.tistory.com/47

 

스키마란? (개념스키마, 내부스키마, 외부스키마)

Database의 시작을 무엇으로 할 까 하다가.. 스키마에 대한 내용으로 시작하게 되었습니다. 스키마의 소개와 개념/내부/외부 스키마의 정의와 특징에 대해 살펴보겠습니다. 먼저 스키마란 - 데이

jwprogramming.tistory.com

 

online prototype tool

ovenapp.io/

 

OvenApp.io

Oven(오븐)은 HTML5 기반의 무료 웹/앱 프로토타이핑 툴입니다. (카카오 제공)

ovenapp.io

 

 

 

 

 

 

 

tables 3개 만들기 

CREATE DATABASE board;
use board;

CREATE TABLE boardTB(  
    idx INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    subject VARCHAR(100) NOT NULL,
    userId VARCHAR(50) NOT NULL,
    content TEXT,
    today DATETIME DEFAULT CURRENT_TIMESTAMP,
    hit INT(11) DEFAULT 0 
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

CREATE TABLE userTB(  
    userId VARCHAR(100) NOT NULL UNIQUE, 
    userPw VARCHAR(255) NOT NULL,
    userName VARCHAR(30) NOT NULL,
    userImage VARCHAR(255) NOT NULL
)DEFAULT CHARSET=utf8mb4;

CREATE TABLE commentTB(    
    idx INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userId VARCHAR(50) NOT NULL,
    content TEXT,
    today DATETIME DEFAULT CURRENT_TIMESTAMP
)DEFAULT CHARSET=utf8mb4;

 

 

 

 

교집합 : join 

 

 

join 사용하기 - 안에 data가 있어야함 

 

명령어

insert into usertb(userId, userPw, userName, userImage) values('test', '1234', '테스트', 'test');

userid 같은 값 2번 못들어가 -> unique 한개 primary key (text) -> userId값은 다 다르게 넣기 

 

 

boardtb에도 추가

 

 

 

 

예전에 했던 거

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JOIN 문 (A.userId 와 B.userId 가 같은 걸 가져와0 

boardtb에서 다른 table도 가져온다. 

 

 

 

 

Left join 

Right join 

 

commenttb 에도 입력 

 

 

 

 

 

 

 

해당 유저의 name으로 

 

 

 

 

 

 

목적 : 

userId 값만 가지고 userName을 구하는게 목적

userId = 네이버 아이디 

userName = 내 이름 

요 두개가 같이 있는 tatble = usertb이다. 

 

boardtb 에서부터 userid를 가지고 .... 못들음

 

조회하기 때문에 select from 으로부터 시작 

boardtb 를 기준으로 가져온다 table을 JOIN 기능 

JOIN + table명을 가져온다. userTB (tablename 기니깐 별명 as A 요렇게 바꿔준다.)

 

JOIN 은 where 대신 = on 을 쓴다. 

 

on A.userid = B.userid 

 

이게 1:1 매칭일 때......

 

 

 

 

 

 

 

 

---교수님 ----

 

tb을 두개 옆으로 붙였다.  너무 기니깐 필요한 것만 * 빼고 써서 가져오기 

 

 

 

userid와 username ? 을 같이 뽑아옴. 수정하는게 x 

 

 

 

이걸 배우게 된 이유 

table의 관계도에 대해 업그레이드 하기 위함. 

table을 쪼개면서 내가 필요한 부분들 select으로 가져올 수 있어야 제대로된db를 사용할 수 있다. 

실무에서도 이렇게 사용한다고 함. 

 

JOIN 문을 사용할 수 있어야 설계할 때 가능

화면 정의를 보자마자 table을 나눌 수 있어야함. 

 

 

 

where도 되네??? 

 

 

 

left join - null 값이 있으면 쓸 수가 없어.

join - null 값이 있으면 쓸 수 없다. 

 

 

select * from 테이블1 left 

join 테이블2 on a=b

join 테이블3 on a=c 

 

 

 

 

 

내일 user table 만들겨 ~

 

내일 공부할 것 

로그인

섹션 & 쿠키에 대해 (쿠키는 알아두기만 해도 됨) 

 

숙제 : user table 만들어오기 

is, pw, userName (image제외) insert 할 수 있는 page만 만들기 

로그인 - 입력해서db에 넘어가도록 

오늘배운 join 문 활용해서 list에 userName이 나올 수 있도록 

시간남으면 paging도..

 

 

 

 

 

 

 

 

 

 

sequelize 다루기

baeharam.netlify.app/posts/Node.js/Node.js-Sequelize-%EB%8B%A4%EB%A3%A8%EA%B8%B0

 

[Node.js] Sequelize 다루기 - 배하람의 블로그

개요 ORM(Object-Relational Mapping)은 객체지향 패러다임을 활용하여 관계형 데이터베이스(RDB)의 데이터를 조작하게 하는 기술이다. 이를 활용하면 쿼리를 작성하지 않고도 객체의 메서드를 활용하는

baeharam.netlify.app

 

반응형