본문 바로가기

Programming/Database System25

[개발일지] 채번(採番) 개발하기 채번(採番)이란 번호를 딴다는 의미로 번호표의 목적으로 DBMS에서 PK 혹은 고윳값을 부여할 때 사용하는 용어다. 일본말이라고 함. 채번되는 값이 업무적으로 의미 있는 값이건, 단순 고윳값이건 각각의 목적이 충분히 존재한다. 나의 경우 고객에게 노출하는 값은 아니었지만 고윳값을 가지면서 SELECT도 가능해야 했다. (이건 이후에 후술) 웹서비스에서 채번 하는 업무는 꽤 있다. (계좌번호, 자동차 번호판 등) 단순히 sequence (ORACLE), auto_increment (MYSQL) 등 사용해 채번 할 수 있지만 그 이상의 요구사항이 존재한다. 채번 결과가 어떤 포맷을 유지해야 한다던지 등..(계좌번호, 자동차 번호판 등) 이번 포스팅에서는 채번 프로세스를 어떻게 개발하게 되었는지 과정과 결과를.. 2023. 10. 5.
[DBMS] PK 선정 전략 - surrogate key와 natural key 목차 PK 선정 시 고려할 것 Surrogate key, Natural key Surrogate key vs Natural key 생각 참고 How to Choose a Good Primary Key PK 선정 시 고려할 것 데이터베이스 테이블 모델링 시 가장 먼저 하게 되는 작업이 해당 테이블의 Primary key를 선정하는 작업입니다. Pk가 가져야 하는 기본성질은 아래와 같습니다. Uniqueness : 다른 ROW로부터 식별이 가능한 유일값 Stability (a situation in which something is not likely to move or change 캠브릿지 사전 참고) : 수정되면 안 됨 Irreducibility (비환원성) : 복합키를 사용한다면 그 키의 어느 컬럼이건.. 2023. 1. 15.
[ORACLE] Lock 1편 - Lock의 개념과 매커니즘 본 포스팅은 도서 "전문가를 위한 오라클 데이터베이스 아키텍처 (저: 토마스 카이트)" 중 chapter 06 락킹과 래칭을 참고하여 정리한 글입니다. 다중 사용자 기반의 애플리케이션이 데이터베이스를 사용한다면, 락킹 (locking) 메커니즘에 대해 고려하지 않을 수 없습니다. 락킹 메커니즘은 DB를 활용하는 주요 기능으로 개발자는 락킹 메커니즘을 충분히 이해하고 활용하여 애플리케이션을 개발해야 합니다. 특히 오라클의 경우 다른 DB보다 더 월등한 락킹 메커니즘을 제공합니다. Lock을 무시한 채 개발한 애플리케이션은 데이터 무결성이 깨지거나 예상 밖의 데이터 결과를 만들어 버리게 됩니다. 따라서 이번 포스팅에서는 공유 데이터 구조 (table, row, procedure 등)에 대하여 어떻게 락을 걸.. 2022. 10. 12.
DISTINCT, GROUP BY 무엇을 쓸까 데이터 중복제거, 집계 함수 사용 등을 할 때 많이들 사용하는 게 DISTINCT 함수 와 GROUP BY 절입니다. 둘의 차이를 알아보고 경우에 따라 더 효율적으로 쓰기 위해 포스팅합니다. 목차 DISTICNT, GROUP BY 예시 성능 차이 (실행 계획) 가독성 결론 참조 DISTICNT, GROUP BY 예시 -- 요구 1 : 사원 테이블에서 부서 번호 별 소속 수 출력 SELECT DEPT_NO, COUNT(*) FROM TB_USER GROUP BY DEPT_NO; -- 요구 2 : 사원 테이블에서 중복 제거한 부서 번호 출력 -- DISTINCT SELECT DISTINCT DEPT_NO FROM TB_USER; -- GROUP BY SELECT DEPT_NO FROM TB_USER GROU.. 2022. 9. 26.
[DBMS] 트랜잭션 (transaction) 목차 트랜잭션이란 트랜잭션 제어 문장 원자성 영속성 트랜잭션에서 무결성 제약조건 검사 나쁜 트랜잭션 습관 분산 트랜잭션 자율 트랜잭션 참고 본 포스팅은 도서 "전문가를 위한 오라클 데이터베이스 아키텍처 (저: 토마스 카이트)" 중 chapter 08 트랜잭션을 참고하여 정리한 글입니다. 데이터베이스의 기본, SQL문법에 대해 이해를 바탕으로 쓴 글이니 참고 바랍니다. 트랜잭션이란 트랜잭션(transcation)이란 일관된 상태의 데이터베이스가 다른 일관된 상태로 넘어가기 위한 논리적인 작업 단위입니다. 트랜잭션이 종료되면 트랜잭션에서 일어난 모든 변경(작업)을 저장하거나 아무것도 저장하지 않는다는 것을 보장합니다. (보장하지 못하는 경우도 있으나 이 경우는 아래에서 설명) 더하여, 데이터 무결성을 지키기.. 2022. 8. 19.
[RDBMS] Transaction Isolation Level (트랜잭션 고립 수준) 목차 트랜잭션 고립 수준 종류 참고 트랜잭션 고립 수준 동일한 트랜잭션 시나리오 (입력, 작업)에도 불구하고 고립 수준에 따라 그 결과가 다를 수 있습니다. ANSI / ISO SQL 표준에서는 이와 같은 트랜잭션 고립 수준을 4가지로 분류하여 정의하고 각 고립 수준에서는 아래 3가지 현상을 허용할지 말지에 대해 정의합니다. dirty read (Uncommitted Dependency) Non-Repeatable Read (Inconsistent Analysis) Phantom Read dirty read (Uncommitted Dependency) 커밋되지 않은 데이터 (dirty data)를 읽는 것을 말합니다. 이 때문에 데이터 무결성이 깨지고, 외래 키 제약조건이 무시되는 등 여러 문제가 발생할.. 2022. 6. 24.