2024.06.12. WED, DataBase.
1. 데이터 베이스 프로젝트
1.1 진행 과정
-> 계획 -> 분석 -> 설계 -> 테스트
1.2 DB 프로젝트 진행 과정
A.개념 데이터 베이스 모델링 (E-R Model)
(Entity(개체) - Relationship (관계) 모델링)
- entity: 업무 수행을 위해 데이터로 관리되어져야하는 사람, 장소, 사건 등
관계(Relationship) : 개체간의 관계, 1:1, 1:다, 다:ㅏ
정규화 : 데이터 중복을 제거, 속성이 본래의 개체에 위치시키도록 함.
일반적으로 3정규화 까지 진행함.
B. 논리적 데이터베이스 모델링
- 개념적 구조를 특정 RDBMS (MySQL) 가 처리할 수 있는 스키마를 생성하는 단계.
- 개체를 대상으로 Table 변환
- 스키마: 회사의 업무단위 별로 구분된 데이터베이스
C. 물리적 데이터 베이스 모델링
- 논리적 데이터베이스 모델링 단계에서 얻어진 데이터베이스 스키마를 조금 더
- 효율적으로 구현하기 위한 작업과 구현하려는 DBMS 의 특성에 맞게 실제 데이터 베이스 내의 개체들을 정의하는 단계
-> 더 효율적으로 구현한다는 것에 대한 예
데이터가 많이 적재 => SQL 속도 저하 => 속도 개선 필요
속도 개선 (검색 효율)을 위해서 index table 에 구축.
- 코드의 복잡도, 가독성, 유지보수, 접근제어(보안) 관련 개선
view, trigger, sroced procudure, fuction 등
- 역정규화 => 시스템의 성능 향상을 위해서 정규화에 위배되도록 하는 행위.
- 쿼리문
2.0. 세션 (session) , Transaction (트랜잭션) , Data lock
- Session
MySQL 을 사용하기 위해 로그인 한 상태. => 세션이 시작 (Open) 되었다고 함.
로그인 한 상태에서 로그아웃 한 상태 => 세션이 종료 (Close) 되었다고 함.
session 과 tcp/ip 관계
- MySQL Terminal Client 2개 실행
- 동일한 유저의 동일한 스키마를 사용하는 session
- MySQL Session 2개 , Client 2개 이니까,
- session A (client A(화면 A)) , session B (client B (화면 B))
- session A는 select 실행 완료. / session B는 update 실행 완료.
- 위의 두 요청을 MySQL server 에서 받아서, 처리 후, 결과를 각각 요청한 쪽으로 전송.
여기서, MySQL server 어떻게 구분해 전송하게 될까?
- TCP/IP (컴퓨터 주소), PORT 정보 (프로세스 구별 정보) 가 필요.
-
Transaction (트랜잭션)
-
트랜잭션이 끝나는 경우 : rollback, commit, session 종료
비정상: rollback, commit ,session 종료
정상: commit
-
lock
row lock (행단위)
A : transaction 중
B : update 중 ( A의 transaction 종료될 때까지 대기)
DML 성능이 떨어지게 됨.
발생시점 - 어떤 한 행에 update, delete 가 진행되었고,
트랜잭션을 완료하지 않은 경우.
commit or rollback 를 해야 함.
table lock (테이블 전체)
발생시점 - 테이블에 한 건 이상의 데이터가 있는 상태.
모든 행에 update, delete 가 진행되었고,
트랜잭션을 완료하지 않은 경우.
commit or rollback 을 해야 함.
- key
+ 기본키 (Primary key) : 테이블의 각 행에 대한 식별자 역할을 함.
+ 외래키 (Foreign key) : 다른 테이블에서 참조하는 기본키가 칼럼인 경우
+ 복합키 (compound key) : 2개 이상의 칼럼을 결합하여 고유한 값을 가지는 키.
+ 자연키 (natural key) : 개체의 정보 중 고요한 값을 가져서 각 행마다 식별할 수 있는 의미를 가지는 칼럼.
+ 대리키 (Surrogate key) : 일련번호와 같은 가상의 값으로 기본 키의 역할을 하는 칼럼.
2.3. SQL 문장의 종류.
- DDL (데이터 정의어): 데이터베이스를 정의하는 언어를 말하며 데이터를 생성하거나 수정, 삭제하는 등 데이터의 전체 골격을 결정하는 역할의 언어.
- create, alter, drop, turncate
- DML (데이터 조작어) : 정의된 데이터 베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할의 언어.
-
select, update, delete, insert
* select 절의 구문 형태
select : 테이블의 칼럼, select 절
form : 테이블, view, select 절
where : 조건
Group by : 데이터 그룹핑
having : 그룹핑된 결과에서 추가적으로 조건을 적용
order by : 정렬.
- DCL (데이터 제의어) : 데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어.
- grant, revoke, commit, rollback
2.4 view
-> 가상의 테이블임.
-> select 문장에 이름을 부여하여, 부여된 이름을 마치 테이블의 이름처럼 사용할 수 있음.