[TIL]schema & sql 정리
Before you learn ...
- sql이 어떻게 이루어져 있는지 이해한다.
- 기본 쿼리문을 사용할줄 안다.
- 스키마의 기본 설계방법과 나은 방향성을 고안한다.
- 서버와 클라이언트 사이에서 주고받는 데이터를 db에 저장해서, 영속성있게 저장할수있다.
sql(structured query language) = 구조화된 쿼리언어.
- 데이터베이스 용 프로그래밍 언어
- db에 쿼리를 보내, 원하는 데이터만을 뽑아올수있다.
~ 효율적인 데이터 저장방식의 순서 ~
-
In-memory : 서버든 클라이언트든 끄면 데이터가 없어진다는 단점이 있다.
-
File I/O : 서버에 데이터 저장.
그러나 원하는 데이터만 가져올수없고, 항상 모든 데이터를 가져온뒤 서버에서 필터링 필요.
-
DB: 필터링 외에도 File I/O로 구현이 힘든 관리를 위한, 여러기능들을 가지고있는 데이터에 특화된서버
schema & query design
스키마 ( = 데이터베이스의 청사진 )
: 데이터베이스에서 데이터가 구성되는 방식과 서로다른 엔티티간의 관계에 대한 설명
엔티티(= 테이블)
: 고유한 정보의 단위. 아래의 예제에서는 티쳐스,클래스들,스튜던츠 이다.
레코드
: 테이블에 저장된 항목. 즉, 행.
ex) 아래의 예제에서는 music theory,brass methods 수업을 가르치는
음대의 Cynthia선생님을 말한다.
EX) 학교 데이터베이스
🤔Teachers 와 Classes 사이의 관계를 담기위해, 어떤 형태로 정보가 저장되어야 할까?🤔
S (1). Teachers 테이블의 Classes 컬럼에 내용을 채우기
A. 교사가 담당하는 수업목록에 대해, 수업이름을 나열하여 저장하기
❌ Problem ❌
ex) 어느날 갑자기 'PSY 101'의 수업이름이 변경되어버리면,
티쳐 테이블의 해당수업명을 모조리 찾아내서 변경해야됨.
A. 수업이름 대신 그러면 해당 ID를 저장하는걸로 대체.
❌ Problem ❌
ex)
- 고유한 ID라는 기본키를 이용해 외래키로 사용하여 레코드를 연결하는
문제는 해결됐는데, 만약 학교가, 교사가 맡아야되는 수업 수를
늘려버리면 수업 ID를 담을 공간이 부족해져서 안됨(열의크기는 무조건 고정이니까)
- 그리고 한 열에 여러값 넣어버리면 상수시간에 대한 검색손실 발생.
굳이 한명의 교사의 학생을 검색하기위해
해당교사의 classID열의 값을 반복(?)해야함.
A. 하나의 열에 여러값 저장못하니까 각 교사에 대해 그러면 여러개의 레코드를 만들어버리기.
❌ Problem ❌
ex) kelly가 개명을 해서 celly로 변경했고, 그래서 그녀의 모든 classID를 알아서 이름변경을 해야하는데, 클래스아이디 하나라도 잘못 알았다간 모든 컬럼의 값 변경을 못하게된다. => '정합성이 깨진다'
S (2). Teachers 테이블을 Classes 테이블에 저장하기.
👌 correct 👌
=> 교사가 가르치는 모든 수업 검색 가능하고, 앞의 모든문제 해결가능.
🤔classes 랑 students 사이의 관계를 담기위해, 어떤 형태로 정보가 저장되어야 할까?🤔
일단, 얘네는 각 수업은 여러명의 학생들로 구성되있고,
각 학생또한 여러개의 수업을 듣기때문에 N:N 관계이다.
A. 클래스 테이블에 여러개의 student ID들 저장 못함.
❌ Problem ❌
=> 하나의 열에 여러값 저장못함
A. 반대로 여러개의 class ID들을 학생 테이블에 저장도 안됨.
❌ Problem ❌
=> 위와 같은 문제 ㅇㅇ
A. 글자로 표시했던 학생이름들, 수업이름들을 번호로 할당된 ID로 교체해보자. 즉, classID랑 studentID들이 교차하는 좌표들을 하나의 테이블로 시각화하는 것이다.
👌 correct 👌
=> 얘를 join테이블이라 함. 스키마에서 수업 대 학생, 학생 대 수업?
관계를 보여줌.
1 ∞ ∞ 1
==> CLasses <-----> Classes/Students <-----> Students
[join]
*auto increments : value 자동 증가
: 테이블 필드를 생성할시에, 각 테이블은 기본적으로 id라는 필드가 존재한다.
이는 각 테이블의 레코드 하나를 가리키는 숫자로, 자동적으로 그 값이 증가한다
이 id필드는 해당 테이블의, 기본키(primary key)역할을 한다.
*query: 질의문.
- 검색창에 적는 검색어도 쿼리의 일종이 될수있다.
- 저장되어있는 정보를 필터하기위한 질문
ㅠㅠ 힘들다... 파이..팅...... ㅜ
Author And Source
이 문제에 관하여([TIL]schema & sql 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@violet/TILschema-sql-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)