정수를 사용하고 곱셈을 요구하는 것과 비교소수를 데이터 유형으로 사용하는 것에 대해 어떻게 생각하시나요?

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

문제

이에 대해 어떻게 생각하시나요?저는 탭으로 구분된 텍스트 형식의 일부 새로운 데이터를 통합하는 작업을 하고 있으며 모든 소수 열은 단일 정수로 유지됩니다.소수점 이하 양을 결정하려면 숫자에 .01을 곱해야 합니다.백분율, 무게, 가격 정보 등에 대해 이 작업을 수행합니다.예를 들어, 품목의 가격은 다음과 같이 표현됩니다. 3259 데이터 파일에 있는 데이터 파일에 표시하고 싶을 때 "실제" 양을 얻으려면 이를 곱해야 합니다. 32.59.

이것이 좋은 생각인가요, 나쁜 생각인가요?데이터 구조를 공급업체가 제공한 것과 동일하게 유지해야 합니까, 아니면 데이터베이스 열을 실제 십진수로 만들고 SSIS 또는 일종의 ETL 프로세스를 사용하여 정수 열을 해당 십진수로 자동 곱해야 합니까?현재로서는 ORM을 사용할지 저장 프로시저를 사용할지 또는 데이터를 검색할 대상을 결정하지 않았으므로 장기적으로 생각하고 사용할 접근 방식을 결정하려고 합니다.또한 DTO 또는 이와 유사한 코드에서 다음과 같이 쉽게 처리할 수도 있습니다.

public class Product
{
    // ...
    private int _price;
    public decimal Price
    {
        get
        {
            return (this._price * .01);
        }
        set
        {
            this._price = (value / .01);
        }
    }
}

그러나 그것은 수업의 측면에서 추가적이고 불필요한 작업처럼 보입니다.정기적으로 업데이트를 받아야 하는 공급업체에서 데이터를 정수 형식으로 제공한다는 점을 염두에 두고 이에 접근하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

"이게 좋은 생각인가요, 나쁜 생각인가요?"

나쁜.

"내 데이터 구조를 공급업체가 제공한 것과 동일하게 유지해야 합니까?"

아니요.

"데이터베이스 열을 실제 십진수로 만들어야 합니까?"

예.

옳은 일을 하는 것이 훨씬 더 간단합니다.현재 데이터는 NO "로 전송됩니다." 정수를 소수점과 분리하기 위해;그건 별 의미가 없습니다.

데이터는 십진수입니다.소수 수학이 작동합니다.귀하의 언어와 데이터베이스에서 제공하는 십진법을 사용하십시오.자신만의 십진수 산술 버전을 만들지 마세요.

다른 팁

개인적으로 나는 데이터베이스에 데이터를 올바르게 저장하고 업데이트가 들어올 때마다 간단한 변환을 수행하는 것을 훨씬 선호합니다.

현명하게:그것들도 int로 유지되지 않습니다.구문 분석이 필요한 문자열입니다.

철학적으로:당신은 정보 파일에 적어야합니다 데이터 데이터베이스에.이는 정보를 의미 있고 유용하게 만드는 데 필요한 모든 방식으로 정보를 변환하는 것을 의미합니다.이 변환을 미리 수행하지 않으면 데이터베이스의 모든 소비자에 걸쳐 변환을 반복하게 될 것입니다.

질문에 답할 수 있는 것과 같이 데이터 변환이 허용되지 않는 몇 가지 시나리오가 있습니다."파일에 무엇이 있었나요?"이러한 시나리오에서는 데이터를 문자열로 작성해야 합니다. 구문 분석이 실패하면 파일이 정확하게 표현되지 않습니다.

내 생각에 이 시나리오에서 Int보다 Decimal을 사용할 때 가장 중요한 측면은 유지 관리 가능성입니다.

테이블에 저장된 데이터는 임의로 조작할 필요 없이 명확하게 의미가 있어야 합니다.조작이 필요한 경우에는 그 사실이 분명하게 나타나야 합니다(예: 필드 이름을 통해).

나는 최근에 요일이 2-8 값으로 저장된 데이터를 다루었습니다.이로 인해 발생한 문제는 상상할 수 없습니다(테스트에서는 다양한 이유로 문제가 표시되지 않았지만 실제 사용으로 인해 정치적 폭발이 발생했습니다).

그러한 상황에 직면하게 되면 저장 프로시저나 뷰를 사용하지 않고는 테이블에 데이터를 쓰거나 테이블에서 읽을 수 없도록 보장할 것입니다.이를 통해 필요한 조작이 시행되고 문서화되도록 할 수 있습니다.만약 당신이 이 두 가지를 모두 갖추지 못한다면, 미래에 당신을 뒤따르는 불쌍한 사람들이 당신의 이름을 저주할 것입니다.

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