---------------------------------------------------- 또 비대면 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도 배울 것이야..
스키마란?
online prototype tool
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 사용하기 - 안에 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