TIL 21.06.18

Jaemin Jung·2021년 6월 18일
0

Today I Learned

목록 보기
42/62
post-thumbnail

오늘한일

오늘은 스키마의 개념과 디자인 방향에 대해서 배웠고,
인스타그램을 예시로 스키마 디자인을 dbdiagram을 통해 구현해보았다.
그리고 실제 데이터베이스를 만들고 연결해보는 과제를 진행하였다.

Achievement goals

  • 스키마 디자인을 할 수 있다.
    앱에 필요한 테이블과 필드, 그리고 관계를 부여할 수 있다.
  • 1:N, N:N 관계를 이해하고, 데이터베이스에서 테이블을 조작할 수 있다.
    Foreign Key, Primary Key에 대해 이해할 수 있다.

Schema

스키마(schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다.
데이터베이스의 설계도라고 설명하면 적절할것같다.
스키마를 이해하여 좀더 합리적이고 효율적인 방법으로 데이터를 구성할 수 있다.

관계형 데이터베이스 키워드

데이터 (DATA) : 각 항목에 저장되는 값
테이블 (혹은 relation) : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터
필드 (혹은 column) : 테이블의 열
레코드 (혹은 tuple) : 테이블의 한 행의 저장된 정보
키 (key): 테이블의 각 레코드를 구분할 수 있는 값. 각 레코드마다 고유값이어야 하며
기본키 (primary key) 와 외래키 (foreign key) 등이 있을 수 있다.

관계 종류

테이블 간 관계는 여러 종류로 정의한다.

  • 1:1 관계
    테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결되어 있는 경우이다.

한개의 전화번호는 한명의 사용자가 있다.
반대로 한명의 사용자도 한개의 전화번호를 갖는다.
사용자1 : 전화번호1

  • 1:N 관계
    테이블의 레코드 하나당 여러 개의 레코드와 연결되어 있는 경우이다.
    관계형 데이터베이스에서 제일 많이 사용된다.

가끔은 한명의 사용자가 여러 전화번호를 가지고 있을 경우도 있다.
하지만 반대로 전화번호가 여러명의 사용자를 가질수는 없다.
사용자1 : 전화번호N

  • N:N 관계
    여러 개의 레코드가 여러 개의 레코드를 가지는 관계이다.
    해당 관계의 경우에는 따로 '조인 테이블'을 만들어 관리를 하게 된다.

여행 상품이 있다고 할때, 여러 개의 여행 상품이 있고 여러 명의 고객들이 있을 때
한 고객은 여러 개의 여행 상품을 사용할 수 있고,
한 여행 상품은 여러 명의 고객을 가질 수 있다.
여행상품 N : 고객 N

조인 테이블에서는 연결되는 각각의 테이블에서 기본키를 가져와 연결 관계를 표시한다.
이때 다른 테이블에서 기본키를 가져왔을때, 해당 테이블에서는 왜래키라고 한다.
여행상품 N -> 1 조인 테이블 1 <- N 고객

테이블 자체 관계

  • self referencing관계
    1:N 관계와 비슷하다.
    해당 테이블 자체에서 본인을 참조할때 경우이다.
    한 유저당 한 명의 추천인을 입력할 수 있다.
    즉, 한 유저당 하나의 추천인을 가질 수 있다.
    반대로 추천인 입장에서는 여러 명의 유저를 가질 수 있다.

splint 진행하면서 해결한 에러

테스트는 실행이 되는데 아래와 같은 에러코드가 나오고
내가 작성한 코드가 전혀 적용이 되질 않았다.

Error: the string "ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client" was thrown, throw an Error :)

해당 에러 코드를 검색해보니,
mysql과 node.js의 비밀번호 설정 관련 연동 에러라고 한다.
mysql 비밀번호 접근이 두가지가 있다고 하는데 아직 그건 무슨말인지 모르겠고..
아래 코드로 비밀번호 설정을 다시 해주어서 에러를 해결하였다.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';

my sql 한번 나가고
learnmysql만들고 use하고

GRANT ALL PRIVILEGES ON . TO '유저명'@'localhost'; // 권한설정

FLUSH PRIVILEGES;

참고사이트

https://kjwsx23.tistory.com/349

profile
내가 보려고 쓰는 블로그

0개의 댓글