2017-03-24 2 views
1

트랜잭션 테이블을 상상해 ..서명 저장 또는 거래 원장 테이블의 부호 값이

CREATE TABLE `transaction` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `type` ENUM('buy','sell') NOT NULL, 
    `amount` DECIMAL(10,2) UNSIGNED NOT NULL, 
    `currency` ENUM('eur','usd') NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE = InnoDB; 

을 지금은 모든 항목의 합계와 총을 반환해야 할 경우, 나는 다음과 같은

SELECT SUM(
    CASE 
     WHEN `type` = 'buy' THEN `amount` ELSE -`amount` 
    END) AS `total`, 
    `currency` 
    FROM `transaction` 
GROUP BY `currency`; 
할 것

이제 SIGNEDamount을 상상해보십시오.

SELECT SUM(`amount`) AS `total` FROM `transaction` GROUP BY `currency`; 

보이지? 그러나 어쨌든 나는 뭔가를 놓친 것처럼 느껴지고, 나중에 PHP로 데이터를 처리해야 할 경우 상황이 복잡해질 수 있습니다.

서명 및 서명되지 않은 번호를 사용하여 찬반 양론에 대한 의견을 보내 주시면 감사하겠습니다.

+0

@mkaatman이 질문은저기서 적합하지 않습니다. [장단점은 무엇입니까?] (https://softwareengineering.meta.stackexchange.com/q/6758/31260)를 참조하십시오. 당신이 익숙하지 않은 사이트를 추천하지 말라. (당신은 심지어 사이트 이름을 잘못 잡았다.) – gnat

+0

약간의 재 인용을 통해이 질문을 받아 들일 수있다. 조언 해주셔서 감사합니다. – mkaatman

+0

@mkaatman 기본적으로 알고 싶습니다.이 스키마 또는 스키마를 사용하여 작업을 복잡하게 만들 수있는 지점을 놓친 경우. "장단점"문장을 삭제해야합니까? – Aley

답변

0

부호없는 값을 사용하면 원래 음수 값이 필요하지 않은 경우 더 큰 값 (~ 2X 큰 값)을 같은 공간에 저장할 수있었습니다.

상황에 따라 10 진수 열의 부호없는 비트를 삭제하고 값을 나타내야합니다. 예제에서와 같이 쿼리에서 수학을 수행하면 성능에 영향을 주며 대용량 쿼리의 경우에는 상당한 영향을 미칩니다.

한정자없이 데이터를 표현하는 것이 거의 언제나 바람직하지만 실제로는 그렇습니다. 언젠가 통화 변환을 추가해야하는 경우 성능에 미치는 영향을 상상해보십시오.

마지막으로, 귀하의 현재 구현 방법에 따라 신용 대 환불을 어떻게 나타낼까요? 예를 들어, 판매에 대한 환불이있는 경우 "판매 중지"거래를 저장할 방법이 없습니다.

+0

"통화 변환 추가"란 무엇이 실적에 어떤 영향을 줍니까? "구매자"와 "판매자"를 제거하고 기호 (+/-)로만 변수의 유형을 나타내는 "한정자없는 데이터"를 의미합니까? – Aley

+0

"통화 변환 추가"를 사용하여 "실제"값으로 계산해야하는 미래의 필요성을 예로 들었습니다. "한정자없는 데이터"로, 예, 나는 값의 부호를 나타 내기 위해 다른 필드를 사용하지 않을 것입니다. 여전히 거래의 유형을 나타 내기 위해 구매 및 판매 가치를 사용할 수는 있지만 가치의 부호는 아닙니다. –