그나저나 메모
개발하다 궁금했던 것들을 직접 확인하고 기록합니다.
백엔드, 데이터베이스 그리고 가끔은 그 밖의 관심사를 다룹니다.
최근 글
모든 글 보기 →-
입금자명으로 정산 자동화하기: difflib vs BM25
입금자명으로 거래처를 찾는 데 difflib와 BM25를 썼습니다. 실제 입금 1,460건에서 이름을 정규화하면 1위 정확도는 difflib 79.0%, BM25 79.8%로 비슷했습니다. BM25는 한 건에 0.45ms로 48배 빨랐고 1위 동점이 적었습니다. 두 방법이 점수를 매기는 방식의 차이는 가상 예시로 따라갑니다.
-
데이터베이스 정규화 (9): 정규화 절차와 역정규화, 나눈 뒤에 되돌리는 선택
1편부터 8편까지의 정규화를 한 절차로 모읍니다. 각 단계가 어떤 종속을 찾아 어떻게 나누는지, 어디서 멈추는지, 그리고 나눈 테이블에 중복을 다시 넣는 역정규화가 정규화하지 않은 상태와 무엇이 다른지를 MariaDB에서 확인한 갱신 이상과 함께 다룹니다.
-
VARCHAR를 255자 넘게 잡으면 느려질까?
컬럼 길이를 100자에서 1000자로 늘려 달라는 요청에 "255자를 넘기면 성능이 달라진다"는 말이 나왔습니다. MariaDB 11.4.2에서 재 보니 255는 글자가 아니라 바이트에 붙은 숫자였고, 실행 시간을 가르는 선은 메모리 임시 테이블이 감당하는 512자에 있었습니다.
-
데이터베이스 정규화 (8): 제4정규형과 제5정규형, 함수적 종속 너머의 중복
BCNF를 만족하는 테이블에도 중복이 남습니다. 함수적 종속으로는 설명되지 않는 그 중복의 이름인 다치 종속과 조인 종속, 자명한 종속을 조건에서 빼는 이유, 제4정규형과 제5정규형의 정의와 분해 절차, 그리고 도메인키 정규형과 제6정규형까지 정리합니다.
-
데이터베이스 정규화 (7): 자연키와 대리키, 무엇을 기본키로 삼을 것인가
자연키와 대리키(surrogate key)를 다룹니다. 용어의 출발과 Codd가 1979년에 지적한 자연키의 세 가지 문제, 두 방식의 장단점, JPA에서 자연키를 어디에 적어야 하는지, 그리고 자연키가 없으면 정규화를 못 한다는 오해까지 정리합니다.