PostgreSQL | 데이터 표준화 및 정규화 작업함수 - normalize
이번에 검색기능 및 하이라이트를 작업하면서 알게된 함수입니다 :)
파일 다운로드를 하고, 이미지의 이름을 가져올 때 한국어가 표준화가 안되어 검색이 안되는 현상이 있었는데,
PostgreSQL 'normalize' 함수를 사용하여 해결하였습니다 :)
데이터베이스 설계에서의 정규화
데이터베이스 설계에서 정규화(normalization)란
데이터베이스 테이블을 설계할 때 중복을 최소화하고 데이터 무결성을 유지하기 위한 과정을 말합니다.
주로 관계형 데이터베이스에서 사용되며, 일반적으로 다음과 같은 정규화 단계가 있습니다.
제 1정규화(1NF)
모든 컬럼 값이 원자적(atomic)이어야 합니다.
즉, 각 셀에는 하나의 값을 가지며, 다중 값 속성이 없어야 합니다.
제 2정규화(2NF)
부분 함수 종속을 제거하여 모든 비주기적(non-prime) 속성이 기본 키에 완전 함수 종속해야 합니다.
제 3정규화(3NF)
이행 함수 종속을 제거하고 모든 비주기적 속성이 기본 키에 이행적 종속(dependent)되지 않아야 합니다.
정규화는 데이터의 중복을 줄이고 데이터베이스 구조를 최적화하여 데이터의 일관성과 정확성을 유지하려는 목적을 가집니다.
문자열 함수에서의 정규화
문자열 처리 함수에서 정규화(normalization)는 문자열을 표준화하는 작업을 말할 수 있습니다.
주로 다음과 같은 목적으로 사용됩니다.
공백 제거
문자열 앞뒤 공백을 제거하거나, 중복 공백을 단일 공백으로 치환하는 작업입니다.
대소문자 통일
문자열의 모든 문자를 대문자나 소문자로 변환하여 일관된 비교를 가능하게 합니다.
문자열 정규화
특정 문자나 패턴을 표준화하여 일관성 있는 데이터를 유지합니다.
예를 들어, 한글 문자열에서 조합형(결합형)과 완성형(분리형) 문자를 통일하는 작업 등이 있습니다.
각 데이터베이스 시스템마다 지원하는 문자열 함수와 정규화 함수는 다를 수 있으며,
PostgreSQL에서는 'regexp_replace' 함수나 다양한 문자열 함수를 사용해 원하는 형태로 문자열을 정규화할 수 있습니다.
normalize
PostgreSQL에서 normalize 함수는 문자열을 유니코드 정규화 방식으로 변환하는 데 사용됩니다.
유니코드 정규화는 동일한 문자에 대해 여러 다른 유니코드 표현을 표준화하는 방식입니다.
PostgreSQL에서는 주로 검색과 비교 작업을 용이하게 하기 위해 사용됩니다.
// normalize 함수 구문
normalize(string text [, form text]) → text
여기서 string은 정규화할 문자열이고, form은 정규화 형식을 지정하는 선택적 인자입니다.
form의 종류
NFC (Normalization Form C) - Canonical Composition(기본값)
정규 조합이라고 합니다.
이 형식은 문자를 가능한 단일 문자로 결합합니다.
기본적으로 Unicode의 표준 구성 방식입니다.
예시: 'e' + '́' → 'é'
일반적으로 가장 많이 사용되는 형식으로,
텍스트 데이터를 일관성 있게 저장하고 검색할 때 유용합니다.
다국어 텍스트를 다룰 때 기본적으로 사용하는 형식입니다.
NFD (Normalization Form D) - Canonical Decomposition
정규 분해라고 합니다.
이 형식은 문자를 가능한 한 기본 문자와 결합 부호로 분해합니다.
예시: 'é' → 'e' + '́'
텍스트 테이터의 비교를 더욱 정밀하게 할 필요가 있을 때 사용됩니다.
분해된 형태로 저장하면, 같은 문자에 대한 여러 가지 표현을 동일하게 인식할 수 있습니다.
NFKC (Normalization Form KC) - Compatibility Composition
호환성 조합이라고 합니다.
이 형식은 문자를 가능한 한 단일 문자로 결합하면서, 호환성을 위해 일부 문자를 표준 형태로 변환합니다.
예시: '㍿' → '株式会社'
유니코드 호환성을 고려하여 문자를 조합합니다.
텍스트 데이터를 검색하거나 비교할 때, 다양한 표현을 표준화된 형태로 변환하여 일관성 있게 처리할 수 있습니다.
NFKD (Normalization Form KD) - Compatibility Decomposition
호환성 분해라고 합니다.
이 형식은 문자를 가능한 한 기본 문자와 결합 부호로 분해하면서, 호환성을 위해 일부 문자를 표준 형태로 변환합니다.
예시: '㈜' → '株' + '式' + '会' + '社'
유니코드 호환성을 고려하여 문자를 분해합니다.
데이터 분석이나 처리에서 최대한 많은 정보를 보존하고자 할 때 유용합니다.
* 기본적으로 form 인자가 제공되지 않으면 NFC가 사용됩니다.
저는 하이라이트 함수를 정규식을 통해 개발을 할때 NFC를 사용해 개발을 하였는데,
너무 유용한 함수같아서 블로그에 정리하게되었습니다 :)
다들 즐거운 개발공부되세요 :) !!