#database
10
BlogBook Review
김상형의 SQL 정복 - 책 소개
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." 저자 : 김상형 한빛미디어, 2021 데이터베이스에 관련된 책은 많다. 대학 강의 서적 처럼 모델링 같은 데이터베이스 이론에 집중된 책 부터 현업에 종사하는 DBA를 위해 DBMS를 매우 딥하게 알려주는 책 까지 데이터베이스에 관한 책은 많이 있다. 그리고 입문자를 위해 DBMS을 배제하고 SQL 문법만 소개하는 쉬운 책도 있다. 그러나 현장에서 근무하는 '초보 개발자'를 위해 '적당히 두루두루' 다루는 책은 없었다. 현장에서는 어떤 DBMS를 사용하게
Java EcoTILSpring Framework
JDBC의 Prepared Statement
NamedParameterJdbcTemplate query()) 가장 정확한 사용법 일반 JdbcTemplate은 SQL을 실행할때 Prepared Statement 라는게 있는데, 쌩 SQL을 사용하는게 아니라 SELECT FROM user WHERE id = ? 이런식으로 일정 형식문자열로 SQL을 준비하는 것이다. 저걸 Prepared Statement 라고 부른다. 그러면, 저 쿼리를 DB가 받으면 무슨일을 하냐면. SQL을 파싱하여 대기 상태로 놓는다. → 만약 기존에 동일한 SQL쿼리가 있었다면 그 쿼리캐시를 재사용해서
Java EcoTILMapper
MyBatis와 Spring Boot (Annotation)
application.properties 보통 insert작업을 하면 0이나 1로 리턴값을 받기 보다는 전체의 값을 반환 받는다. 그러나 id의 경우 DB에서 auto increment기 때문에 별도의 작업이 필요하다. 객체를 그대로 반환하면 입력값 그대로 반환되지만 id는 값이 설정되지 않는다. property를 설정하기 위해 mapper에서 옵션을 지정해줘야한다 @Options를 통해 생성된 키를 가지고 keyProperty를 설정하면, 자동으로 생성된 id값이 객체의 id변수에 설정된 상태로 반환된다. id를 가지고 selec
FundamentalTILDatabase
Database transaction
데이터베이스는 다수의 사용자가 동시에 사용하더라도 항상 모순이 없는 정확한 데이터를 유지해야 한다. 장애 상황에서 마찬가지다. DBMS는 데이터가 정확하고 일관된 상태를 유지할 수 있도록 다양한 기능을 제공하는데 그 중에 하나가 트랜잭션이다. 트랜잭션은 한 작업을 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것으로 데이터베이스에서 논리적인 작업의 단위가 된다. 장애 발생시 복구하는 작업의 단위도 된다. 데이터베이스의 무결성과 일관성을 보장하기 위한 4가지 특성이 있다. → 원자성, 일관성, 격리성, 지속성 앞의 4글자를 가져
FundamentalTILDatabase
Database normalization
정규화는 데이터베이스를 설계한 후 설계 결과물을 검증하기 위해 사용하기도 한다. 잘못 설계된 데이터베이스는 이상현상이 발생할 수 있다. 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제 위 릴레이션에서 새로운 tuple을 삽입하려면 이벤트번호과 당첨여부까지 삽입해야 하는 이상현상. 중복 tuple 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제 위 릴레이션에서 tuple중 일부만 수정되어 데이터가 불일치 하게 되는 이상현상이다. tuple을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
FundamentalTILDatabase
ERD and relation model conversion
데이터베이스 설계는 사용자들의 요구사항을 고려하여 데이터베이스를 생성하는 과정이다. 데이터베이스에 실제로 데이터가 저장되기 시작하면 구조를 변경하기 매우 어렵다. 저장된 데이터와 설계된 구조를 모두 지우고 데이터베이스 scheme을 재작성 해야하는 것은 물론, 어플리케이션에서 데이터베이스에 접근하는 코드 역시 수정이 필요하기 때문이다. 많은 라이브에서 데이터베이스에서 계속 사용중이기 때문에 일관성과 무결성을 지키며 무중단으로 migration 하는 것은 어렵다. RDB모델을 기반으로 두고 데이터베이스를 설계할 때는 두 가지 방법을
FundamentalTILDatabase
Relation Data Model
릴레이션의 예시 Attribute 속성 : 각 데이터를 의미하는 이름 Tuple 투플 : entity instance, record. Domain 도메인 : 속성의 타입을 의미한다. 예를들어 age는 int로 정의할 수 있다. Null Degree 차수 : attribute의 갯수 여기서는 7개다 Cardinality 카디널리티 : tuple(entity instance)의 갯수 Tuple의 유일성 : 하나의 relation에는 동일한 tuple이 존재 할 수 없다. Tuple의 무순서 : tuple간에는 순서가 없다. 효율을 위해
FundamentalTILDatabase
Entity-Relationship model
개념적 모델링 : 추상화 과정을 통해 중요한 데이터를 추출해 나열한다. 논리적 모델링 : 나열한 데이터의 구조를 결정하고 표시한다. 이 과정을 굳이 분리하지 않고 데이터 모델링으로 이야기한다. 데이터 모델은 데이터 모델리의 결과물을 표현하는 도구. 개념적 데이터 모델 : 사람이 이해할 수 있는 모델링을 통해 개념적 구조로 표현 논리적 데이터 모델 : 데이터베이스의 논리적 구조로 표현 entity 개념 = 테이블의 record 개세는 사람과 사물처럼 물리적으로 존재하는 것만을 의미하지 않는다. 개체는 다른 개체와 구별되는 이름을 가지