2009-09-29 2 views
0

같은 데이터 구조를 가진 Excel 스프레드 시트가 점점 늘어나고 있습니다. 단일 인터페이스를 사용하여 각 스프레드 시트 (DataTable)를 쿼리하는 메커니즘이 필요합니다. 기본적으로 드롭 다운 목록에서 DataTable을 선택한 다음 검색을 수행합니다.가변 데이터 소스에 대한 쿼리 엔진. C#

처음 생각해 보았습니다.

  • SQL에 일반 데이터 구조를 만듭니다. 이것은 4 개의 테이블로 구성됩니다. 1) 연구 2) StudyProperty 3) StudyPropertyType (데이터 유형의 정적 목록) 및 4) StudyData.
  • 첫 번째 단계는 연구를 정의하는 것입니다. 학습 테이블에 항목을 작성하여 이름과 설명을 제공한다는 의미입니다. 이에 따라 Excel 스프레드 시트의 각 해당 필드에 대한 StudyProperty 레코드를 만들고 적절한 StudyPropertyType을 선택합니다.
  • 두 개의 열 (이름 및 생년월일)이있는 스프레드 시트가있는 경우 하나의 학습 레코드와 두 개의 StudyProperty 레코드 (StudyPropertyType이있는 이름 = 문자열) 및 (생년월일이있는 StudyPropertyType = DateTime)
  • 스터디가 정의되면 Excel 스프레드 시트의 데이터를 StudyData 테이블로 가져올 수 있습니다.
  • StudyData 테이블에는 가능한 각 데이터 유형에 대한 ID와 열이 있습니다. 스터디 정의에 따라 가져온 데이터는 dataType을 기반으로 스터디 테이블의 해당 필드에 저장됩니다. 따라서 생년월일은 학습 테이블의 ValueDateTime 필드에 저장됩니다.

이렇게 말하면 모든 스프레드 시트를 SQL에 저장할 수 있지만 일반적인 쿼리 메커니즘을 작성하는 방법에 대한 문제가 있습니다.

내가 필요로하는 것보다 훨씬 더 복잡하게 만들었고, 알 수없는 데이터 구조를 처리하는 더 좋은 방법이 있기를 바랍니다.

답변

1

SQL (및 RDBMS는 일반적으로) 알 수없는 데이터 구조를 전혀 처리하지 않습니다. 일반적으로 관계형 데이터베이스의 모든 기존 정의를 위반합니다.

EAV (Entity-Attribute-Value) 또는 데이터베이스 내 데이터베이스라고하는 유연한 속성에 대해 이야기하고있는 유혹스러운 스키마는 SQL/데이터베이스에서 성공적으로 사용할 수 있습니다 신중하게)하지만 대부분은 단순히 재앙을위한 처방입니다. StackOverflow에는 EAV에 대한 많은 질문이 있습니다.

내가 성공적으로 사용한 사례는 특수 쿼리가 아니지만 엔티티에 임의의 설정을두고 해당 기본 설정이 아닌 기본 설정으로 돌아갈 수있는 설정입니다. 기본값 - EAV가 위험한 이유입니다.) 그러나 일반적으로 설정을 인식하는 추가 코드가 앱에 저장되어 있지만 데이터베이스는 알지 못합니다. 그 문구만으로도 이것이 왜 (데이터베이스) 좋은 연습이 아닌지에 대한 단서를 제공해야합니다. 내가 그것을 사용했을 때, 가장 중요한 건축상의 관심사가있었습니다. 이를 사용하면 데이터베이스가 데이터를 관리 할 수 ​​없으며 (특히 약점은 데이터 유형 임) 무결성/경계 계약을 보장 할 수 있습니다. 그래서 일반적으로 SPs/views/UDF와 쌍으로 데이터베이스를 최대한 많이 제어 할 수 있습니다.

데이터웨어 하우징 및 통계 성능과 관련된 EAV의 친척이 있습니다. 이러한 경우 일반적으로 비즈니스 단위, 시간, 지리적 영역, G/L 부서 등의 차원과 측정 코드 및 측정 값 (일반적으로 MONEY)이 있습니다. 따라서 특정 사업부 등의 경우 1/1/2001에 대해 지출 비용 코드 1, 수익 코드 2 등이있는 비용 측정 값이있을 수 있습니다.이것은 EAV와 같은 많은 단점을 갖고 있으며, 수십억 개의 행을 가질 가능성이있는 테이블에서 스키마를 변경하는 대신 행을 추가하여 측정을 추가 할 수 있다는 것이 정당합니다. 또한 측정 항목은 시간이 지남에 따라 바뀔 수 있으며 이는 좋은 표현이며 롤업 등을 처리합니다.

EAV 구현을 위해 을 강력하게 고려합니다. - 요구 사항/사용 사례 및 대안이 있는지 확인하십시오. Excel 개체 모델을 사용하여 스프레드 시트를 분석하고 일치시킬 데이터베이스에 테이블을 작성한 다음 개별 테이블에 대한 임시 쿼리를 허용하는 것이 더 쉬울 수도 있습니다.

+0

Google의 철저한 설명에 감사드립니다. 가져온 스프레드 시트와 일치하는 데이터베이스 테이블을 만드는 것이 좋습니다. – Adam

관련 문제