[DB] ASP.NET Membership Table에서 Lowered Column의 목적

2014. 8. 22. 10:18Database

일부 ASP.NET Membership Table에는 Lowered* Column을 따로 관리하는 것을 볼 수 있습니다.

예를 들어 SqlMembershipProvider를 위한 Membership Table(혹은 asp_regsql 도구를 통해 생성된 Table) 중에서 다음 컬럼을 볼 수 있습니다.

  • aspnet_Applications.LoweredApplicationName
  • aspnet_membership.LowerEmail
  • aspnet_users.LoweredUserName
    image

이 것은 왜 쓰는 것이고 언제 사용해야 할까요?

목적

Lowered* Column들은 Calculated Column의 목적으로 생성되었습니다. Calculated Column이란 쿼리를 수행하는데 있어 반복적으로 사용되는 계산을 미리 수행하여 저장해두는 것을 말합니다. 보통 합계나 통계를 미리 계산해두는 집계컬럼도 동일한 목적을 가진 Calculated Column입니다. (우리가 잘 아는 Indexing도 Calculated Column과 동일한 목적으로 사용되는 것이라 합니다.)

그래서 특정 컬럼을 소문자로 저장해두는 이유는 무엇일까요? 바로 Non case-sentitive 검색비용을 줄여주기 위해 생성된 것입니다. SQL Server와 같은 Non case sentitive DB에서는 특별한 이점이 없지만, Informix와 같은 case-sentitive DB에서는 non case-sentitive 검색을 위해 lower() 메서드를 사용해야 하며 이는 Query비용을 증가시키기 때문에 미리 Lowered* Column을 계산해 두는 것이라 합니다.

ASP.NET Membership Table에서 UserName, Email, ApplicationName만 소문자로 저장해두는 이유는 이러한 Column들은 Non case-sentitive 검색에 자주 이용되며, CUD작업보다 검색이 빈번한 컬럼이며, Table크기가 커서 검색비용이 크다고 판단했기 때문에 검색비용을 줄일 수 있도록 미리 Lowered* Column으로 만들어 두는 것이라 합니다.

요약: non case-sentitive 검색이 필요한 경우에 쓰면 됩니다.