문제

문제:

다양한 측정 값의 TimesSeries 데이터를 저장하는 관계형 데이터베이스 (Postgres). 각 측정 값은 특정 "측정 유형"(예 : 온도, 용존 산소 등)을 가질 수 있으며 특정 "측정 단위"(예 : 화씨/섭씨/켈빈, 리터당 백분율/밀리그램 등)를 가질 수 있습니다.

의문:

차원 무결성이 보존되도록 유사한 데이터베이스를 구축 한 사람이 있습니까? 제안이 있습니까?

측정 _type와 measurement_unit 테이블을 구축하는 것을 고려하고 있습니다. 둘 다 텍스트 두 열, ID 및 텍스트가 있습니다. 그런 다음 Measured_value 테이블 에서이 테이블에 대한 외래 키를 만들었습니다. 텍스트는 비 유적 복제물 (예 : 리터당 마이크로 그램의 경우 'ug/l'vs 'µg/l')의 가능성이 있기 때문에 다소 걱정됩니다.

이것의 목적은 쿼리에서 단위를 변환하고 확인하거나 외부로 프로그래밍을 통해 변환하고 확인할 수 있도록하는 것입니다. 이상적으로는 나중에 엄격한 치수 분석을 포함 할 수 있습니다 (예 : µg/L을 'm/v'(대량으로 나눈)).

이것을 달성하는 더 우아한 방법이 있습니까?

도움이 되었습니까?

해결책

나는 AEON 전 장치를 처리하기위한 데이터베이스 하위 스키마를 제작했습니다 (좋아요, 나는 약간 과장합니다. 약 20 년 전이었습니다). 다행히도, 그것은 단순한 질량, 길이, 시간 치수 (온도, 전류 또는 전류 또는 광도 등) 만 다루어야 만하면 게임의 통화 측면이 덜 간단했습니다. 한 통화 사이에서 수많은 다른 방법이있었습니다. 그리고 다른 하나는 날짜, 통화 및 전환율이 유효한 기간에 따라 다릅니다. 그것은 물리적 단위와 별도로 처리되었습니다.

기본적으로, 나는 'ID'열, 장치 이름, 약어 및 차원 지수 세트가있는 테이블 '측정'을 만들었습니다. 이것은 '볼륨'(길이 = 3, 질량 = 0, 시간 = 0), '밀도'(길이 = 3, 질량 = -1, 시간 = 0) 등과 같은 이름으로 채워집니다.

두 번째 단위 테이블이 있었는데,이 단위는 측정 값을 식별 한 다음 특정 측정에서 사용하는 실제 단위를 식별했습니다. 예를 들어, 배럴과 입방 미터, 그리고 모든 종류의 다른 관련 단위가있었습니다.

특정 단위 간의 변환 계수를 정의하는 세 번째 테이블이있었습니다. 이것은 단위 1을 단위 2로 변환 한 두 단위와 곱셈 변환 계수로 구성되었습니다. 여기서 가장 큰 문제는 변환 계수의 동적 범위였습니다. U1에서 U2로의 변환이 1.234E+10이면 역은 다소 적습니다 (8.103727714749E-11).

온도에 대한 S.Lott의 의견은 흥미 롭습니다. 우리는 그것들을 다룰 필요가 없었습니다. 저장된 절차는 하나의 저장된 절차를 시스템에 통합하는 것이 까다로울 수 있다고 언급했을 것입니다.

내가 설명한이 계획은 대부분의 전환을 한 번 설명 할 수있게 해주었습니다 (2 주당 푸르 롱과 같은 가상의 단위, 또는 미국 이외의 가설 적이지만 똑같이 모호한 것 (Acre -feet)과 같은 전환이 검증 될 수있었습니다 (예 : 두 가지 모두와 같이. 변환 계수 테이블의 장치는 동일한 측정 값을 가져야했습니다). 각도 (또는 고체 각도)와 같은 치수가없는 단위는 흥미로운 문제를 나타내지 만 대부분의 다른 단위를 처리하도록 확장 될 수 있습니다. 임의의 변환을 처리하거나 변환을 지원할 수없는 경우 오류를 생성하는 지원 코드가있었습니다. 이 시스템의 한 가지 이유는 다양한 국제 제휴 회사가 데이터 데이터를 로컬로 편리한 단위로보고했지만 HQ 시스템은 원래 데이터를 수락하고 결과 집계 데이터를 관리자에게 적합한 단위로 제시해야했습니다. 보고서에 가장 적합한 단위에 대한 자신의 아이디어 (본부의 국가 배경과 HQ의 의무 기간에 따라)를 가졌습니다.

다른 팁

"텍스트는 비 유적 복제 가능성이 있기 때문에 다소 걱정됩니다."

오른쪽. 따라서 텍스트를 키로 사용하지 마십시오. ID를 키로 사용하십시오.

"이것을 달성하는 더 우아한 방법이 있습니까?"

설마. 어렵다. 온도는 온도 자체가 평균이며 거리처럼 합산되지 않기 때문에 자체 문제입니다. 플러스 F에서 C 전환은 곱하기가 아닙니다 (다른 모든 장치 변환과 마찬가지로).

변환에 대한 참고 사항 : 많은 단위가 선형으로 관련되어 있으며 "y = a + bx"와 같은 공식을 사용하여 변환 할 수 있습니다. 여기서 A와 B는 필요한 각 유닛 쌍에 대해 데이터베이스에 저장 될 수있는 상수입니다. 사이를 전환합니다. 예를 들어, 섭씨가 파렌 히트의 경우 상수는 a = 32, b = 1.8입니다.

그러나 드문 예외도 있습니다. 예를 들어 로그와 비-관구 단위 사이를 전환합니다. 또는 질량 당 질량과 대량 질량 사이를 전환합니다 (이 경우 측정중인 화합물의 어금니 질량을 알아야합니다).

물론, 시스템에서 요구하는 모든 변환이 선형이라고 확신한다면, 과잉 엔지니어링이 필요하지 않으며 두 상수를 저장하십시오. 그런 다음 계산 된 필드와 직선 SQL 조인을 사용하여 데이터베이스에서 표준화 된 결과를 추출 할 수 있습니다.

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