2009-05-04 3 views
1

문자열에는 제한이 없지만 모든 일반 관계형 데이터베이스에서는 열이 최대 길이를 선언해야합니다. 이것은 오히려 중요한 불일치로 보입니다. 전형적인 ORM이이를 어떻게 처리하는지 궁금합니다.데이터베이스 ORM에서 문자열을 매핑해야하는 것은 무엇입니까?

'text'열 유형을 사용하면 이론적으로 훨씬 더 많은 문자열과 같은 저장 공간을 제공하지만 텍스트 열은 쿼리 할 수 ​​없거나 적어도 효율적이지는 않습니다 (인덱싱되지 않음).

나는 아마도 NHibernate와 같은 것을 사용하려고 생각하고있다. 그러나 ORM 요구는 비교적 간단하다. 그래서 내가 직접 작성하면 약간의 부 풀림을 줄일 수있다.

답변

1

예를 들어 SqlServer는 실제 데이터 크기 만 저장합니다. 나를 위해, 문자열에 대해 충분히 큰 크기를 정의하면 사용자가 한계를 인식하지 못하는 것으로 충분합니다.

Exmaples : 제품의

  • 이름, 사람 등 : 500
  • 경로, URL의 등 : 1000
  • 댓글, 무료 문자 : 2000 또는 NHibernate에가하는

더 런타임에 크기가있는 것은 아닙니다. 어떤 종류의 유효성 검사기를 사용하거나 데이터베이스를 잘라내거나 예외를 throw해야합니다.

견적 : "내 ORM 요구 사항은 비교적 간단합니다." NHibernate가 과잉인지 아닌지를 말하기는 어렵습니다. 데이터 액세스는 일반적으로 그렇게 간단하지 않습니다. 당신은 세밀한 복잡한 도메인 모델이

  • : 경우에 내 머리 위로의 간단한 가이드로

    은 NHibernate에 걸릴. 상속을 매핑해야합니다.
  • 도메인 모델이 데이터베이스 모델과 다소 독립적이되기를 원합니다.
  • 일부 지연로드 기능이 필요합니다.
  • 데이터베이스 독립성을 원합니다. SqlServer 또는 Oracle에서 실행

테이블 당 클래스가 필요한 것으로 생각되면 실제로 ORM이 필요하지 않습니다.

+0

"예를 들어 SqlServer는 실제 크기의 데이터 만 저장합니다." - 이론적으로 최대 크기를 MAX_INT와 같거나 여전히 성능 단점이 있다고 선언 할 수 있습니까? – devios1

+0

NVarchar 8000으로 제한됩니다. 그러면 필터링 할 가능성과 같은 몇 가지 특수 기능이있는 BLOB 인 nvarchar (MAX)를 지정해야합니다. 성능상의 단점이 전혀 없다면 100 %를 말할 수는 없지만 그 이유가 무엇인지 모릅니다.반면에 화면이나 보고서에 제대로 표시 할 수 없으므로 8000 자의 사용자 이름을 사용하는 것은 의미가 없습니다. 합리적인 값으로 제한하는 것은 전혀 아프지 않습니다. –

1

내 지식에 따르면, 그들은 ORM이 스키마를 정의하도록하거나, 다음을 처리하지 않습니다. ORM은 크기가 기본값이거나 구성에 의해 결정됩니다.

스키마가 ORM에 의해 정의되지 않은 경우 규칙을 따르기 만하면 너무 큰 문자열을 삽입하면 DB에서 오류가 발생합니다.

나는 varcharish 유형을 유지합니다. SQL Server의 경우 varchar2는 oracle이고 nvarchar는 clob을 사용하고 있지 않은 경우입니다.

관련 문제