어떻게 모델링하는 필드를 모두 포함할 수 있습니다 숫자 및 문자열 값에 SQL Server2005?

StackOverflow https://stackoverflow.com/questions/34398

  •  09-06-2019
  •  | 
  •  

문제

나는 새로운 데이터베이스 테이블 내가 만들 필요가...
그것은 논리적으로 포함 ID, 이, name, 고 "value".
는 값 필드이 될 수 있습니다 숫자 또는 문자열이다.

나는 생각하지 않고 싶은 분야 varchar, 기 때문에,나도를 쿼리할 수 있으로 필터 WHERE value > 0.5 니다.

는 가장 좋은 방법은 무엇인하는 모델이 개념에서 SQL Server2005?

편집: 나는에 반대하지 않을 만드는 여러 개의 필드로 여기에(하나의 숫자 중 하나에 대한 비 숫자),그 이후 그들은 그들 모두 정말 동일한 개념을 확실하지 않았다는 좋은 생각입니다.
나를 만들 수 있는 별도의 필드는,다음 보기는 종류의 합체로 하나의 논리 열입니다.

에 어떤 의견을까요?

내가 무엇을 달성하고 싶은 정말 매우 간단하다...일반적으로 이 데이터는 것을 맹목적으로 표시되는 그리드형 보기입니다.
내가 원하는 것도 필터링 할 수 있는 숫자 값에는 그리드.이 테이블은 끝날 것이다에 있는 수천만 명의 기록,그래서 나는 원하지 않을 페인트로 자신을 코너를 쿼리하는 성능이다.
쿼리하는 것보다 성과가 나의 주요 관심사입니다.

도움이 되었습니까?

해결책

귀하의 문제점과 데이터를 혼합할 수 있는 방법 Sql2005 종류는 텍스트 데이터입니다.그것은'자연'니다.

이 있는 경우 varchar 장 및:

where value > '20.5'

값을 다음과 같"5"이에서 당신의 결과(으로서 캐릭터를 기반으로 정렬"5"이 후에"20.5")

당신이가는 더 나을 것으로 별도의 열을 저장합니다.

사용 뭉쳤을 병합하는 것으로 그들을 열면 당신이 그들을 필요로 합병에서 당신의 결과는:

select [ID], [Name], Coalesce( [value_str], [value_num] )
from [tablename]

다른 팁

을 얻을 수있는 좋은 방법 쿼리에 지원이 당신이 원하는 두 개의 열이 있:numvalue 는 저장하수 및 textvalue 저장하는 자입니다.그들은 해야 널 또는 적어도 몇 가지 기본을 나타내는 값.귀하의 프로그램은 다음을 결정하는 열을 저장하는 그것의 가치를 함께 떠나 아무 소용이 없습니다.

을 저장하려는 경우에는 숫자 및 문자열 값에서 동일한 열이 나는 확실하지 않을 방지할 수 있습을 많이의 캐스팅으로 변환할 때 사용하는 열로서 쿼리를 필터링합니다.

두 개의 열이 있습니다.

Table: (ValueLable as char(x), Value as numerica(p,s))

나는 생각하지 않는 이러한 열 두 varchar 및 int 형식입니다.저장할 수 있었 당신의 값으로 varchar 캐스팅 int 하는 동안 당신의 쿼리가 있습니다.그러나 이 방법은 당신이 얻을 수 있는 예외는 경우에 당신의 값을 포함한 모든 문자입니다.당신은 무엇을 하려고 달성하기 위해?

당신이 그것을 원하는 경우를 수 있는 문자열,내 생각을 열 varchar,또는 이와 유사한.

대안이 될 수 있는 2 또는 3 열을 대신 값을 하나의 열입니다.어쩌면 이 세 개의 열이 올바른(enum 사이"수용"및"문자열"),number_value,string_value.다음할 수 있습을 재구성하는 쿼리할

WHERE value_type = 'number' AND number_value > 0.5

나는 생각하지 않을 것이 주위에 얻을 수 있을 사용하여 VARCHAR 이며 또는 당신으로 데이터를 입력합니다.혼합된 데이터는 다음과 같이 당신을 설명하는,당신은 값을 테스트할 때 당신 분야의 db 를 수행하는 적절한 캐스팅으로 전환 또는 기반에 데이터를 입력합니다.

나를 만들 수 있는 별도의 필드는,다음 보기는 종류의 합체로 하나의 논리 열입니다.에 어떤 의견을까요?

에 따라 소스의 데이터입니다.는 경우를 받고 있는 데이터는 사용자(또는 일부를 다른 시스템)에서는 자유 형태의 방식으로 정말로 걱정하지 않는 어떤 유형의 데이터가 그것이 최선의 방법으로 저장하는 가장 일반적인 방식으로(varchar,etc.).는 경우에는 수신 데이터가 더욱 체계적이고 당신을 걱정하는 구조물,그것은 더 이해를 유지하는 구조에서 데이터베이스를 사용하여 별도의 필드가 있습니다.

의 관점에서 선택 그리 중요하지 않지만,저장할 수 있습니다 어느 방법이고 그것을 읽으로 동일합니다.면으로 필터(당신이 언급)상황이 좀 더 털이지만,여전히 쉽게 드리겠습니다.그러나,당신이 언급하지 않는 경우에 당신을 할 수 있어야 업데이트 데이터 및 그렇다면,필요한 경우 적용할지에 대한 유효성 검사 데이터입니다.

의 소리에서 그것은,당신이 해야 할 다른 유형의를 기반으로 검색"유형"의 값이 저장됩니다.이와 같이,하는 것은 의미가 있습니다 추가 유형 필드에는 어떤 필터를 신속하게 제한된 유형의 값이다.참고,유형에 의해 나는 의미 이상의 논리,응용 프로그램 범위,형식하지 않는 실제 데이터 형식되고 저장됩니다.

나의 권고 사용하는 것이 하나의 필드를 입력 열 필요할 경우 쉽게 업데이트를 지원하거나 사용하여 여러 분야(또는 테이블,는 경우 이러한은 완전히 다른 데이터 세트)를 선택하는 경우 필터링이 필요합니다 모든 것입니다.

사용하는 방법을 고려할 수 있습니다 두 개의 열을,하나"라는 문자열"과"하나의 숫자"(어떤 변형의 사람들은 적절한)와 함께"라는 문자열"column NOT NULL,"숫자"열 수 있도록 NULL 값이 있습니다.을 삽입할 때 값이 항상 채우"라는 문자열"열 indpendent 의 유형,그러나 이 값은 숫자,또한 그것을 저장에 숫자'열입니다.지금 당신은 당신이 내장된 표시 형식으로(는 경우에 숫자'란 채워집니다 그것은 숫자,그렇지 않으면 그것은 문자열),항상 그냥 뽑아 가치 표시하기 위해서는"문자열"열 사용할 수 있습니다 숫자'값을 계산하거나 적절한 숫자를 정렬/비교으로 필요합니다.항상 추가할 수 있습 번째 열 나타내는 값을 입력하지만,이 방법 위한 필요를 삭제합니다.참고하는 것을 고려할 수 있습을 유지하는 숫자 및 문자열을 사용하여 값을 설정의 삽입 업데이트 및 트리거합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top