문제

여러 필드가있는 SQL 테이블이 있습니다.

id | 가치 | 유형

일반적인 레코드는 다음과 같습니다.-1000,10, [int

두 번째 줄은 다음과 같습니다.-

1001, foo, [String

세 번째 줄은 다음과 같습니다.-

1002,10/12/2008, [dateTime

이 테이블에서 선택할 때마다 지정된 유형에 값을 시전해야합니다. 나는 이것에 대해 데이터베이스 재 설계를 할 수 있으며 이것을 최적화하기위한 최상의 경로를 궁금해하고 있습니다. (SQL 2000).

도움이 되었습니까?

해결책

공포! 이것은 두려운 것입니다 ENTITY-ATTIBLE-VALUE (EAV) 모델! 도망 가라!

그러나 진지하게, 이런 종류의 모델이 필요한 이유가 있다고 가정하면, 각 데이터 유형에 적절하게 입력 된 열을 만들 수 있습니까?

ID       Type      StringValue       DateValue      NumberValue
1001     String    Foo
1002     Date                        10/12/2008
1003     Number                                     123.46

다른 팁

일반적으로 테이블을 디자인 할 때 실제로 테이블이 무엇인지 알고 싶습니다. 지원해야 할 고유 한 수의 데이터 유형이 있습니까? 소수를 덮어야합니까? 가능한 한 가지 해결책은 다음과 같습니다.

CREATE TABLE dbo.My_Table (
     id           INT NOT NULL,
     data_type    VARCHAR(10) NOT NULL,
     string_value VARCHAR(100) NULL,
     int_value    INT NULL,
     date_value   DATETIME NULL,
     CONSTRAINT CK_My_Table_data_type CHECK data_type IN ('int', 'string', 'datetime'),
     CONSTRAINT PK_My_Table PRIMARY KEY CLUSTERED (id)
)
GO

그런 다음 데이터 유형을 사용하여 선택하거나 삽입 할 열을 결정할 수 있습니다. 사용에 문제가있을 수 있음을 명심하십시오.

SELECT
     id,
     CASE data_type
          WHEN 'string' THEN string_value
          WHEN 'int' THEN int_value
          WHEN 'datetime' THEN date_value
          ELSE NULL
     END

SQL Server를 사용하려면 데이터 유형이 모두 반환되는 열에 일치해야합니다. 한 번에 하나만 선택하는 경우 괜찮을 수 있지만 데이터 세트를 선택하려면 어쨌든 일부 캐스팅을 수행하거나 Data_Type 값이 동일한 행 만 선택해야합니다. 그래도 모든 시나리오에서 테스트를하지 않았으므로 작동하는 것이 무엇인지, 작동하지 않는지 확인해야합니다.

그래도 다시 말할 것입니다. 응용 프로그램의 디자인을 다시 살펴 봐야합니다. 이런 종류의 기능에 대한 요구 사항이있을 가능성이 있지만, 종종이 디자인 패턴을 볼 때 프론트 엔드가 실제로 원하는 것은 응용 프로그램에 표시 될 문자열입니다. 그 문자열은 때때로 숫자 나 날짜처럼 보입니다. 실제로 데이터에 대한 데이터 유형 특정 기능을 수행하려는 경우 "유연한"디자인이 요구 될 가능성이 높지만 모든 요구 사항을 알지 못하면 말할 수 없습니다. 이것은 과거의 경험에서 나온 것입니다.

편집 : 너무 천천히 입력하고 Tony가 나를 이길 것 같습니다. :)

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