2024. 2. 22. 15:06ㆍ개발/토막난 상식
사건의 발단
어라 ?
DB중에 ID 값이 없는 녀석을 발견했다.
질문은 주임의 특권
'과장님 이거 오토인크리먼트로 바꿔두 될까요? '
결론만 놓고보면 바꿔두 된다. 우리가 DB를 작업 같이 하고 있기때문
단! 여러가지 고려해야 한다.
1. 다른 디비들 과의 통일성 - 프로젝트 마다 관리하고 있는 방법이 다르므로 이거한번 채크 해볼것
2. 산출물 > 코드 3줄 줄이기위해 오토 인크리먼트 추가했다가 산출물 10개를 다 바꾸러 찾으러 다녀야 할 수고 있습니다.
3. 개발자가 바꿀수 있는 환경인가?
4. 만약 db가 변경 될 가능성은? 오라클이 마리아 혹은 다른 디비로 바뀌게 되었을때 재공해 주는 기능인가? 그렇다면 그떄 수정해야 할 코드 량은?
그다음에 성능과 방법을 탐구
1. get으로 가져온 다음 없는 값부터 찾아서 새로운 아이디로 부여하게끔 코드를 짬
2. 쿼리 자체에서 max + 1 값으로 id를 부여
3. 시퀀스를 사용하여 id값을 부여 ( NEXTVAL )
4. 오토 인크리먼트 사용
문제가 될 사항은 없을까?
AUTO_INCREMENT 의 문제점
1) 분산형 시스템에서 문제가 발생한다.
2) 키를 예측하기 쉬워진다.
>>
단일 DB를 쓰면 AUTO_INCREMENT를 키로 쓰자. (성능, 메모리 측면에서 더 낫다.)
다중 DB를 사용하는 분산형 환경이면 데이터 일관성을 위해 UUID를 키로 쓰는 걸 고려해보자
추가적 문제 사항
외래 키로 사용중이면 변경이 불가능 하다
해결방법
- 외래 키 제약 조건을 삭제합니다. ALTER TABLE 문을 사용하여 'limenet.tech_hierarchy' 테이블에서 'FKtech_hiera928179' 외래 키 제약 조건을 삭제할 수 있습니다.
- tech_hier_ver_id 열을 변경합니다. ALTER TABLE 문을 사용하여 'limenet.tech_hier_version' 테이블에서 tech_hier_ver_id 열의 자동 증가 설정을 수정할 수 있습니다.
- 외래 키 제약 조건을 다시 추가합니다. ALTER TABLE 문을 사용하여 'limenet.tech_hierarchy' 테이블에 외래 키 제약 조건을 다시 추가할 수 있습니다. 이때, 변경된 tech_hier_ver_id 열을 참조하도록 외래 키를 설정해야 합니다.
-- 외래 키 제약 조건 삭제
ALTER TABLE limenet.tech_hierarchy DROP FOREIGN KEY FKtech_hiera928179;
-- tech_hier_ver_id 열 변경
ALTER TABLE limenet.tech_hier_version MODIFY COLUMN tech_hier_ver_id INT(11) AUTO_INCREMENT NOT NULL;
-- 외래 키 제약 조건 추가
ALTER TABLE limenet.tech_hierarchy ADD CONSTRAINT FKtech_hiera928179 FOREIGN KEY (tech_hier_ver_id) REFERENCES limenet.tech_hier_version(tech_hier_ver_id);
'개발 > 토막난 상식' 카테고리의 다른 글
그래프 비교하기 (1) | 2024.03.12 |
---|---|
Map {} (0) | 2024.03.07 |
InfluxDB와 Elasticsearch (0) | 2024.02.14 |
상태 관리 순위 와 Zustand 예시 (1) | 2024.02.08 |
useRef vs window.addEventListener when onKeyDown in div (0) | 2024.01.30 |