오늘은 스키마의 개념과 디자인 방향에 대해서 배웠고,
인스타그램을 예시로 스키마 디자인을 dbdiagram을 통해 구현해보았다.
그리고 실제 데이터베이스를 만들고 연결해보는 과제를 진행하였다.
스키마(schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다.
데이터베이스의 설계도라고 설명하면 적절할것같다.
스키마를 이해하여 좀더 합리적이고 효율적인 방법으로 데이터를 구성할 수 있다.
데이터 (DATA) : 각 항목에 저장되는 값
테이블 (혹은 relation) : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터
필드 (혹은 column) : 테이블의 열
레코드 (혹은 tuple) : 테이블의 한 행의 저장된 정보
키 (key): 테이블의 각 레코드를 구분할 수 있는 값. 각 레코드마다 고유값이어야 하며
기본키 (primary key) 와 외래키 (foreign key) 등이 있을 수 있다.
테이블 간 관계는 여러 종류로 정의한다.
한개의 전화번호는 한명의 사용자가 있다.
반대로 한명의 사용자도 한개의 전화번호를 갖는다.
사용자1 : 전화번호1
가끔은 한명의 사용자가 여러 전화번호를 가지고 있을 경우도 있다.
하지만 반대로 전화번호가 여러명의 사용자를 가질수는 없다.
사용자1 : 전화번호N
여행 상품이 있다고 할때, 여러 개의 여행 상품이 있고 여러 명의 고객들이 있을 때
한 고객은 여러 개의 여행 상품을 사용할 수 있고,
한 여행 상품은 여러 명의 고객을 가질 수 있다.
여행상품 N : 고객 N
조인 테이블에서는 연결되는 각각의 테이블에서 기본키를 가져와 연결 관계를 표시한다.
이때 다른 테이블에서 기본키를 가져왔을때, 해당 테이블에서는 왜래키라고 한다.
여행상품 N -> 1 조인 테이블 1 <- N 고객
테이블 자체 관계
테스트는 실행이 되는데 아래와 같은 에러코드가 나오고
내가 작성한 코드가 전혀 적용이 되질 않았다.
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;