본문 바로가기
AWS(산대특)

DAY 15 - MySQL

by dkdlxl 2024. 2. 8.

요구사항 분석 


학사관리 시스템
회원가입 기능 - 아이디, 비밀번호, 이름, 학과, 학번, 이메일, 전화번호, 주소, 프로필 사진 입력을 받아야 함
로그인 - 아이디, 비밀번호 입력 받아 로그인함 
회원 정보 보기 - 이름, 학과, 학번을 조회할 수 있어야 함 
회원 정보 수정 - 학과, 학번, 이메일, 전화번호, 주소, 프로필 사진을 수정할 수 있어야 함 
Q&A 작성 - 카테고리, 제목, 내용을 입력해야 함 
Q&A 보기 - 카데고리, 제목, 내용, 작성일, 작성자 이름, 학과, 프로필 사진을 보여줘야 함 
Q&A 댓글 - 내용을 입력해야 함
Q&A 댓글 보기 - 내용, 작성일, 작성자 이름, 학과, 프로필 사진을 보여줘야 함 

Entity(객체) : 회원, Q&A, Q&A 댓글
- 속성으로 인해 설명 당하는 것 

attribute(속성) 
- 회원의 속성 : 아이디, 비밀번호, 비밀번호 확인, 이름, 학과, 학번, 이메일, 전화번호, 주소, 프로필 사진
- Q&A의 속성 : 카데고리, 제목, 내용, 작성일, 작성자 이름, 학과, 프로필 사진
- Q&A 댓글의 속성 : 내용, 작성일, 작성자 이름, 학과, 프로필 사진


relationship(관계) 
- 행동과 동작들을 표현함 
회원이 Q&A를 작성한다. /회원 1 : n Q&A/
회원은 반드시 Q&A 를 작성할 필요는 없다.
Q&A는 반드시 회원에 의해 작성되어야 한다. 
회원이 Q&A 댓글을 작성한다. /회원 1 : n Q&A 댓글/
회원은 반드시 Q&A 댓글을 작성할 필요는 없다.
Q&A 댓글은 반드시 회원에 의해 작성되어야 한다. 
Q&A는 Q&A 댓글을 포함한다. /Q&A 1 : n Q&A 댓글/
Q&A는 반드시 Q&A 댓글을 포함할 필요는 없다.
Q&A 댓글은 반드시 Q&A에 포함되어야 한다. 

회원이 Q&A에 댓글을 단다. /회원 n : m Q&A/
회원은 반드시 Q&A 댓글을 작성할 필요는 없다.
Q&A는 반드시 회원에 의해 댓글이 작성될 필요는 없다.


BCNF : 3정규형이 이루어진, 모든 함수 종속성이 후보키에 대해서 종속
제4정규형 : BCNF, 다치 종속을 제거 
제5정규형 : 모든 종속이 조인 종속에 기반하여야함


view

: 논리 적으로만 존재하는 읽기 전용의 가상의 테이블 
: 제한된 보기를 제공할 때, 특정 쿼리문(select)을 미리 작성해두는 용도 

create view employee_view as 
select
E.employee_number as employee_number,
E.name as employee_name, 
    D.code as department_code,
    D.name as department_name,
    D.tel_number as department_tel_number
from employee as E left join department as D
on E.department_code = D.code;
select * from employee_view;
select * from employee_view where employee_name = '홍길동';


view는 물리적으로 데이터 복사되는 것이 아니고 논리적으로 결과를 불러오는 것이기 때문에 view 자체로 insert, update, delete가 불가능 

# insert into employee_view values (10, '김길동', 'MM', '물류부', '010-1111-1114'); -- 에러

 

* insert불가능 무조건 조회만 가능 

 

인덱스 (index) : 테이블에서 데이터를 빠르게 조회할 수 있도록 도와주는 요소 

create index department_tel_number_index 
on department (tel_number);

select * from department where tel_number = '010-1111-1111';

create index department_index_1
on department (name, tel_number);

select * from department where name = '인사부' and tel_number = '010-1111-1111';

select * from department where tel_number = '010-1111-1111' and name = '인사부'; # 속도가 느려짐 # 어떤걸 먼저 찾는지에 대한 순서도 중요함 

drop index department_index_1 on department; # 인덱스 삭제


* 자주 사용하는 컬럼들은 앞에 둬야 검색 속도가 빨라짐 

'AWS(산대특)' 카테고리의 다른 글

DAY 17 - MySQL  (0) 2024.02.14
DAY 16 - MySQL  (0) 2024.02.13
DAY 14 - MysQL  (0) 2024.02.07
DAY 13 - MySQL  (0) 2024.02.06
DAY 12 - MySQL  (0) 2024.02.05